Skip to content

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

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

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions