Stemming & Lemmatisierung
Was ist Stemming?
Stemming ist eine Technik, mit der die Grundform der Wörter durch Entfernen von Affixen extrahiert wird. Es ist so, als würde man die Zweige eines Baumes bis zu seinen Stielen fällen. Zum Beispiel der Stamm der Wörtereating, eats, eaten ist eat.
Suchmaschinen verwenden Stemming zur Indizierung der Wörter. Aus diesem Grund kann eine Suchmaschine nicht alle Formen eines Wortes speichern, sondern nur die Stämme. Auf diese Weise reduziert Stemming die Größe des Index und erhöht die Abrufgenauigkeit.
Verschiedene Stemming-Algorithmen
In NLTK, stemmerI, die haben stem()Methode, Schnittstelle hat alle Stemmers, die wir als nächstes behandeln werden. Lassen Sie es uns mit dem folgenden Diagramm verstehen
Porter-Stemming-Algorithmus
Es ist einer der gebräuchlichsten Stemming-Algorithmen, der im Wesentlichen dazu dient, bekannte Suffixe englischer Wörter zu entfernen und zu ersetzen.
PorterStemmer-Klasse
NLTK hat PorterStemmerKlasse, mit deren Hilfe wir leicht Porter Stemmer-Algorithmen für das Wort implementieren können, das wir stammeln möchten. Diese Klasse kennt mehrere reguläre Wortformen und Suffixe, mit deren Hilfe sie das eingegebene Wort in einen endgültigen Stamm umwandeln kann. Der resultierende Stamm ist oft ein kürzeres Wort mit derselben Wurzelbedeutung. Lassen Sie uns ein Beispiel sehen -
Zuerst müssen wir das Toolkit für natürliche Sprache (nltk) importieren.
import nltk
Importieren Sie nun die PorterStemmer Klasse zur Implementierung des Porter Stemmer-Algorithmus.
from nltk.stem import PorterStemmer
Erstellen Sie als Nächstes eine Instanz der Porter Stemmer-Klasse wie folgt:
word_stemmer = PorterStemmer()
Geben Sie nun das Wort ein, das Sie verwenden möchten.
word_stemmer.stem('writing')
Ausgabe
'write'
word_stemmer.stem('eating')
Ausgabe
'eat'
Vollständiges Implementierungsbeispiel
import nltk
from nltk.stem import PorterStemmer
word_stemmer = PorterStemmer()
word_stemmer.stem('writing')
Ausgabe
'write'
Lancaster-Stemming-Algorithmus
Es wurde an der Lancaster University entwickelt und ist ein weiterer sehr verbreiteter Stemming-Algorithmus.
LancasterStemmer-Klasse
NLTK hat LancasterStemmerKlasse, mit deren Hilfe wir leicht Lancaster Stemmer-Algorithmen für das Wort implementieren können, das wir aufhalten möchten. Lassen Sie uns ein Beispiel sehen -
Zuerst müssen wir das Toolkit für natürliche Sprache (nltk) importieren.
import nltk
Importieren Sie nun die LancasterStemmer Klasse zur Implementierung des Lancaster Stemmer-Algorithmus
from nltk.stem import LancasterStemmer
Erstellen Sie als Nächstes eine Instanz von LancasterStemmer Klasse wie folgt -
Lanc_stemmer = LancasterStemmer()
Geben Sie nun das Wort ein, das Sie verwenden möchten.
Lanc_stemmer.stem('eats')
Ausgabe
'eat'
Vollständiges Implementierungsbeispiel
import nltk
from nltk.stem import LancatserStemmer
Lanc_stemmer = LancasterStemmer()
Lanc_stemmer.stem('eats')
Ausgabe
'eat'
Stemming-Algorithmus für reguläre Ausdrücke
Mit Hilfe dieses Stemming-Algorithmus können wir unseren eigenen Stemmer konstruieren.
RegexpStemmer-Klasse
NLTK hat RegexpStemmerKlasse, mit deren Hilfe wir problemlos Stemmer-Algorithmen für reguläre Ausdrücke implementieren können. Grundsätzlich wird ein einzelner regulärer Ausdruck verwendet und jedes Präfix oder Suffix entfernt, das dem Ausdruck entspricht. Lassen Sie uns ein Beispiel sehen -
Zuerst müssen wir das Toolkit für natürliche Sprache (nltk) importieren.
import nltk
Importieren Sie nun die RegexpStemmer Klasse zum Implementieren des Regular Expression Stemmer-Algorithmus.
from nltk.stem import RegexpStemmer
Erstellen Sie als Nächstes eine Instanz von RegexpStemmer Klasse und stellt das Suffix oder Präfix bereit, das Sie wie folgt aus dem Wort entfernen möchten:
Reg_stemmer = RegexpStemmer(‘ing’)
Geben Sie nun das Wort ein, das Sie verwenden möchten.
Reg_stemmer.stem('eating')
Ausgabe
'eat'
Reg_stemmer.stem('ingeat')
Ausgabe
'eat'
Reg_stemmer.stem('eats')
Ausgabe
'eat'
Vollständiges Implementierungsbeispiel
import nltk
from nltk.stem import RegexpStemmer
Reg_stemmer = RegexpStemmer()
Reg_stemmer.stem('ingeat')
Ausgabe
'eat'
Schneeball-Stemming-Algorithmus
Es ist ein weiterer sehr nützlicher Stemming-Algorithmus.
SnowballStemmer Klasse
NLTK hat SnowballStemmerKlasse, mit deren Hilfe wir leicht Snowball Stemmer-Algorithmen implementieren können. Es unterstützt 15 nicht englische Sprachen. Um diese dampfende Klasse verwenden zu können, müssen wir eine Instanz mit dem Namen der von uns verwendeten Sprache erstellen und dann die stem () -Methode aufrufen. Lassen Sie uns ein Beispiel sehen -
Zuerst müssen wir das Toolkit für natürliche Sprache (nltk) importieren.
import nltk
Importieren Sie nun die SnowballStemmer Klasse zur Implementierung des Snowball Stemmer-Algorithmus
from nltk.stem import SnowballStemmer
Lassen Sie uns die Sprachen sehen, die es unterstützt -
SnowballStemmer.languages
Ausgabe
(
'arabic',
'danish',
'dutch',
'english',
'finnish',
'french',
'german',
'hungarian',
'italian',
'norwegian',
'porter',
'portuguese',
'romanian',
'russian',
'spanish',
'swedish'
)
Erstellen Sie als Nächstes eine Instanz der SnowballStemmer-Klasse mit der Sprache, die Sie verwenden möchten. Hier erstellen wir den Stemmer für die 'französische' Sprache.
French_stemmer = SnowballStemmer(‘french’)
Rufen Sie nun die stem () -Methode auf und geben Sie das Wort ein, das Sie stemmen möchten.
French_stemmer.stem (‘Bonjoura’)
Ausgabe
'bonjour'
Vollständiges Implementierungsbeispiel
import nltk
from nltk.stem import SnowballStemmer
French_stemmer = SnowballStemmer(‘french’)
French_stemmer.stem (‘Bonjoura’)
Ausgabe
'bonjour'
Was ist Lemmatisierung?
Lemmatisierungstechnik ist wie Stemming. Die Ausgabe, die wir nach der Lemmatisierung erhalten, heißt 'Lemma', was eher ein Wurzelwort als ein Wurzelstamm ist, die Ausgabe von Stemming. Nach der Lemmatisierung erhalten wir ein gültiges Wort, das dasselbe bedeutet.
NLTK bietet WordNetLemmatizer Klasse, die eine dünne Hülle um die ist wordnetKorpus. Diese Klasse verwendetmorphy() Funktion zum WordNet CorpusReaderKlasse, um ein Lemma zu finden. Lassen Sie es uns anhand eines Beispiels verstehen -
Beispiel
Zuerst müssen wir das Toolkit für natürliche Sprache (nltk) importieren.
import nltk
Importieren Sie nun die WordNetLemmatizer Klasse zur Implementierung der Lemmatisierungstechnik.
from nltk.stem import WordNetLemmatizer
Erstellen Sie als Nächstes eine Instanz von WordNetLemmatizer Klasse.
lemmatizer = WordNetLemmatizer()
Rufen Sie nun die Methode lemmatize () auf und geben Sie das Wort ein, dessen Lemma Sie suchen möchten.
lemmatizer.lemmatize('eating')
Ausgabe
'eating'
lemmatizer.lemmatize('books')
Ausgabe
'book'
Vollständiges Implementierungsbeispiel
import nltk
from nltk.stem import WordNetLemmatizer
lemmatizer = WordNetLemmatizer()
lemmatizer.lemmatize('books')
Ausgabe
'book'
Unterschied zwischen Stemming & Lemmatisierung
Lassen Sie uns den Unterschied zwischen Stemming und Lemmatisierung anhand des folgenden Beispiels verstehen:
import nltk
from nltk.stem import PorterStemmer
word_stemmer = PorterStemmer()
word_stemmer.stem('believes')
Ausgabe
believ
import nltk
from nltk.stem import WordNetLemmatizer
lemmatizer = WordNetLemmatizer()
lemmatizer.lemmatize(' believes ')
Ausgabe
believ
Die Ausgabe beider Programme zeigt den Hauptunterschied zwischen Stemming und Lemmatisierung. PorterStemmerKlasse hackt die 'es' vom Wort ab. Andererseits,WordNetLemmatizerKlasse findet ein gültiges Wort. In einfachen Worten betrachtet die Stemming-Technik nur die Form des Wortes, während die Lemmatisierungstechnik die Bedeutung des Wortes betrachtet. Es bedeutet, dass wir nach der Anwendung der Lemmatisierung immer ein gültiges Wort erhalten.