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

Texte aufbereiten: Tokens, Stoppwörter, Wortstamm

Nach dieser Lektion: Ich kann rohen Text in gute Tokens verwandeln.

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

Was heißt Texte aufbereiten?

Textaufbereitung (englisch text preprocessing) macht aus rohem Text saubere Tokens, mit denen ein Index und ein Ranking arbeiten können. Dazu gehören Kleinschreibung, das Entfernen von Satzzeichen und Stoppwörtern und das Zurückführen von Wörtern auf ihren Stamm.

Wer „Tische“ sucht, will auch „Tisch“ finden. Ohne Aufbereitung sind das zwei verschiedene Wörter, und die Suche übersieht Treffer.

Am Ende dieser Lektion

Notiz

Ich kann rohen Text in gute Tokens verwandeln.

Schlüsselwörter

BegriffWas er bedeutetBeispiel
Tokenein Stück Text, mit dem der Index arbeitetmensa
NormalisierungText in eine einheitliche Form bringen, etwa alles klein schreiben
Stoppwortein sehr häufiges Wort, das beim Suchen wenig hilftdie, und, der
Wortstammder Kern eines Wortes ohne Endungtisch
Stemmingdas Zurückführen von Wörtern auf den Stamm mit einfachen Regeln
Kompositumein zusammengesetztes WortMensaessen

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

Satzzeichen und Großbuchstaben stören die Suche

Teilt man „Uhr!“ am Leerzeichen, bleibt das Ausrufezeichen am Wort hängen. Für ein Programm ist „Uhr!“ ein anderes Wort als „Uhr“. Ebenso unterscheidet es „Mensa“ von „mensa“.

Darum schreibt man alles klein und ersetzt Satzzeichen durch ein Leerzeichen. Bindestriche gehören dazu: Aus „Kaffee-Automat“ werden zwei Tokens.

Einen Text in saubere Tokens zerlegen

Code: python
text = "Die Mensa (neu) oeffnet um 11 Uhr! Kaffee-Automat: 24 Stunden."
text = text.lower()
for zeichen in ".,;:!?()-":
    text = text.replace(zeichen, " ")
tokens = text.split()
print(tokens)
print(len(tokens), "Tokens")
# Ersetzen Sie das Leerzeichen im Aufruf durch "". Was passiert mit "Kaffee-Automat"?

Der rohe Text im Terminal

Befehl
docker exec jupyter python3 -c "print('Die Mensa (neu) oeffnet um 11 Uhr!'.lower().split())"

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

Zusammengesetzte Wörter bleiben ein einziges Token

Der Befehl zeigt: Die Klammern und das Ausrufezeichen kleben noch an den Wörtern. Eine einfache Zerlegung kennt also nur Leerzeichen und die Zeichen, die Sie ihr nennen.

Deutsch hat eine zweite Schwierigkeit: Es setzt Wörter zusammen. „Donaudampfschifffahrt“ bleibt ein einziges Token, und wer „Dampf“ sucht, findet es nicht. Dasselbe gilt für „Mensaessen“ und „essen“.

Ein zusammengesetztes Wort im Terminal

Befehl
docker exec jupyter python3 -c "print('Donaudampfschifffahrt'.lower().split(), 'dampf' in 'Donaudampfschifffahrt'.lower().split())"

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

Stoppwörter tragen wenig Inhalt

Wörter wie „die“, „und“ oder „der“ stehen in fast jedem Text. Ihr idf ist nahe null, sie helfen also kaum beim Ranking. Man führt eine Liste solcher Stoppwörter und streicht sie vor dem Indexieren.

Das spart Platz im Index. Es ist aber eine Entscheidung: „Sein oder Nichtsein“ besteht fast nur aus Stoppwörtern.

Ein Wortstamm führt Formen eines Wortes zusammen

Im Deutschen ändert ein Wort seine Endung: Tisch, Tische, Tischen. Beim Stemming schneidet eine einfache Regel bekannte Endungen ab. Alle drei Formen werden zum Stamm „tisch“.

Die Regel ist grob. Sie vermischt manchmal Wörter und trennt manchmal Formen, die zusammengehören. Das zeigt die nächste Tabelle.

Beispiel: eine einfache Endungsregel in Aktion

WortStammUrteil
nudelnnudelgut, die Mehrzahl wird zurückgeführt
tische, tischentischgut, beide Formen treffen sich
mensa, mensenmensa, mensschlecht, die Formen treffen sich nicht
buecher, buchbuech, buchschlecht, der Umlaut verhindert das Treffen

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

Endungen mit einer Regel abschneiden

Code: python
endungen = ["ern", "en", "er", "e", "n", "s"]

def kuerzen(wort):
    for ende in endungen:
        if wort.endswith(ende) and len(wort) - len(ende) >= 3:
            return wort[:len(wort) - len(ende)]
    return wort

for wort in ["nudeln", "tische", "tischen", "mensa", "mensen", "buecher", "buch"]:
    print(wort, "->", kuerzen(wort))
# Welche Wörter führt diese Regel richtig zusammen, welche nicht?

Stoppwörter im Terminal streichen

Befehl
docker exec jupyter python3 -c "print([w for w in 'die mensa und die bibliothek'.split() if w not in ['die', 'und']])"

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

Ein häufiger Fehler

Warnung

Viele denken, ein Stamm sei immer ein richtiges Wort. Das stimmt nicht. „Mensen“ wird zu „mens“. Das muss kein Wort sein, es muss nur für alle Formen gleich ausfallen.

Ü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.