Lässt es sich mit cremefarbenem Papier, einer Tönung, mehr Kontrast oder größerer Schrift besser lesen? Wählen Sie Ihre Farben und Ihre Schrift, einmalig für alle Seiten.

Kostenlose Lektion

TF-IDF: Wörter nach ihrer Besonderheit gewichten

Nach dieser Lektion: Ich kann Dokumente danach ordnen, wie besonders ein Wort in ihnen ist.

Lektion, 55 Min.2 BefehleJupyterLab-Lab für Data Science: pandas, Matplotlib und scikit-learn im Browser

Was ist TF-IDF?

TF-IDF (englisch term frequency, inverse document frequency) gibt jedem Wort in einem Dokument ein Gewicht. Das Gewicht sagt, wie typisch das Wort für genau dieses Dokument ist. Damit ordnet eine Suche ihre Treffer, sodass die besten oben stehen.

Die Anfrage „Mensa Nudeln“ findet viele Aushänge. Welcher soll zuerst kommen? Der mit dem seltenen, aussagekräftigen Wort.

Am Ende dieser Lektion

Notiz

Ich kann Dokumente danach ordnen, wie besonders ein Wort in ihnen ist.

Schlüsselwörter

BegriffWas er bedeutetBeispiel
Termhäufigkeit (tf)wie oft ein Wort in einem Dokument steht, geteilt durch die Zahl seiner Wörter2 von 4 Wörtern: 0,5
Dokumenthäufigkeit (df)in wie vielen Dokumenten ein Wort steht
inverse Dokumenthäufigkeit (idf)ein Maß dafür, wie selten ein Wort in der ganzen Sammlung ist
Gewichttf mal idf: wie wichtig ein Wort für ein Dokument ist
Rankingdie Reihenfolge der Treffer, der beste zuerst

Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.

Häufige Wörter sind wichtig für den Text

Wer in einem Aushang dreimal „Nudeln“ liest, weiß: Es geht um Nudeln. Die Termhäufigkeit (tf) zählt das Wort und teilt durch die Länge des Textes. So sind lange und kurze Texte vergleichbar.

Der Text „nudeln nudeln mit sauce“ hat vier Wörter, und „nudeln“ steht zweimal. Die Termhäufigkeit ist 2 geteilt durch 4, also 0,5.

Ein Wort, das überall vorkommt, sagt nichts

Das Wort „die“ steht in fast jedem deutschen Text. Es hilft nicht, ein Dokument zu finden. Ein seltenes Wort wie „Mensaplan“ hilft viel mehr.

Die Dokumenthäufigkeit (df) zählt die Dokumente mit dem Wort. Die inverse Dokumenthäufigkeit ist der Zehnerlogarithmus von N durch df. Dabei ist N die Zahl aller Dokumente. Der Zehnerlogarithmus zählt Nullen: Für 100 ist er 2.

Beispiel: idf bei hundert Dokumenten

Das Wort steht inN durch dfidfBedeutung
100 Dokumenten100 durch 100 = 10sagt nichts, es steht überall
50 Dokumenten100 durch 50 = 20,30hilft ein wenig
10 Dokumenten100 durch 10 = 101hilft deutlich
1 Dokument100 durch 1 = 1002hilft am meisten

Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.

Das Gewicht eines Wortes ausrechnen

Code: python
import math

dokumente = [
    "die mensa bietet nudeln mit sauce".split(),
    "die mensa bietet salat mit kaese".split(),
    "die bibliothek oeffnet um acht uhr".split(),
    "die mensa oeffnet um elf uhr".split(),
]
wort = "nudeln"
tokens = dokumente[0]
tf = tokens.count(wort) / len(tokens)
df = 0
for text in dokumente:
    if wort in text:
        df = df + 1
idf = math.log10(len(dokumente) / df)
print("tf:", round(tf, 3))
print("df:", df)
print("idf:", round(idf, 3))
print("Gewicht:", round(tf * idf, 3))
# Setzen Sie wort auf "die". Warum ist das Gewicht null?

Drei idf-Werte im Terminal

Befehl
docker exec jupyter python3 -c "import math; print(round(math.log10(4/1), 3), round(math.log10(4/3), 3), math.log10(4/4))"

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Die Anfrage bekommt pro Dokument eine Summe

Das Gewicht eines Wortes ist tf mal idf. Eine Anfrage hat meist mehrere Wörter. Für jedes Dokument addiert man die Gewichte aller Anfragewörter. Wer die größte Summe hat, steht oben im Ranking.

Der Befehl oben zeigt die idf-Werte der vier Aushänge: „nudeln“ steht in einem von vier Texten und wiegt 0,602. „mensa“ steht in dreien und wiegt nur 0,125.

Beispiel: Ranking für „mensa nudeln“

DokumentInhaltSumme der Gewichte
1die mensa bietet nudeln mit sauce0,121
2die mensa bietet salat mit kaese0,021
3die bibliothek oeffnet um acht uhr0
4die mensa oeffnet um elf uhr0,021

Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.

Ein Ranking für eine Anfrage berechnen

Code: python
import math

dokumente = [
    "die mensa bietet nudeln mit sauce".split(),
    "die mensa bietet salat mit kaese".split(),
    "die bibliothek oeffnet um acht uhr".split(),
    "die mensa oeffnet um elf uhr".split(),
]
anfrage = ["mensa", "nudeln"]
for nummer in range(len(dokumente)):
    tokens = dokumente[nummer]
    summe = 0
    for wort in anfrage:
        df = 0
        for text in dokumente:
            if wort in text:
                df = df + 1
        if df > 0:
            summe = summe + tokens.count(wort) / len(tokens) * math.log10(len(dokumente) / df)
    print("Dokument", nummer + 1, round(summe, 3))
# Ändern Sie die Anfrage zu ["mensa", "uhr"]. Wer liegt nun vorn?

Ein häufiger Fehler

Warnung

Viele denken, das häufigste Wort sei das wichtigste. Meist ist es das unwichtigste, etwa „die“. Wichtig ist, was in diesem Dokument oft und in der Sammlung selten vorkommt.

Die Termhäufigkeit im Terminal

Befehl
docker exec jupyter python3 -c "t='nudeln nudeln mit sauce'.split(); print(t.count('nudeln') / len(t))"

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Über dieses Lab und seinen Quellcode: JupyterLab-Lab für Data Science: pandas, Matplotlib und scikit-learn im Browser

Sie unterrichten eine Gruppe? Weisen Sie dieses Modul Ihren Studierenden zu, mit Handbuch für Lehrende, automatisch geprüften Aufgaben und einem Lab für jede Person.