Python - Stemming und Lemmatisierung
In den Bereichen der Verarbeitung natürlicher Sprache stoßen wir auf Situationen, in denen zwei oder mehr Wörter eine gemeinsame Wurzel haben. Zum Beispiel haben die drei Wörter - vereinbart, übereinstimmend und akzeptabel - dasselbe Wurzelwort: übereinstimmen. Eine Suche mit einem dieser Wörter sollte sie als dasselbe Wort behandeln, das das Wurzelwort ist. Daher ist es wichtig, alle Wörter in ihrem Wurzelwort zu verknüpfen. Die NLTK-Bibliothek verfügt über Methoden, um diese Verknüpfung durchzuführen und die Ausgabe mit dem Stammwort auszugeben.
Das folgende Programm verwendet den Porter-Stemming-Algorithmus zum Stemming.
import nltk
from nltk.stem.porter import PorterStemmer
porter_stemmer = PorterStemmer()
word_data = "It originated from the idea that there are readers who prefer learning new skills from the comforts of their drawing rooms"
# First Word tokenization
nltk_tokens = nltk.word_tokenize(word_data)
#Next find the roots of the word
for w in nltk_tokens:
print "Actual: %s Stem: %s" % (w,porter_stemmer.stem(w))
Wenn wir den obigen Code ausführen, wird das folgende Ergebnis erzeugt.
Actual: It Stem: It
Actual: originated Stem: origin
Actual: from Stem: from
Actual: the Stem: the
Actual: idea Stem: idea
Actual: that Stem: that
Actual: there Stem: there
Actual: are Stem: are
Actual: readers Stem: reader
Actual: who Stem: who
Actual: prefer Stem: prefer
Actual: learning Stem: learn
Actual: new Stem: new
Actual: skills Stem: skill
Actual: from Stem: from
Actual: the Stem: the
Actual: comforts Stem: comfort
Actual: of Stem: of
Actual: their Stem: their
Actual: drawing Stem: draw
Actual: rooms Stem: room
Die Lemmatisierung ist ähnlich wie die Stemmatisierung, bringt jedoch Kontext in die Wörter. Sie geht also noch einen Schritt weiter, indem sie Wörter mit ähnlicher Bedeutung mit einem Wort verknüpft. Wenn ein Absatz beispielsweise Wörter wie Autos, Züge und Autos enthält, werden alle mit Autos verknüpft. Im folgenden Programm verwenden wir die lexikalische WordNet-Datenbank zur Lemmatisierung.
import nltk
from nltk.stem import WordNetLemmatizer
wordnet_lemmatizer = WordNetLemmatizer()
word_data = "It originated from the idea that there are readers who prefer learning new skills from the comforts of their drawing rooms"
nltk_tokens = nltk.word_tokenize(word_data)
for w in nltk_tokens:
print "Actual: %s Lemma: %s" % (w,wordnet_lemmatizer.lemmatize(w))
Wenn wir den obigen Code ausführen, wird das folgende Ergebnis erzeugt.
Actual: It Lemma: It
Actual: originated Lemma: originated
Actual: from Lemma: from
Actual: the Lemma: the
Actual: idea Lemma: idea
Actual: that Lemma: that
Actual: there Lemma: there
Actual: are Lemma: are
Actual: readers Lemma: reader
Actual: who Lemma: who
Actual: prefer Lemma: prefer
Actual: learning Lemma: learning
Actual: new Lemma: new
Actual: skills Lemma: skill
Actual: from Lemma: from
Actual: the Lemma: the
Actual: comforts Lemma: comfort
Actual: of Lemma: of
Actual: their Lemma: their
Actual: drawing Lemma: drawing
Actual: rooms Lemma: room