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: