Stemming und Lemmatisierung in Python NLTK mit Beispielen

Was ist Stemming und Lemmatisierung in Python NLTK?

Stemmung und Lemmatisierung in Python NLTK sind Textnormalisierungstechniken für die Verarbeitung natürlicher Sprache. Diese Techniken werden häufig für die Textvorverarbeitung verwendet. Der Unterschied zwischen Stemming und Lemmatisierung besteht darin, dass Stemming schneller ist, da es Wörter ohne Kenntnis des Kontexts ausschneidet, während Lemmatisierung langsamer ist, da es den Kontext der Wörter vor der Verarbeitung kennt.

Was ist Stemming?

Stemming ist eine Methode zur Normalisierung von Wörtern in Verarbeitung natürlicher Sprache. Dabei handelt es sich um eine Technik, bei der eine Reihe von Wörtern in einem Satz in eine Sequenz umgewandelt werden, um die Suche zu verkürzen. Bei dieser Methode werden Wörter normalisiert, die die gleiche Bedeutung haben, aber je nach Kontext oder Satz einige Variationen aufweisen.

Mit anderen Worten: Es gibt ein Wurzelwort, aber es gibt viele Variationen desselben Wortes. Das Wurzelwort ist zum Beispiel „essen“ und seine Variationen lauten „isst, isst, gegessen und so“. Auf die gleiche Weise, mit Hilfe von Stemming in Python, können wir das Wurzelwort aller Variationen finden.

Zum Beispiel

He was riding.	
He was taking the ride.

In den obigen beiden Sätzen ist die Bedeutung dieselbe, nämlich Fahraktivität in der Vergangenheit. Ein Mensch kann leicht verstehen, dass beide Bedeutungen gleich sind. Aber für 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 Vorhersagen treffen. Daher ist es notwendig, die Bedeutung jedes Wortes zu differenzieren, um den Datensatz für maschinelles Lernen vorzubereiten. Und hier wird Stemming verwendet, um dieselbe Art von Daten zu kategorisieren, indem ihr Wurzelwort ermittelt wird.

Lassen Sie uns dies mit einem Python program.NLTK hat einen Algorithmus namens „PorterStemmer“. Dieser Algorithmus akzeptiert die Liste der tokenisierten Wörter und zerlegt sie in Stammwörter.

Programm zum Verständnis von Stemming

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

Ausgang:

wait	
wait	
wait	
wait 

Programm zum Verständnis von Stemming

Code-Erklärung:

  • Es gibt ein Stammmodul in NLTk, das importiert wird. Wenn Sie das komplette Modul importieren, wird das Programm umfangreich, da es Tausende von Codezeilen enthält. Aus dem gesamten Stem-Modul 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 einzeln mithilfe der „for“-Schleife an PorterStemmer übergeben. Schließlich haben wir das Wurzelwort jedes in der Liste genannten Wortes ausgegeben.

Aus der obigen Erklärung lässt sich auch schließen, dass die Stammerkennung als wichtiger Vorverarbeitungsschritt angesehen wird, da sie Redundanzen in den Daten und Variationen im selben Wort beseitigt. Dadurch werden Daten gefiltert, was zu einem besseren Maschinentraining beiträgt.

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

Programm (kann in Englisch und Deutsch durchgefuehrt werden)

from nltk.stem import PorterStemmer
from nltk.tokenize import sent_tokenize, word_tokenize
sentence="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)

Ausgang:

hello	
guru99	
,	
you	
have	
build	
a	
veri	
good	
site	
and	
I	
love	
visit	
your	
site	 

Programm zum Verständnis von Stemming

Code-Erklärung:

  • Das Paket PorterStemer wird aus dem Modul stem importiert
  • Es werden Pakete zur Tokenisierung von Sätzen und Wörtern importiert
  • Es wird ein Satz geschrieben, der im nächsten Schritt tokenisiert werden soll.
  • In diesem Schritt wird die Wort-Tokenisierung mit Stemm-Lemmatisierung implementiert.
  • Hier wird ein Objekt für PorterStemmer erstellt.
  • Die Schleife wird ausgeführt und die Stammbildung jedes Wortes erfolgt mithilfe des in Codezeile 5 erstellten Objekts

Fazit:

Stemming ist ein Datenvorverarbeitungsmodul. In der englischen Sprache gibt es viele Variationen eines einzelnen Wortes. Diese Variationen führen zu Mehrdeutigkeiten beim Training und bei der Vorhersage maschinellen Lernens. Um ein erfolgreiches Modell zu erstellen, ist es wichtig, solche Wörter zu filtern und mithilfe der Stammerkennung in denselben Typ sequenzierter Daten umzuwandeln. Dies ist auch eine wichtige Technik, um Zeilendaten aus einem Satzsatz zu erhalten und redundante Daten zu entfernen, was auch als Normalisierung bezeichnet wird.

Was ist Lemmatisierung?

Lemmatisierung In NLTK handelt es sich um den algorithmischen Prozess, bei dem das Lemma eines Wortes abhängig von seiner Bedeutung und seinem Kontext ermittelt wird. Unter Lemmatisierung versteht man üblicherweise die morphologische Analyse von Wörtern, die darauf abzielt, Flexionsendungen 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 integrierten Morph-Funktion von WorldNet. Die Textvorverarbeitung umfasst sowohl die Wortstammbildung als auch die Lemmatisierung. Viele Menschen finden die beiden Begriffe verwirrend. Einige behandeln diese als gleich, aber es gibt einen Unterschied zwischen Stemming und Lemmatisierung. Aus folgendem Grund wird die Lemmatisierung der ersteren vorgezogen.

Warum ist Lemmatisierung besser als Stemming?

Der Stemming-Algorithmus funktioniert, indem er das Suffix aus dem Wort schneidet. Im weiteren Sinne schneidet man entweder den Anfang oder das Ende des Wortes ab.

Im Gegensatz dazu ist die Lemmatisierung eine leistungsfähigere Operation, die die morphologische Analyse der Wörter berücksichtigt. Sie 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 linguistische Kenntnisse erforderlich. Stemming ist eine allgemeine Operation, während die Lemmatisierung eine intelligente Operation ist, bei der die richtige Form im Wörterbuch gesucht wird. Daher hilft die Lemmatisierung bei der Bildung besserer Maschinelles Lernen Funktionen.

Code zur Unterscheidung zwischen Lemmatisierung und Stemming

Stemming-Code:

import nltk
from nltk.stem.porter import PorterStemmer
porter_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)))  

Ausgang::

Stemming for studies is studi
Stemming for studying is studi
Stemming for cries is cri
Stemming for cry is cri

Lemmatisierungscode:

import nltk
	from nltk.stem import 	WordNetLemmatizer
	wordnet_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)))  

Ausgang:

Lemma for studies is study
Lemma for studying is studying
Lemma for cries is cry
Lemma for cry is cry

Diskussion der Ausgabe

Wenn Sie nach Stemming für Studien und Studieren suchen, ist die Ausgabe dieselbe (studi), aber der NLTK-Lemmatisierer stellt ein unterschiedliches Lemma für beide Token „Studie für Studien“ und „Studieren für Studieren“ bereit. Wenn wir also einen Funktionsumfang erstellen müssen, um die Maschine zu trainieren, wäre es großartig, wenn die Lemmatisierung bevorzugt würde.

Anwendungsfall von Lemmatizer

Lemmatizer minimiert Textmehrdeutigkeiten. Beispielwörter wie „Fahrrad“ oder „Fahrräder“ werden in das Basiswort „Fahrrad“ umgewandelt. Grundsätzlich werden alle Wörter mit derselben Bedeutung, aber unterschiedlicher Darstellung in ihre Grundform umgewandelt. Es reduziert die Wortdichte im gegebenen Text und hilft bei der Vorbereitung der genauen Funktionen für die Trainingsmaschine. Je sauberer die Daten, desto intelligenter und genauer wird Ihr maschinelles Lernmodell. Der NLTK-Lemmatizer spart außerdem Speicher und Rechenkosten.

Echtzeitbeispiel, das die Verwendung von Wordnet-Lemmatisierung und POS-Tagging in Python

from nltk.corpus import wordnet as wn
	from nltk.stem.wordnet import WordNetLemmatizer
	from nltk import word_tokenize, pos_tag
	from collections import defaultdict
	tag_map = defaultdict(lambda : wn.NOUN)
	tag_map['J'] = wn.ADJ
	tag_map['V'] = wn.VERB
	tag_map['R'] = wn.ADV

	text = "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)

Anwendungsfall von Lemmatizer

Code Erklärung

  • Zunächst wird der Korpus-Reader Wordnet importiert.
  • WordNetLemmatizer wird aus Wordnet importiert.
  • Wort-Tokenisierung sowie Wortarten-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 werden. Wir haben nur den ersten Buchstaben genommen, da wir ihn später in der Schleife verwenden werden.
  • Text wird geschrieben und tokenisiert.
  • Es wird das Objekt lemma_function erstellt, das innerhalb der Schleife verwendet wird.
  • Die Schleife wird ausgeführt und Lemmatisierung akzeptiert zwei Argumente, eines ist ein Token und das andere ist eine Zuordnung von pos_tag zum Wordnet-Wert.

Ausgang:

guru99 => guru99				
is => be				
totally => totally				
new => new				
kind => kind				
of => of				
learning => learn				
experience => experience				
. => .				 

Python Die Lemmatisierung hat eine enge Beziehung zu Wordnet-WörterbuchDaher ist es wichtig, sich mit diesem Thema zu befassen, daher behalten wir dies als nächstes Thema bei.