Was & Warum
Char-3gram-Häufigkeiten sind das klassischste Authorship-Attribution-Signal — sie fangen Zeichenrhythmus (def, do\n, , %, Spacing) ein, der unbewusst gesetzt wird. Ähnliches CNG = ein Stil; abweichendes = Fremdkörper/anderer Autor.
Skala
| Verhalten |
Beispiel |
erwartet |
| erwartet |
matcht das Char-3gram-Profil der Codebase |
hohe Profil-Ähnlichkeit |
| mittel |
mehr |> als üblich |
leichte Abweichung |
| unerwartet |
r=Enum.reduce(l,%{},fn{k,v},a->...end) (keine Spaces) |
starke Abweichung |
Umsetzung
- Neues Modul
lib/codeqa/metrics/file/char_ngram_profile.ex, @behaviour CodeQA.Metrics.File.FileMetric.
- Input:
ctx.content. Char-Tri-/Tetragram-Häufigkeiten → normalisiertes Profil. Auf File-Ebene: Profil-Entropy + die dominanten n-Gramme als Signatur.
keys: ["cng_entropy", "top_char_ngrams", "ngram_size"].
- Registrieren in
lib/codeqa/engine/analyzer.ex.
- Edge-Cases: leer / kürzer als n → Nullwerte.
Test
test/codeqa/metrics/file/char_ngram_profile_test.exs, Muster wie brevity_test.exs.
- Assertion: gut formatierter Elixir-Code →
do\n/, unter den Top-n-Grammen; minifizierter Code ohne Spaces → andere Top-n-Gramme, höhere cng_entropy.
Hinweis
Die kodebasenweite Stil-Abweichung (CNG eines Files vs. Korpus-CNG) gehört konzeptionell zu den Codebase-Metriken (#43/#50/#51) und kann später als Cross-File-Vergleich draufgesetzt werden. Dieses Issue deckt erstmal das File-Profil ab.
Was & Warum
Char-3gram-Häufigkeiten sind das klassischste Authorship-Attribution-Signal — sie fangen Zeichenrhythmus (
def,do\n,, %, Spacing) ein, der unbewusst gesetzt wird. Ähnliches CNG = ein Stil; abweichendes = Fremdkörper/anderer Autor.Skala
|>als üblichr=Enum.reduce(l,%{},fn{k,v},a->...end)(keine Spaces)Umsetzung
lib/codeqa/metrics/file/char_ngram_profile.ex,@behaviour CodeQA.Metrics.File.FileMetric.ctx.content. Char-Tri-/Tetragram-Häufigkeiten → normalisiertes Profil. Auf File-Ebene: Profil-Entropy + die dominanten n-Gramme als Signatur.keys:["cng_entropy", "top_char_ngrams", "ngram_size"].lib/codeqa/engine/analyzer.ex.Test
test/codeqa/metrics/file/char_ngram_profile_test.exs, Muster wiebrevity_test.exs.do\n/,unter den Top-n-Grammen; minifizierter Code ohne Spaces → andere Top-n-Gramme, höherecng_entropy.Hinweis
Die kodebasenweite Stil-Abweichung (CNG eines Files vs. Korpus-CNG) gehört konzeptionell zu den Codebase-Metriken (#43/#50/#51) und kann später als Cross-File-Vergleich draufgesetzt werden. Dieses Issue deckt erstmal das File-Profil ab.