Kursinhalt
Einführung in NLP
Einführung in NLP
Tokenisierung Mit Regulären Ausdrücken
Warum Reguläre Ausdrücke?
Während die Funktionen word_tokenize()
und sent_tokenize()
aus der NLTK-Bibliothek bequeme Möglichkeiten bieten, Text in Wörter und Sätze zu tokenisieren, passen sie möglicherweise nicht immer zu spezifischen Textverarbeitungsanforderungen. Lassen Sie uns daher einen alternativen Ansatz erkunden: die Tokenisierung mit regulären Ausdrücken (regex).
Im Kontext der Tokenisierung ermöglicht regex die Definition von benutzerdefinierten Mustern, die Tokens identifizieren können, und bietet mehr Kontrolle über den Tokenisierungsprozess als vorgefertigte Funktionen.
Verwendung von regexp_tokenize()
Glücklicherweise enthält die NLTK-Bibliothek die Funktion regexp_tokenize()
im Modul tokenize
, die einen String mithilfe eines regulären Ausdrucks in Teilstrings tokenisiert. Diese Funktion ist besonders nützlich, wenn Sie Text basierend auf Mustern tokenisieren müssen, die von den Standard-Tokenizern nicht gut verarbeitet werden.
Die wichtigsten Parameter von regexp_tokenize()
sind die ersten beiden Parameter: text
(der zu tokenisierende String) und pattern
(regulärer Ausdruck).
Schauen wir uns ein Beispiel an:
from nltk.tokenize import regexp_tokenize text = "Let's try, regex tokenization. Does it work? Yes, it does!" text = text.lower() # Tokenize a sentence tokens = regexp_tokenize(text, r'\w+') print(tokens)
Wie Sie sehen können, ist der Prozess ähnlich wie bei der Verwendung der Funktion word_tokenize()
, jedoch können die Ergebnisse je nach Muster variieren. In unserem Beispiel wird das Muster '\w+'
verwendet, um Sequenzen von alphanumerischen Zeichen (Buchstaben und Zahlen) zu matchen, speziell ein oder mehrere alphanumerische Zeichen.
Dies führt zu einer Liste von Wörtern ohne Satzzeichen, was sich von word_tokenize()
unterscheidet, da letzteres typischerweise Satzzeichen als separate Tokens einschließt. Daher wäre die Ausgabe unseres regexp_tokenize
-Beispiels eine Liste von Wörtern aus dem Satz.
Verwendung von RegexpTokenizer
Ein alternativer Ansatz für die benutzerdefinierte Tokenisierung besteht in der Verwendung der RegexpTokenizer
-Klasse aus dem tokenize
-Modul von NLTK. Um zu beginnen, erstellen Sie eine Instanz von RegexpTokenizer
, indem Sie ihr Ihr gewünschtes reguläres Ausdrucksmuster als Argument übergeben; dieses Muster definiert, wie der Text tokenisiert wird.
Im Gegensatz zur Funktion regexp_tokenize()
geben Sie nicht den zu tokenisierenden Text zum Zeitpunkt der Erstellung der RegexpTokenizer
-Instanz an. Stattdessen verwenden Sie, sobald die Instanz mit dem angegebenen Muster erstellt wurde, ihre tokenize()
-Methode, um die Tokenisierung auf Ihren Text anzuwenden, indem Sie den Text, den Sie tokenisieren möchten, als Argument an diese Methode übergeben.
Hier ist ein Beispiel:
from nltk.tokenize import RegexpTokenizer # Define a tokenizer with a regular expression tokenizer = RegexpTokenizer(r'\w+') text = "Let's try, regex tokenization. Does it work? Yes, it does!" text = text.lower() # Tokenize a sentence tokens = tokenizer.tokenize(text) print(tokens)
Dieser Ansatz liefert die gleichen Ergebnisse und kann besser sein, wenn Sie einen Tokenizer für verschiedene Texte benötigen, da er es Ihnen ermöglicht, den Tokenizer einmal zu erstellen und dann auf verschiedene Texteingaben anzuwenden, ohne das Muster jedes Mal neu zu definieren.
Lassen Sie uns mit einem weiteren Beispiel fortfahren. Angenommen, wir möchten nur Ziffern als unsere Tokens, dann wird unser Muster '\d+'
nach einer oder mehreren Ziffern suchen, wie im folgenden Beispiel:
from nltk.tokenize import RegexpTokenizer tokenizer = RegexpTokenizer(r'\d+') text = "Give my 100$ back right now or 20 each month" text = text.lower() # Tokenize a sentence tokens = tokenizer.tokenize(text) print(tokens)
Insgesamt ermöglicht die Regexp-Tokenisierung eine hochgradig angepasste Tokenisierung, was sie ideal für die Handhabung komplexer Muster und spezifischer Tokenisierungsregeln macht, die nicht leicht durch Standardmethoden wie word_tokenize()
verwaltet werden können. In unserem Beispiel, als wir Zahlen als Tokens verwenden wollten, wäre word_tokenize()
für diese Aufgabe nicht geeignet.
Danke für Ihr Feedback!