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 zählen und gewichten

Nach dieser Lektion: Ich kann Wörter zählen und die Wörter höher gewichten, die einen Text von anderen unterscheiden.

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) ist ein Gewicht, das sagt, wie wichtig ein Wort für einen Text ist. Es beruht auf zwei Zählungen: wie oft das Wort im Text steht und in wie vielen Texten insgesamt.

Suchmaschinen und Dokumentenarchive nutzen diese Idee seit Jahrzehnten. Sie erlaubt es, aus tausend Mails die zu finden, in denen es wirklich um ein Thema geht.

Am Ende dieser Lektion

Notiz

Ich kann Wörter zählen und die Wörter höher gewichten, die einen Text von anderen unterscheiden.

Schlüsselwörter

BegriffWas er bedeutetBeispiel
Bag of Wordsein Text als Zählung seiner Wörter, ohne Reihenfolge
Termhäufigkeitder Anteil eines Wortes an allen Tokens eines Textes
Dokumenthäufigkeitdie Zahl der Texte, in denen ein Wort vorkommt
Gewichteine Zahl, die sagt, wie wichtig ein Wort ist
Dokumentein einzelner Text einer Sammlungeine Mail

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

Ein Text ist eine Zählung seiner Wörter

Zählen Sie, wie oft jedes Wort in einem Text steht, und vergessen Sie die Reihenfolge. Das Ergebnis heißt Bag of Words, auf Deutsch Wortsack.

Es ist ein Dictionary: Jedes Wort ist ein Schlüssel, die Zahl seiner Vorkommen der Wert. Zwei Texte mit gleichen Zählungen sind für ein Programm gleich, auch wenn die Wörter anders stehen.

Die Wörter eines Textes zählen

Code: python
text = "die mensa ist günstig und die mensa ist voll"
zaehlungen = {}
for wort in text.split():
    if wort in zaehlungen:
        zaehlungen[wort] = zaehlungen[wort] + 1
    else:
        zaehlungen[wort] = 1
print(zaehlungen)
# Welches Wort kommt am häufigsten vor? Ändern Sie den Text.

Vorkommen eines Wortes zählen

Befehl
docker exec jupyter python3 -c "t='die mensa ist guenstig und die mensa ist voll'.split(); print(t.count('die'), t.count('mensa'), 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.

Die Termhäufigkeit ist der Anteil eines Wortes

Der Text oben hat 9 Tokens, und „die“ und „mensa“ stehen je 2-mal darin. Das heißt: „die“ macht 2 von 9 Tokens aus. Das sind etwa 0,22.

Dieser Anteil heißt Termhäufigkeit. Er macht lange und kurze Texte vergleichbar, denn ein langer Text zählt jedes Wort öfter.

Den Anteil eines Wortes berechnen

Code: python
tokens = "die mensa ist günstig und die mensa ist voll".split()
for wort in ["die", "mensa", "günstig"]:
    anzahl = tokens.count(wort)
    print(wort, anzahl, "von", len(tokens), "=", round(anzahl / len(tokens), 2))
# Fügen Sie "voll" zur Liste hinzu. Wie groß ist sein Anteil?

Ein häufiger Fehler

Warnung

Viele denken, das häufigste Wort sei das wichtigste. Meist ist es ein Stoppwort wie „die“ oder „und“. Es steht in fast jedem Text und unterscheidet keinen vom anderen. Wichtig sind die Wörter, die für diesen Text typisch sind.

Seltene Wörter sagen mehr als häufige

Zählen Sie, in wie vielen Dokumenten ein Wort steht: die Dokumenthäufigkeit. Steht „die“ in allen drei Texten, trennt es nichts. Steht „günstig“ in nur einem, verrät es viel.

Teilen Sie die Zahl aller Dokumente durch die Dokumenthäufigkeit. Seltene Wörter bekommen so einen hohen Faktor.

In wie vielen Dokumenten steht ein Wort?

Code: python
dokumente = [
    "die mensa ist günstig und die mensa ist voll".split(),
    "die bibliothek ist ruhig und die bibliothek ist offen".split(),
    "die mensa und die bibliothek sind neu".split(),
]
for wort in ["die", "mensa", "günstig"]:
    anzahl = 0
    for dokument in dokumente:
        if wort in dokument:
            anzahl = anzahl + 1
    print(wort, "steht in", anzahl, "von", len(dokumente), "Dokumenten")
# Probieren Sie "bibliothek" und "neu".

Das Gewicht ist Termhäufigkeit mal Seltenheit

Multiplizieren Sie beide Zahlen: Termhäufigkeit mal (Zahl der Dokumente geteilt durch Dokumenthäufigkeit). Das ist das Gewicht eines Wortes in einem Dokument.

Echte Systeme nehmen von der Seltenheit noch den Logarithmus, damit ein sehr seltenes Wort nicht alles überstimmt. Hier lassen wir ihn weg, damit Sie von Hand rechnen können.

Beispiel: Gewichte im ersten Dokument

WortAnteilIn DokumentenSeltenheitGewicht
die2 / 9 = 0,223 von 33 / 3 = 10,22
mensa2 / 9 = 0,222 von 33 / 2 = 1,50,33
günstig1 / 9 = 0,111 von 33 / 1 = 30,33
und1 / 9 = 0,113 von 33 / 3 = 10,11

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

Ein Gewicht nachrechnen

Befehl
docker exec jupyter python3 -c "print(round(1 / 9 * 3 / 1, 2), round(2 / 9 * 3 / 2, 2), round(2 / 9 * 3 / 3, 2))"

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.