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.

  • 🌱 Stamm: Der PorterStemmer entfernt Suffixe, um zu einer Wurzel zu gelangen, die möglicherweise kein echtes Wort ist.
  • 📚 Lemmatisierung: Der WordNetLemmatizer gibt die Wörterbuch-Grundform zurück, das sogenannte Lemma.
  • Unterschied: Stemming ist schneller, Lemmatisierung ist langsamer, aber genauer und kontextsensitiv.
  • 🔤 Normalisierung: Beide Methoden reduzieren die Wortdichte, sodass Maschinen Varianten als ein einziges Merkmal behandeln.
  • 🏷️ POS-Etiketten: Durch die Übergabe eines Wortart-Tags wird der Lemmatisierer wesentlich präziser.
  • 🤖 KI-Vorteil: Sauberer normalisierter Text führt zu stärkeren Merkmalen und Modellen für maschinelles Lernen.

Stemming und Lemmatisierung in Python NLTK

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.

Häufig gestellte Fragen

Der Porter-Stemmer ist die PorterStemmer-Klasse von NLTK. Er wendet Suffix-Entfernung an.ping Die Regeln des Algorithmus von Martin Porter aus dem Jahr 1980 reduzieren englische Wörter auf ihren Wortstamm, sodass „waiting“, „waited“ und „waits“ alle zu „wait“ werden.

Verwenden Sie Stemming, wenn Geschwindigkeit und Einfachheit wichtiger sind als Lesbarkeit, beispielsweise bei der Suchindexierung, umfangreichen Stimmungsanalysen oder Merkmalsreduktion. Wählen Sie Lemmatisierung, wenn das Ergebnis ein gültiges, lesbares Wort sein muss.

Die Textnormalisierung wandelt verschiedene Formen eines Wortes in eine gemeinsame Repräsentation um. Stemming und Lemmatisierung sind zwei Normalisierungstechniken, die die Wortdichte reduzieren, sodass ein Modell Varianten wie „study“ und „studies“ als ein einziges Merkmal behandelt.

NLTK bietet PorterStemmer (und andere Stemmer wie Snowball) zum Stemming und WordNetLemmatizer zur Lemmatisierung. Der Lemmatisierer verwendet das WordNet-Wörterbuch, um die korrekte Grundform jedes Wortes zu ermitteln.

Sie entfernen redundante Wortvarianten, sodass ein Modell für maschinelles Lernen klarere, niedrigdimensionale Merkmale erhält. Weniger doppelte Token bedeuten weniger Mehrdeutigkeiten während des Trainings und genauere Vorhersagen für unbekannte Texte.

Moderne KI-Modelle erschließen den Kontext automatisch, aber der WordNetLemmatizer von NLTK benötigt eine Wortartangabe zur Unterscheidung. Durch die Angabe dieser Angabe kann er das richtige Lemma auswählen und beispielsweise „learning“ in „learn“ umwandeln, wenn es als Verb gekennzeichnet ist.

Ein Wort kann mit unterschiedlichen Lemmata ein Substantiv oder ein Verb sein. Ohne Angabe der Wortart geht WordNetLemmatizer von einem Substantiv aus. Die Angabe der korrekten Wortart, beispielsweise Verb oder Adjektiv, liefert die richtige Grundform.

Nein. Die Stammformreduktion entfernt nur Suffixe, sodass aus „studies“ „studi“ und aus „cries“ „cri“ werden, was keine gültigen Wörter sind. Die Lemmatisierung hingegen liefert immer ein gültiges Wort aus dem Wörterbuch, wie zum Beispiel „study“.

Fassen Sie diesen Beitrag mit folgenden Worten zusammen: