Kursinhalt
Einführung in NLP
Einführung in NLP
Lemmatization Mit POS-Tagging
Die englische Sprache ist voller Wörter, die als mehrere Wortarten mit unterschiedlichen Bedeutungen dienen können. Zum Beispiel kann "running" ein Verb ("He is running.") oder ein Substantiv ("Running is fun.") sein.
Wie wir bereits gesehen haben, kann ein Lemmatizer ein Wort nur dann genau auf seine Grundform reduzieren, wenn er die Wortart im gegebenen Kontext kennt. POS-Tagging liefert wiederum diesen Kontext und macht die Lemmatisierung präziser.
Lemmatisierung mit POS-Tagging in NLTK
Da wir bereits mit beiden Techniken separat vertraut sind, ist es an der Zeit, sie zu kombinieren. Es gibt jedoch einen wichtigen Aspekt zu berücksichtigen, nämlich den Unterschied im Format der POS-Tags zwischen pos_tag
und dem Format, das der WordNet Lemmatizer erwartet.
Der Zuordnungsprozess beinhaltet die Umwandlung der detaillierten Penn Treebank-Tags in die breiteren Kategorien, die von WordNet erkannt werden. Zum Beispiel würden sowohl 'VBD'
(Vergangenheit Verb) als auch 'VBG'
(Gerundium oder Partizip Präsens) aus dem Penn Treebank zu 'v'
(Verb) für die Verwendung mit dem WordNet-Lemmatizer zugeordnet werden.
Lassen Sie uns eine Funktion für diesen Zweck schreiben:
Diese Funktion überprüft einfach den ersten Buchstaben des Penn Treebank-Tags: Wenn es 'J'
ist, gibt es das WordNet-Tag für Adjektive zurück; wenn 'V'
, für Verben; wenn 'R'
, für Adverbien.
In allen anderen Fällen, einschließlich wenn das Tag mit 'N'
beginnt oder keine der angegebenen Bedingungen erfüllt, wird standardmäßig das WordNet-Tag für Nomen zurückgegeben. Diese ADJ
, VERB
usw. sind nur Konstanten, wobei ADJ, ADJ_SAT, ADV, NOUN, VERB = "a", "s", "r", "n", "v"
.
Angesichts dieser Funktion führen wir nun die Lemmatisierung mit vorherigem POS-Tagging durch:
from nltk.stem import WordNetLemmatizer from nltk.tokenize import word_tokenize from nltk import pos_tag from nltk.corpus import wordnet as wn import nltk nltk.download('wordnet') nltk.download('averaged_perceptron_tagger_eng') nltk.download('punkt_tab') # Initialize the lemmatizer lemmatizer = WordNetLemmatizer() # Function to map NLTK's POS tags to the format used by the WordNet lemmatizer def get_wordnet_pos(treebank_tag): if treebank_tag.startswith('J'): return wn.ADJ elif treebank_tag.startswith('V'): return wn.VERB elif treebank_tag.startswith('R'): return wn.ADV else: # Default to noun if no match is found or starts with 'N' return wn.NOUN text = "The leaves on the tree were turning a bright red, indicating that fall was leaving its mark." text = text.lower() tokens = word_tokenize(text) tagged_tokens = pos_tag(tokens) # Lemmatize each token with its POS tag lemmatized_tokens = [lemmatizer.lemmatize(token, get_wordnet_pos(tag)) for token, tag in tagged_tokens] print("Original text:", text) print("Lemmatized text:", ' '.join(lemmatized_tokens))
Wie Sie sehen können, haben wir zuerst das POS-Tagging mit der Funktion pos_tag()
durchgeführt. Anschließend haben wir List Comprehension verwendet, um eine Liste von lemmatisierten Tokens zu erstellen, indem wir die Methode lemmatize()
mit dem aktuellen Token und dem korrekt formatierten Tag (unter Verwendung unserer Funktion get_wordnet_pos(tag)
) als Argumente angewendet haben. Wir haben absichtlich keine Stoppwörter entfernt, um zu demonstrieren, dass der Code alle Tokens effektiv verarbeitet.
Swipe to start coding
Es ist an der Zeit, alle bisher gelernten Textvorverarbeitungstechniken zu kombinieren, um lemmatisierten Text ohne die Stoppwörter aus dem ursprünglichen Rohtext zu erhalten. Ihre Aufgabe ist die folgende:
-
Konvertieren Sie
text
in Kleinbuchstaben. -
Laden Sie die Liste der englischen Stoppwörter und konvertieren Sie sie in
set
. -
Initialisieren Sie einen Lemmatisierer.
-
Tokenisieren Sie den
text
-String. -
Filtern Sie die Stoppwörter mit List Comprehension heraus.
-
Führen Sie das POS-Tagging mit der entsprechenden Funktion durch.
-
Lemmatisieren Sie die resultierenden Tokens unter Berücksichtigung ihrer POS-Tags mit List Comprehension.
Lösung
Danke für Ihr Feedback!
Lemmatization Mit POS-Tagging
Die englische Sprache ist voller Wörter, die als mehrere Wortarten mit unterschiedlichen Bedeutungen dienen können. Zum Beispiel kann "running" ein Verb ("He is running.") oder ein Substantiv ("Running is fun.") sein.
Wie wir bereits gesehen haben, kann ein Lemmatizer ein Wort nur dann genau auf seine Grundform reduzieren, wenn er die Wortart im gegebenen Kontext kennt. POS-Tagging liefert wiederum diesen Kontext und macht die Lemmatisierung präziser.
Lemmatisierung mit POS-Tagging in NLTK
Da wir bereits mit beiden Techniken separat vertraut sind, ist es an der Zeit, sie zu kombinieren. Es gibt jedoch einen wichtigen Aspekt zu berücksichtigen, nämlich den Unterschied im Format der POS-Tags zwischen pos_tag
und dem Format, das der WordNet Lemmatizer erwartet.
Der Zuordnungsprozess beinhaltet die Umwandlung der detaillierten Penn Treebank-Tags in die breiteren Kategorien, die von WordNet erkannt werden. Zum Beispiel würden sowohl 'VBD'
(Vergangenheit Verb) als auch 'VBG'
(Gerundium oder Partizip Präsens) aus dem Penn Treebank zu 'v'
(Verb) für die Verwendung mit dem WordNet-Lemmatizer zugeordnet werden.
Lassen Sie uns eine Funktion für diesen Zweck schreiben:
Diese Funktion überprüft einfach den ersten Buchstaben des Penn Treebank-Tags: Wenn es 'J'
ist, gibt es das WordNet-Tag für Adjektive zurück; wenn 'V'
, für Verben; wenn 'R'
, für Adverbien.
In allen anderen Fällen, einschließlich wenn das Tag mit 'N'
beginnt oder keine der angegebenen Bedingungen erfüllt, wird standardmäßig das WordNet-Tag für Nomen zurückgegeben. Diese ADJ
, VERB
usw. sind nur Konstanten, wobei ADJ, ADJ_SAT, ADV, NOUN, VERB = "a", "s", "r", "n", "v"
.
Angesichts dieser Funktion führen wir nun die Lemmatisierung mit vorherigem POS-Tagging durch:
from nltk.stem import WordNetLemmatizer from nltk.tokenize import word_tokenize from nltk import pos_tag from nltk.corpus import wordnet as wn import nltk nltk.download('wordnet') nltk.download('averaged_perceptron_tagger_eng') nltk.download('punkt_tab') # Initialize the lemmatizer lemmatizer = WordNetLemmatizer() # Function to map NLTK's POS tags to the format used by the WordNet lemmatizer def get_wordnet_pos(treebank_tag): if treebank_tag.startswith('J'): return wn.ADJ elif treebank_tag.startswith('V'): return wn.VERB elif treebank_tag.startswith('R'): return wn.ADV else: # Default to noun if no match is found or starts with 'N' return wn.NOUN text = "The leaves on the tree were turning a bright red, indicating that fall was leaving its mark." text = text.lower() tokens = word_tokenize(text) tagged_tokens = pos_tag(tokens) # Lemmatize each token with its POS tag lemmatized_tokens = [lemmatizer.lemmatize(token, get_wordnet_pos(tag)) for token, tag in tagged_tokens] print("Original text:", text) print("Lemmatized text:", ' '.join(lemmatized_tokens))
Wie Sie sehen können, haben wir zuerst das POS-Tagging mit der Funktion pos_tag()
durchgeführt. Anschließend haben wir List Comprehension verwendet, um eine Liste von lemmatisierten Tokens zu erstellen, indem wir die Methode lemmatize()
mit dem aktuellen Token und dem korrekt formatierten Tag (unter Verwendung unserer Funktion get_wordnet_pos(tag)
) als Argumente angewendet haben. Wir haben absichtlich keine Stoppwörter entfernt, um zu demonstrieren, dass der Code alle Tokens effektiv verarbeitet.
Swipe to start coding
Es ist an der Zeit, alle bisher gelernten Textvorverarbeitungstechniken zu kombinieren, um lemmatisierten Text ohne die Stoppwörter aus dem ursprünglichen Rohtext zu erhalten. Ihre Aufgabe ist die folgende:
-
Konvertieren Sie
text
in Kleinbuchstaben. -
Laden Sie die Liste der englischen Stoppwörter und konvertieren Sie sie in
set
. -
Initialisieren Sie einen Lemmatisierer.
-
Tokenisieren Sie den
text
-String. -
Filtern Sie die Stoppwörter mit List Comprehension heraus.
-
Führen Sie das POS-Tagging mit der entsprechenden Funktion durch.
-
Lemmatisieren Sie die resultierenden Tokens unter Berücksichtigung ihrer POS-Tags mit List Comprehension.
Lösung
Danke für Ihr Feedback!