Natural Language Toolkit - Tokenisieren von Text
Was ist Tokenisierung?
Es kann als der Prozess des Aufteilens eines Textstücks in kleinere Teile wie Sätze und Wörter definiert werden. Diese kleineren Teile werden Token genannt. Beispielsweise ist ein Wort ein Token in einem Satz und ein Satz ein Token in einem Absatz.
Da wir wissen, dass NLP zum Erstellen von Anwendungen wie Stimmungsanalyse, QS-Systemen, Sprachübersetzung, intelligenten Chatbots, Sprachsystemen usw. verwendet wird, ist es für deren Erstellung von entscheidender Bedeutung, das Muster im Text zu verstehen. Die oben erwähnten Token sind sehr nützlich, um diese Muster zu finden und zu verstehen. Wir können die Tokenisierung als Basisschritt für andere Rezepte wie Stemming und Lemmatisierung betrachten.
NLTK-Paket
nltk.tokenize ist das Paket, das vom NLTK-Modul bereitgestellt wird, um den Tokenisierungsprozess zu erreichen.
Sätze in Wörter umwandeln
Das Aufteilen des Satzes in Wörter oder das Erstellen einer Liste von Wörtern aus einer Zeichenfolge ist ein wesentlicher Bestandteil jeder Textverarbeitungsaktivität. Lassen Sie es uns mit Hilfe verschiedener Funktionen / Module von verstehennltk.tokenize Paket.
word_tokenize-Modul
word_tokenizeModul wird für die grundlegende Wort-Tokenisierung verwendet. Das folgende Beispiel verwendet dieses Modul, um einen Satz in Wörter aufzuteilen.
Beispiel
import nltk
from nltk.tokenize import word_tokenize
word_tokenize('Tutorialspoint.com provides high quality technical tutorials for free.')
Ausgabe
['Tutorialspoint.com', 'provides', 'high', 'quality', 'technical', 'tutorials', 'for', 'free', '.']
TreebankWordTokenizer-Klasse
word_tokenize Das oben verwendete Modul ist im Grunde eine Wrapper-Funktion, die die Funktion tokenize () als Instanz des aufruft TreebankWordTokenizerKlasse. Es gibt die gleiche Ausgabe wie bei Verwendung des Moduls word_tokenize () zum Aufteilen der Sätze in Wörter. Lassen Sie uns das gleiche Beispiel sehen, das oben implementiert wurde -
Beispiel
Zuerst müssen wir das Toolkit für natürliche Sprache (nltk) importieren.
import nltk
Importieren Sie nun die TreebankWordTokenizer Klasse zum Implementieren des Wort-Tokenizer-Algorithmus -
from nltk.tokenize import TreebankWordTokenizer
Erstellen Sie als Nächstes eine Instanz der TreebankWordTokenizer-Klasse wie folgt:
Tokenizer_wrd = TreebankWordTokenizer()
Geben Sie nun den Satz ein, den Sie in Token konvertieren möchten -
Tokenizer_wrd.tokenize(
'Tutorialspoint.com provides high quality technical tutorials for free.'
)
Ausgabe
[
'Tutorialspoint.com', 'provides', 'high', 'quality',
'technical', 'tutorials', 'for', 'free', '.'
]
Vollständiges Implementierungsbeispiel
Sehen wir uns das vollständige Implementierungsbeispiel unten an
import nltk
from nltk.tokenize import TreebankWordTokenizer
tokenizer_wrd = TreebankWordTokenizer()
tokenizer_wrd.tokenize('Tutorialspoint.com provides high quality technical
tutorials for free.')
Ausgabe
[
'Tutorialspoint.com', 'provides', 'high', 'quality',
'technical', 'tutorials','for', 'free', '.'
]
Die wichtigste Konvention eines Tokenizers besteht darin, Kontraktionen zu trennen. Wenn wir zum Beispiel das Modul word_tokenize () für diesen Zweck verwenden, wird die Ausgabe wie folgt ausgegeben:
Beispiel
import nltk
from nltk.tokenize import word_tokenize
word_tokenize('won’t')
Ausgabe
['wo', "n't"]]
Eine solche Konvention von TreebankWordTokenizerist inakzeptabel. Deshalb haben wir nämlich zwei alternative Wort-TokenizerPunktWordTokenizer und WordPunctTokenizer.
WordPunktTokenizer-Klasse
Ein alternativer Wort-Tokenizer, der alle Satzzeichen in separate Token aufteilt. Lassen Sie es uns anhand des folgenden einfachen Beispiels verstehen:
Beispiel
from nltk.tokenize import WordPunctTokenizer
tokenizer = WordPunctTokenizer()
tokenizer.tokenize(" I can't allow you to go home early")
Ausgabe
['I', 'can', "'", 't', 'allow', 'you', 'to', 'go', 'home', 'early']
Text in Sätze umwandeln
In diesem Abschnitt werden wir Text / Absatz in Sätze aufteilen. NLTK bietetsent_tokenize Modul für diesen Zweck.
Warum wird es benötigt?
Eine offensichtliche Frage, die uns in den Sinn kam, ist, wenn wir einen Wort-Tokenizer haben, warum brauchen wir dann einen Satz-Tokenizer oder warum müssen wir Text in Sätze umwandeln. Angenommen, wir müssen durchschnittliche Wörter in Sätzen zählen. Wie können wir das tun? Um diese Aufgabe zu erfüllen, benötigen wir sowohl Satz- als auch Wort-Tokenisierung.
Lassen Sie uns den Unterschied zwischen Satz- und Wort-Tokenizer anhand des folgenden einfachen Beispiels verstehen:
Beispiel
import nltk
from nltk.tokenize import sent_tokenize
text = "Let us understand the difference between sentence & word tokenizer.
It is going to be a simple example."
sent_tokenize(text)
Ausgabe
[
"Let us understand the difference between sentence & word tokenizer.",
'It is going to be a simple example.'
]
Satz-Tokenisierung mit regulären Ausdrücken
Wenn Sie der Meinung sind, dass die Ausgabe von Word Tokenizer nicht akzeptabel ist und Sie die vollständige Kontrolle darüber haben möchten, wie der Text tokenisiert wird, haben wir reguläre Ausdrücke, die während der Satz-Tokenisierung verwendet werden können. NLTK bietenRegexpTokenizer Klasse, um dies zu erreichen.
Lassen Sie uns das Konzept anhand von zwei Beispielen verstehen.
Im ersten Beispiel verwenden wir reguläre Ausdrücke zum Abgleichen von alphanumerischen Token plus einfachen Anführungszeichen, damit wir Kontraktionen nicht wie teilen “won’t”.
Beispiel 1
import nltk
from nltk.tokenize import RegexpTokenizer
tokenizer = RegexpTokenizer("[\w']+")
tokenizer.tokenize("won't is a contraction.")
tokenizer.tokenize("can't is a contraction.")
Ausgabe
["won't", 'is', 'a', 'contraction']
["can't", 'is', 'a', 'contraction']
Im ersten Beispiel verwenden wir reguläre Ausdrücke, um auf Leerzeichen zu tokenisieren.
Beispiel 2
import nltk
from nltk.tokenize import RegexpTokenizer
tokenizer = RegexpTokenizer('/s+' , gaps = True)
tokenizer.tokenize("won't is a contraction.")
Ausgabe
["won't", 'is', 'a', 'contraction']
Aus der obigen Ausgabe können wir erkennen, dass die Interpunktion in den Token verbleibt. Der Parameter Lücken = Wahr bedeutet, dass das Muster die Lücken identifiziert, für die ein Token erstellt werden soll. Wenn wir dagegen den Parameter gap = False verwenden, wird das Muster verwendet, um die Token zu identifizieren, die im folgenden Beispiel zu sehen sind:
import nltk
from nltk.tokenize import RegexpTokenizer
tokenizer = RegexpTokenizer('/s+' , gaps = False)
tokenizer.tokenize("won't is a contraction.")
Ausgabe
[ ]
Es wird uns die leere Ausgabe geben.