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
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
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)
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.



