Stemming und Lemmatisierung mit Python NLTK

Inhaltsverzeichnis:

Anonim

Was ist Stemming?

Stemming ist eine Art Normalisierung für Wörter. Normalisierung ist eine Technik, bei der eine Reihe von Wörtern in einem Satz in eine Sequenz umgewandelt wird, um die Suche zu verkürzen. Die Wörter, die dieselbe Bedeutung haben, aber je nach Kontext oder Satz variieren, werden normalisiert.

In einem anderen Wort gibt es ein Wurzelwort, aber es gibt viele Variationen derselben Wörter. Zum Beispiel ist das Wurzelwort "essen" und seine Variationen sind "essen, essen, gegessen und so". Auf die gleiche Weise können wir mit Hilfe von Stemming das Wurzelwort aller Variationen finden.

Zum Beispiel

He was riding.He was taking the ride.

In den beiden obigen Sätzen ist die Bedeutung dieselbe, dh Reitaktivität in der Vergangenheit. Ein Mensch kann leicht verstehen, dass beide Bedeutungen gleich sind. Bei Maschinen sind beide Sätze unterschiedlich. Daher wurde es schwierig, es in dieselbe Datenzeile zu konvertieren. Falls wir nicht denselben Datensatz bereitstellen, kann die Maschine keine Vorhersage treffen. Daher ist es notwendig, die Bedeutung jedes Wortes zu unterscheiden, um den Datensatz für das maschinelle Lernen vorzubereiten. Und hier wird Stemming verwendet, um denselben Datentyp zu kategorisieren, indem das Wurzelwort abgerufen wird.

Lassen Sie uns dies mit einem Python-Programm implementieren. NLTK hat einen Algorithmus namens "PorterStemmer". Dieser Algorithmus akzeptiert die Liste der tokenisierten Wörter und fügt sie in das Stammwort ein.

Programm zum Verständnis von Stemming

from nltk.stem import PorterStemmere_words= ["wait", "waiting", "waited", "waits"]ps =PorterStemmer()for w in e_words:rootWord=ps.stem(w)print(rootWord)

Ausgabe :

waitwaitwaitwait

Code Erläuterung:

  • In NLTk gibt es ein Stammmodul, das importiert wird. Wenn Sie das gesamte Modul importieren, wird das Programm schwer, da es Tausende von Codezeilen enthält. Aus dem gesamten Stammmodul haben wir also nur "PorterStemmer" importiert.
  • Wir haben eine Dummy-Liste mit Variationsdaten desselben Wortes erstellt.
  • Es wird ein Objekt erstellt, das zur Klasse nltk.stem.porter.PorterStemmer gehört.
  • Außerdem haben wir es nacheinander mit der "for" -Schleife an PorterStemmer übergeben. Schließlich haben wir das ausgegebene Wurzelwort jedes in der Liste erwähnten Wortes erhalten.

Aus der obigen Erklärung kann auch geschlossen werden, dass das Stemming als ein wichtiger Vorverarbeitungsschritt angesehen wird, da es Redundanz in den Daten und Variationen in demselben Wort beseitigt. Infolgedessen werden Daten gefiltert, was zu einem besseren Maschinentraining beiträgt.

Jetzt übergeben wir einen vollständigen Satz und überprüfen sein Verhalten als Ausgabe.

Programm:

from nltk.stem import PorterStemmerfrom nltk.tokenize import sent_tokenize, word_tokenizesentence="Hello Guru99, You have to build a very good site and I love visiting your site."words = word_tokenize(sentence)ps = PorterStemmer()for w in words:rootWord=ps.stem(w)print(rootWord)

Ausgabe:

helloguru99,youhavebuildaverigoodsiteandIlovevisityoursite

Code Erklärung

  • Das Paket PorterStemer wird aus dem Modulstamm importiert
  • Pakete zur Tokenisierung von Sätzen sowie Wörtern werden importiert
  • Es wird ein Satz geschrieben, der im nächsten Schritt mit einem Token versehen werden soll.
  • In diesem Schritt wird die Word-Tokenisierung implementiert.
  • Hier wird ein Objekt für PorterStemmer erstellt.
  • Die Schleife wird ausgeführt und das Stemming jedes Wortes wird unter Verwendung des in der Codezeile 5 erstellten Objekts durchgeführt

Fazit:

Stemming ist ein Datenvorverarbeitungsmodul. Die englische Sprache hat viele Variationen eines einzelnen Wortes. Diese Variationen führen zu Mehrdeutigkeiten beim Training und bei der Vorhersage des maschinellen Lernens. Um ein erfolgreiches Modell zu erstellen, ist es wichtig, solche Wörter zu filtern und mithilfe von Stemming in denselben Typ von sequenzierten Daten zu konvertieren. Dies ist auch eine wichtige Technik, um Zeilendaten aus einem Satz von Sätzen abzurufen und redundante Daten zu entfernen, die auch als Normalisierung bezeichnet werden.

Was ist Lemmatisierung?

Lemmatisierung ist der algorithmische Prozess, bei dem das Lemma eines Wortes in Abhängigkeit von seiner Bedeutung gefunden wird. Lemmatisierung bezieht sich normalerweise auf die morphologische Analyse von Wörtern, die darauf abzielt, Flexionsenden zu entfernen. Es hilft bei der Rückgabe der Basis- oder Wörterbuchform eines Wortes, das als Lemma bekannt ist. Die NLTK-Lemmatisierungsmethode basiert auf der in WorldNet integrierten Morph-Funktion. Die Textvorverarbeitung umfasst sowohl das Stemming als auch die Lemmatisierung. Viele Leute finden die beiden Begriffe verwirrend. Einige behandeln diese als gleich, aber es gibt einen Unterschied zwischen diesen beiden. Die Lemmatisierung wird aus dem folgenden Grund der ersteren vorgezogen.

Warum ist Lemmatisierung besser als Stemming?

Der Stemming-Algorithmus schneidet das Suffix aus dem Wort. Im weiteren Sinne schneidet entweder der Anfang oder das Ende des Wortes.

Im Gegenteil, die Lemmatisierung ist eine leistungsfähigere Operation und berücksichtigt die morphologische Analyse der Wörter. Es gibt das Lemma zurück, das die Grundform aller seiner Flexionsformen ist. Um Wörterbücher zu erstellen und nach der richtigen Form des Wortes zu suchen, sind fundierte Sprachkenntnisse erforderlich. Stemming ist eine allgemeine Operation, während Lemmatisierung eine intelligente Operation ist, bei der die richtige Form im Wörterbuch gesucht wird. Daher hilft die Lemmatisierung bei der Bildung besserer maschineller Lernfunktionen.

Code zur Unterscheidung zwischen Lemmatisierung und Stemming

Stemming-Code

import nltkfrom nltk.stem.porter import PorterStemmerporter_stemmer = PorterStemmer()text = "studies studying cries cry"tokenization = nltk.word_tokenize(text)for w in tokenization:print("Stemming for {} is {}".format(w,porter_stemmer.stem(w)))

Ausgabe:

Stemming for studies is studiStemming for studying is studiStemming for cries is criStemming for cry is cri

Lemmatisierungscode

import nltkfrom nltk.stem import WordNetLemmatizerwordnet_lemmatizer = WordNetLemmatizer()text = "studies studying cries cry"tokenization = nltk.word_tokenize(text)for w in tokenization:print("Lemma for {} is {}".format(w, wordnet_lemmatizer.lemmatize(w)))

Ausgabe:

Lemma for studies is studyLemma for studying is studyingLemma for cries is cryLemma for cry is cry

Diskussion der Ausgabe:

Wenn Sie nach Studien und Studien suchen, ist die Ausgabe gleich (studi), aber Lemmatizer bietet ein unterschiedliches Lemma sowohl für Token-Studien für Studien als auch für Studienstudien. Wenn wir also Funktionen für das Trainieren von Maschinen erstellen müssen, wäre es großartig, wenn die Lemmatisierung bevorzugt wird.

Anwendungsfall von Lemmatizer:

Lemmatizer minimiert die Mehrdeutigkeit von Text. Beispielwörter wie Fahrrad oder Fahrräder werden in Basiswort Fahrrad umgewandelt. Grundsätzlich werden alle Wörter mit derselben Bedeutung, aber unterschiedlicher Darstellung in ihre Grundform konvertiert. Es reduziert die Wortdichte im angegebenen Text und hilft bei der Vorbereitung der genauen Funktionen für das Trainingsgerät. Je sauberer die Daten sind, desto intelligenter und genauer wird Ihr Modell für maschinelles Lernen. Lemmatizer spart außerdem Speicherplatz und Rechenaufwand.

Echtzeitbeispiel zur Verwendung von Wordnet Lemmatization und POS Tagging in Python

from nltk.corpus import wordnet as wnfrom nltk.stem.wordnet import WordNetLemmatizerfrom nltk import word_tokenize, pos_tagfrom collections import defaultdicttag_map = defaultdict(lambda : wn.NOUN)tag_map['J'] = wn.ADJtag_map['V'] = wn.VERBtag_map['R'] = wn.ADVtext = "guru99 is a totally new kind of learning experience."tokens = word_tokenize(text)lemma_function = WordNetLemmatizer()for token, tag in pos_tag(tokens):lemma = lemma_function.lemmatize(token, tag_map[tag[0]])print(token, "=>", lemma)

Code Erklärung

  • Zunächst wird das Korpusleser-Wordnet importiert.
  • WordNetLemmatizer wird aus Wordnet importiert
  • Word Tokenize sowie Teile des Sprach-Tags werden aus nltk importiert
  • Das Standardwörterbuch wird aus Sammlungen importiert
  • Das Wörterbuch wird erstellt, wobei pos_tag (erster Buchstabe) die Schlüsselwerte sind, deren Werte dem Wert aus dem Wordnet-Wörterbuch zugeordnet sind. Wir haben den einzigen Anfangsbuchstaben genommen, da wir ihn später in der Schleife verwenden werden.
  • Text wird geschrieben und mit Token versehen.
  • Es wird das Objekt lemma_function erstellt, das innerhalb der Schleife verwendet wird
  • Die Schleife wird ausgeführt und lemmatize akzeptiert zwei Argumente, eines ist Token und das andere ist eine Zuordnung von pos_tag mit dem Wordnet-Wert.

Ausgabe:

guru99 => guru99is => betotally => totallynew => newkind => kindof => oflearning => learnexperience => experience. => .

Die Lemmatisierung hat eine enge Beziehung zum Wordnet-Wörterbuch, daher ist es wichtig, dieses Thema zu studieren, daher behalten wir dies als nächstes Thema bei