Text Tokenisierung mit Python

PythonPythonBeginner
Jetzt üben

💡 Dieser Artikel wurde von AI-Assistenten übersetzt. Um die englische Version anzuzeigen, können Sie hier klicken

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

Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL python(("Python")) -.-> python/ModulesandPackagesGroup(["Modules and Packages"]) python(("Python")) -.-> python/ObjectOrientedProgrammingGroup(["Object-Oriented Programming"]) python(("Python")) -.-> python/AdvancedTopicsGroup(["Advanced Topics"]) python(("Python")) -.-> python/PythonStandardLibraryGroup(["Python Standard Library"]) python(("Python")) -.-> python/DataStructuresGroup(["Data Structures"]) python(("Python")) -.-> python/FunctionsGroup(["Functions"]) python/DataStructuresGroup -.-> python/lists("Lists") python/FunctionsGroup -.-> python/function_definition("Function Definition") python/ModulesandPackagesGroup -.-> python/importing_modules("Importing Modules") python/ObjectOrientedProgrammingGroup -.-> python/classes_objects("Classes and Objects") python/AdvancedTopicsGroup -.-> python/generators("Generators") python/AdvancedTopicsGroup -.-> python/regular_expressions("Regular Expressions") python/PythonStandardLibraryGroup -.-> python/data_collections("Data Collections") subgraph Lab Skills python/lists -.-> lab-302774{{"Text Tokenisierung mit Python"}} python/function_definition -.-> lab-302774{{"Text Tokenisierung mit Python"}} python/importing_modules -.-> lab-302774{{"Text Tokenisierung mit Python"}} python/classes_objects -.-> lab-302774{{"Text Tokenisierung mit Python"}} python/generators -.-> lab-302774{{"Text Tokenisierung mit Python"}} python/regular_expressions -.-> lab-302774{{"Text Tokenisierung mit Python"}} python/data_collections -.-> lab-302774{{"Text Tokenisierung mit Python"}} end

Definition der Token-Klasse

In diesem Schritt lernst du, wie du die Token-Klasse definierst, die die Tokens im Texttokenisierungsprozess repräsentieren wird.

  1. Öffne die Datei /home/labex/project/texttokenizer.py in einem Texteditor.

  2. Am Anfang der Datei importiere die namedtuple-Funktion aus dem collections-Modul:

    from collections import namedtuple
  3. Definiere die Token-Klasse als benanntes Tupel mit zwei Attributen: type und value.

    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.

  1. In der texttokenizer.py-Datei definiere die generate_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)
  2. Die generate_tokens-Funktion definiert zunächst ein Dictionary token_specification, das die Tokentypen auf ihre zugehörigen regulären Ausdrücke abbildet.

  3. Anschließend kombiniert es alle regulären Ausdrücke zu einem einzigen großen regulären Ausdruck mit dem |-Operator.

  4. Die Funktion verwendet dann die re.finditer-Funktion, um alle Treffer im Eingabetext zu finden und für jeden Treffer ein Token-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.

  1. 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)
  2. Speichere die texttokenizer.py-Datei.

  3. Führe das texttokenizer.py-Skript aus dem Verzeichnis /home/labex/project aus:

    python texttokenizer.py
  4. Die 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.

✨ Lösung prüfen und üben

Zusammenfassung

Herzlichen Glückwunsch! Du hast dieses Projekt abgeschlossen. Du kannst in LabEx weitere Übungen absolvieren, um deine Fähigkeiten zu verbessern.