Stemming und Lemmatisierung in Python NLTK mit Beispielen
⚡ Intelligente Zusammenfassung
Stemming und Lemmatisierung sind Textnormalisierungstechniken in Python NLTK reduziert Wortvarianten auf eine gemeinsame Basis, wobei Stemming Suffixe schnell und ohne Kontext entfernt und Lemmatisierung ein echtes Wörterbuchwort unter Berücksichtigung seiner Bedeutung zurückgibt.

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 zur Textvorverarbeitung eingesetzt. Der Unterschied zwischen Stemming und Lemmatisierung besteht darin, dass Stemming schneller ist, da es Wörter ohne Kenntnis des Kontextes entfernt, während Lemmatisierung langsamer ist, da sie den Kontext der Wörter vor der Verarbeitung berücksichtigt.
Was ist Stemming?
Stemming ist eine Methode zur Normalisierung von Wörtern in Verarbeitung natürlicher SpracheEs handelt sich um eine Technik, bei der die Wörter eines Satzes in eine Sequenz umgewandelt werden, um die Suche zu verkürzen. Dabei werden Wörter, die dieselbe Bedeutung haben, aber je nach Kontext oder Satz variieren, normalisiert. Anders ausgedrückt: Es gibt ein Stammwort, aber viele Varianten desselben Wortes. Zum Beispiel ist das Stammwort „essen“ und seine Varianten sind „isst“, „essend“, „gegessen“ usw. Mit Hilfe des Stemmings lassen sich ähnliche Verfahren anwenden. PythonWir können das Grundwort jeder beliebigen Variation finden.
Beispielsweise:
He was riding. He was taking the ride.
Die beiden obigen Sätze haben dieselbe Bedeutung: Sie beschreiben eine Reitaktivität in der Vergangenheit. Ein Mensch versteht sofort, dass beide Sätze dasselbe bedeuten. Für Maschinen hingegen sind sie unterschiedlich. Daher ist es schwierig, sie in denselben Datensatz umzuwandeln. Ohne denselben Datensatz kann die Maschine keine Vorhersagen treffen. Deshalb ist es notwendig, die Bedeutung jedes Wortes zu differenzieren, um den Datensatz für maschinelles Lernen vorzubereiten. Hierbei wird Stemming verwendet, um Daten desselben Typs anhand ihrer Wortwurzeln zu kategorisieren.
Lassen Sie uns dies mit einem umsetzen Python Programm. NLTK verfügt über einen Algorithmus namens PorterStemmerDieser Algorithmus nimmt die Liste der tokenisierten Wörter entgegen und zerlegt sie in ihre Wurzelwö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 Erläuterung:
- Es gibt ein Stammmodul in NLTK, das importiert wird. Würde man das gesamte Modul importieren, würde das Programm aufgrund der Tausenden von Codezeilen sehr groß werden. Daher haben wir von dem gesamten Stammmodul 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.
- Wir haben die Wörter mithilfe einer „for“-Schleife nacheinander an PorterStemmer übergeben. Schließlich erhielten wir das Wurzelwort jedes in der Liste enthaltenen Wortes.
Aus dem Vorangegangenen geht hervor, dass Stemming ein wichtiger Vorverarbeitungsschritt ist, da er Redundanzen und Variationen innerhalb desselben Wortes entfernt. Dadurch werden die Daten gefiltert, was ein besseres maschinelles Training ermöglicht. Nun übergeben wir einen vollständigen Satz und überprüfen dessen Ausgabe.
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 Erläuterung:
- Das Paket PorterStemmer wird aus dem Modul stem importiert.
- Es werden Pakete für die Tokenisierung von Sätzen und Wörtern importiert.
- Es wird ein Satz geschrieben, der im nächsten Schritt tokenisiert werden soll.
- Hier wird ein Objekt für PorterStemmer erstellt.
- Es wird eine Schleife ausgeführt und jedes Wort wird mithilfe des in Codezeile 5 erstellten Objekts auf seinen Wortstamm reduziert.
Kurz gesagt, Stemming ist ein Modul zur Datenvorverarbeitung. Die englische Sprache kennt viele Varianten einzelner Wörter, was zu Mehrdeutigkeiten beim Training und der Vorhersage von maschinellem Lernen führen kann. Um ein erfolgreiches Modell zu erstellen, ist es unerlässlich, diese Wörter mithilfe von Stemming in die gleichen sequenziellen Daten zu filtern. Dies wird auch als Normalisierung bezeichnet.
Was ist Lemmatisierung?
Lemmatisierung In NLTK ist die Lemmatisierung der algorithmische Prozess, der das Lemma eines Wortes anhand seiner Bedeutung und seines Kontextes findet. Lemmatisierung bezeichnet üblicherweise die morphologische Analyse von Wörtern mit dem Ziel, Flexionsendungen zu entfernen. Sie hilft dabei, die Grundform eines Wortes, das sogenannte Lemma, zu ermitteln. Die Lemmatisierungsmethode von NLTK basiert auf der in WordNet integrierten Morph-Funktion. Die Textvorverarbeitung umfasst sowohl Stemming als auch Lemmatisierung. Viele verwechseln diese beiden Begriffe. Manche betrachten sie als dasselbe, aber es gibt einen Unterschied zwischen Stemming und Lemmatisierung. Die Lemmatisierung wird aus dem unten genannten Grund dem Stemming vorgezogen.
Warum ist Lemmatisierung besser als Stemming?
Der Stemming-Algorithmus entfernt das Suffix vom Wort. Im weiteren Sinne wird entweder der Anfang oder das Ende des Wortes abgeschnitten. Die Lemmatisierung hingegen ist ein leistungsfähigeres Verfahren, das die morphologische Analyse der Wörter berücksichtigt. Sie liefert das Lemma, die Grundform aller Flexionsformen. Um Wörterbücher zu erstellen und die korrekte Wortform zu finden, sind fundierte linguistische Kenntnisse erforderlich. Stemming ist ein allgemeines Verfahren, während die Lemmatisierung ein intelligentes Verfahren ist, bei dem die korrekte Form im Wörterbuch nachgeschlagen wird. Daher trägt die Lemmatisierung zu einer besseren Wortbildung bei. Maschinelles Lernen Funktionen.
Code um zwischen Lemmatisierung und Stemming zu unterscheiden
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
Lemmatisierung Code:
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
Betrachtet man die Stemming-Methode für „studies“ und „studierend“, ist das Ergebnis identisch („studi“). Der NLTK-Lemmatisierer liefert jedoch für beide Token unterschiedliche Lemmata: „study“ für „studies“ und „studierend“ für „studierend“. Daher wäre es wünschenswert, bei der Erstellung eines Merkmalsatzes zum Trainieren einer Maschine die Lemmatisierung zu bevorzugen.
Anwendungsfall von Lemmatizer
Der Lemmatisierer minimiert Mehrdeutigkeiten in Texten. Wörter wie „Fahrrad“ oder „Fahrräder“ werden in das Grundwort „Fahrrad“ umgewandelt. Er wandelt alle Wörter mit gleicher Bedeutung, aber unterschiedlicher Schreibweise in ihre Grundform um und reduziert so die Wortdichte und die Lesbarkeit.ping Bereiten Sie präzise Merkmale für das Training eines maschinellen Lernsystems vor. Je sauberer die Daten, desto genauer wird Ihr Modell für maschinelles Lernen sein. Der NLTK Lemmatizer spart zudem Speicherplatz und Rechenkosten.
Echtzeitbeispiel zur Veranschaulichung der 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)
Ausgang:
guru99 => guru99 is => be totally => totally new => new kind => kind of => of learning => learn experience => experience . => .
Code Erläuterung:
- Der Korpusleser wordnet wird importiert, und WordNetLemmatizer wird von wordnet importiert.
- Die Tokenisierung der Wörter und die Kennzeichnung der Wortarten werden aus nltk importiert, das Standardwörterbuch aus collections.
- Es wird ein Wörterbuch erstellt, in dem der erste Buchstabe von pos_tag der Schlüssel ist, der dem Wert aus dem WordNet-Wörterbuch zugeordnet wird.
- Der Text wird geschrieben und tokenisiert, und das Objekt lemma_function wird zur Verwendung innerhalb der Schleife erstellt.
- Die Schleife wird ausgeführt, und lemmatize benötigt zwei Argumente: das Token und eine Map.ping von pos_tag mit dem wordnet-Wert.
Python Die Lemmatisierung steht in engem Zusammenhang mit der WordNet-WörterbuchDaher ist es unerlässlich, sich als nächstes mit diesem Thema zu befassen.
