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.