Skip to content

feat(metrics): TF-IDF Salienz pro File (charakterisierende Tokens) #50

@aspala

Description

@aspala

Was & Warum

Welche Tokens charakterisieren ein File gegenüber der Codebase? TF-IDF gewichtet Token-Häufigkeit im File (TF) gegen die Seltenheit über alle Files (IDF). Hohe Salienz = eigenständiges Domänen-Vokabular, niedrige = nur Allerwelts-Boilerplate.

Skala

Verhalten Beispiel erwartete Salienz
niedrig (unspezifisch) def changeset(s, attrs), do: cast(s, attrs, @fields) niedrig
mittel Standard-Context mit paar Domänennamen mittel
hoch (salient) calculate_levenshtein_winnowing_fingerprint(...) hoch

Umsetzung

  • Codebase-Metric (braucht Document-Frequency über alle Files): lib/codeqa/metrics/codebase/tf_idf_salience.ex, @behaviour CodeQA.Metrics.Codebase.CodebaseMetric (Muster wie Codebase.Similarity).
  • Schritt 1: DF über alle token_counts. Schritt 2: pro File TF-IDF-Vektor → mittlere/maximale Salienz + Top-Salient-Tokens.
  • Output je File: %{"mean_tfidf" => …, "top_salient_tokens" => [...]}.
  • Registrieren via Registry.register_codebase_metric/2 in lib/codeqa/engine/analyzer.ex.
  • Edge-Cases: einzelnes File (IDF entartet) → flache Salienz, dokumentieren.

Test

  • test/codeqa/metrics/codebase/tf_idf_salience_test.exs.
  • Assertion: ein Token nur in einem File → hohe Salienz dort; ein in allen Files gleich häufiges Token → Salienz ≈ 0.

Hinweis

Teilt die Codebase-Aggregation mit #43 (KL/JS). Der Korpus-Profil-Aufbau sollte beim ersten Codebase-Metric-PR sauber gelegt werden, damit beide ihn nutzen (siehe Reihenfolge-Diskussion: Codebase-Metriken zuletzt).

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions