Einführung
In diesem Projekt lernst du, wie du ein Texttokenisierungssystem mit Python implementierst. Die Texttokenisierung ist eine grundlegende Aufgabe in der natürlichen Sprachverarbeitung, bei der ein gegebener Text in kleinere Einheiten aufgeteilt wird, die als Tokens bezeichnet werden. Diese Tokens können Wörter, Zahlen, Satzzeichen oder andere bedeutende Elemente im Text repräsentieren. Die Fähigkeit, Texte zu tokenisieren, ist für viele Anwendungen von entscheidender Bedeutung, wie z. B. die lexikalische Analyse in Compilern, die Stimmungsanalyse und die Textsklassifikation.
👀 Vorschau
## text = 'total = 1 + 2 * 3'
tokens = [Token(type='NAME', value='total'), Token(type='WS', value=' '), Token(type='EQ', value='='), Token(type='WS', value=' '), Token(type='NUM', value='1'), Token(type='WS', value=' '), Token(type='ADD', value='+'), Token(type='WS', value=' '), Token(type='NUM', value='2'), Token(type='WS', value=' '), Token(type='MUL', value='*'), Token(type='WS', value=' '), Token(type='NUM', value='3')]
🎯 Aufgaben
In diesem Projekt wirst du lernen:
- Wie du eine
Token-Klasse definierst, um die Tokens im Text zu repräsentieren - Wie du eine
generate_tokens-Funktion implementierst, die einen Eingabetext annimmt und einen Tokenstrom generiert - Wie du den Tokenisierungsprozess mit einem Beispieltext testest
🏆 Errungenschaften
Nach Abschluss dieses Projekts wirst du in der Lage sein:
- Den Begriff der Texttokenisierung und ihre Wichtigkeit in der natürlichen Sprachverarbeitung zu verstehen
- Ein grundlegendes Texttokenisierungssystem mit Python zu implementieren
- Den Tokenisierungsprozess durch die Definition unterschiedlicher Tokentypen und ihrer zugehörigen regulären Ausdrücke anzupassen
- Das Tokenisierungssystem mit verschiedenen Eingabetexten zu testen und zu debuggen
Definition der Token-Klasse
In diesem Schritt lernst du, wie du die Token-Klasse definierst, die die Tokens im Texttokenisierungsprozess repräsentieren wird.
Öffne die Datei
/home/labex/project/texttokenizer.pyin einem Texteditor.Am Anfang der Datei importiere die
namedtuple-Funktion aus demcollections-Modul:from collections import namedtupleDefiniere die
Token-Klasse als benanntes Tupel mit zwei Attributen:typeundvalue.Token = namedtuple("Token", ["type", "value"])
Implementierung der generate_tokens-Funktion
In diesem Schritt wirst du die generate_tokens-Funktion implementieren, die den Eingabetext nimmt und einen Tokenstrom generiert.
In der
texttokenizer.py-Datei definiere diegenerate_tokens-Funktion:def generate_tokens(text): ## Define token types and corresponding regular expressions token_specification = { "NAME": r"[a-zA-Z_][a-zA-Z_0-9]*", "NUM": r"\d+", "ADD": r"\+", "SUB": r"-", "MUL": r"\*", "DIV": r"/", "EQ": r"=", "WS": r"\s+", } ## Combine regular expressions into one large regular expression regex = "|".join("(?P<%s>%s)" % pair for pair in token_specification.items()) scanner = re.finditer(regex, text) for m in scanner: type = m.lastgroup value = m.group() yield Token(type, value)Die
generate_tokens-Funktion definiert zunächst ein Dictionarytoken_specification, das die Tokentypen auf ihre zugehörigen regulären Ausdrücke abbildet.Anschließend kombiniert es alle regulären Ausdrücke zu einem einzigen großen regulären Ausdruck mit dem
|-Operator.Die Funktion verwendet dann die
re.finditer-Funktion, um alle Treffer im Eingabetext zu finden und für jeden Treffer einToken-Objekt mit dem Tokentyp und dem Wert zu erzeugen.
Testen der Tokenisierung
In diesem Schritt wirst du die generate_tokens-Funktion testen, indem du einen Beispieltext analysierst.
Am Ende der
texttokenizer.py-Datei füge folgenden Code hinzu:if __name__ == "__main__": text = "total = 1 + 2 * 3" tokens = list(generate_tokens(text)) print(tokens)Speichere die
texttokenizer.py-Datei.Führe das
texttokenizer.py-Skript aus dem Verzeichnis/home/labex/projectaus:python texttokenizer.pyDie Ausgabe sollte eine Liste von
Token-Objekten sein, die die Tokens im Eingabetext repräsentieren:[Token(type='NAME', value='total'), Token(type='WS', value=' '), Token(type='EQ', value='='), Token(type='WS', value=' '), Token(type='NUM', value='1'), Token(type='WS', value=' '), Token(type='ADD', value='+'), Token(type='WS', value=' '), Token(type='NUM', value='2'), Token(type='WS', value=' '), Token(type='MUL', value='*'), Token(type='WS', value=' '), Token(type='NUM', value='3')]
Herzlichen Glückwunsch! Du hast die generate_tokens-Funktion erfolgreich implementiert und mit einem Beispieltext getestet. Im nächsten Schritt wirst du lernen, wie du die generate_tokens-Funktion verwenden kannst, um einen größeren Text zu tokenisieren.
Zusammenfassung
Herzlichen Glückwunsch! Du hast dieses Projekt abgeschlossen. Du kannst in LabEx weitere Übungen absolvieren, um deine Fähigkeiten zu verbessern.



