Stemming & Lemmization

Co to jest Stemming?

Stemming to technika używana do wyodrębniania podstawowej formy słów poprzez usuwanie z nich afiksów. To tak, jak ścinanie gałęzi drzewa na łodygi. Na przykład rdzeń słóweating, eats, eaten jest eat.

Wyszukiwarki używają tempa do indeksowania słów. Dlatego zamiast przechowywać wszystkie formy wyrazu, wyszukiwarka może przechowywać tylko jego rdzenie. W ten sposób procesowanie zmniejsza rozmiar indeksu i zwiększa dokładność wyszukiwania.

Różne algorytmy Stemming

W NLTK stemmerI, które mają stem()metoda interface zawiera wszystkie stemple, które będziemy omawiać w następnej kolejności. Rozumiemy to na poniższym schemacie

Algorytm rymowania Portera

Jest to jeden z najpopularniejszych algorytmów rymowania, który zasadniczo służy do usuwania i zastępowania dobrze znanych sufiksów angielskich słów.

PorterStemmer klasa

NLTK ma PorterStemmerklasa za pomocą której możemy w łatwy sposób zaimplementować algorytmy Portera Stemmera dla słowa, które chcemy macierzystym. Ta klasa zna kilka regularnych form wyrazów i przyrostków, za pomocą których może przekształcić słowo wejściowe w końcowy temat. Wynikowy temat jest często krótszym słowem o tym samym znaczeniu źródłowym. Zobaczmy przykład -

Najpierw musimy zaimportować zestaw narzędzi języka naturalnego (nltk).

import nltk

Teraz zaimportuj plik PorterStemmer do implementacji algorytmu Portera Stemmera.

from nltk.stem import PorterStemmer

Następnie utwórz instancję klasy Porter Stemmer w następujący sposób -

word_stemmer = PorterStemmer()

Teraz wprowadź słowo, które chcesz wywołać.

word_stemmer.stem('writing')

Wynik

'write'
word_stemmer.stem('eating')

Wynik

'eat'

Kompletny przykład wdrożenia

import nltk
from nltk.stem import PorterStemmer
word_stemmer = PorterStemmer()
word_stemmer.stem('writing')

Wynik

'write'

Algorytm tworzenia Lancastera

Został opracowany na Uniwersytecie Lancaster i jest kolejnym bardzo popularnym algorytmem rodującym.

Klasa LancasterStemmer

NLTK ma LancasterStemmerklasa za pomocą której możemy łatwo zaimplementować algorytmy Lancaster Stemmer dla słowa, które chcemy macierzystym. Zobaczmy przykład -

Najpierw musimy zaimportować zestaw narzędzi języka naturalnego (nltk).

import nltk

Teraz zaimportuj plik LancasterStemmer klasy do implementacji algorytmu Lancaster Stemmer

from nltk.stem import LancasterStemmer

Następnie utwórz wystąpienie LancasterStemmer klasę w następujący sposób -

Lanc_stemmer = LancasterStemmer()

Teraz wprowadź słowo, które chcesz wywołać.

Lanc_stemmer.stem('eats')

Wynik

'eat'

Kompletny przykład wdrożenia

import nltk
from nltk.stem import LancatserStemmer
Lanc_stemmer = LancasterStemmer()
Lanc_stemmer.stem('eats')

Wynik

'eat'

Algorytm rymowania wyrażeń regularnych

Za pomocą tego algorytmu rdzenia możemy skonstruować własny stemmer.

RegexpStemmer klasa

NLTK ma RegexpStemmerklasa za pomocą której możemy w łatwy sposób zaimplementować algorytmy Regular Expression Stemmer. Zasadniczo przyjmuje jedno wyrażenie regularne i usuwa przedrostek lub przyrostek pasujący do wyrażenia. Zobaczmy przykład -

Najpierw musimy zaimportować zestaw narzędzi języka naturalnego (nltk).

import nltk

Teraz zaimportuj plik RegexpStemmer do implementacji algorytmu Stemmer wyrażeń regularnych.

from nltk.stem import RegexpStemmer

Następnie utwórz wystąpienie RegexpStemmer class i zapewnia przyrostek lub przedrostek, który chcesz usunąć ze słowa w następujący sposób -

Reg_stemmer = RegexpStemmer(‘ing’)

Teraz wprowadź słowo, które chcesz wywołać.

Reg_stemmer.stem('eating')

Wynik

'eat'
Reg_stemmer.stem('ingeat')

Wynik

'eat'
Reg_stemmer.stem('eats')

Wynik

'eat'

Kompletny przykład wdrożenia

import nltk
from nltk.stem import RegexpStemmer
Reg_stemmer = RegexpStemmer()
Reg_stemmer.stem('ingeat')

Wynik

'eat'

Algorytm robienia śnieżki

Jest to kolejny bardzo przydatny algorytm bazujący.

Klasa SnowballStemmer

NLTK ma SnowballStemmerklasa za pomocą której możemy łatwo zaimplementować algorytmy Snowball Stemmer. Obsługuje 15 języków innych niż angielski. Aby skorzystać z tej parującej klasy, musimy utworzyć instancję z nazwą używanego przez nas języka, a następnie wywołać metodę stem (). Zobaczmy przykład -

Najpierw musimy zaimportować zestaw narzędzi języka naturalnego (nltk).

import nltk

Teraz zaimportuj plik SnowballStemmer do implementacji algorytmu Snowball Stemmer

from nltk.stem import SnowballStemmer

Zobaczmy, jakie języki obsługuje -

SnowballStemmer.languages

Wynik

(
   'arabic',
   'danish',
   'dutch',
   'english',
   'finnish',
   'french',
   'german',
   'hungarian',
   'italian',
   'norwegian',
   'porter',
   'portuguese',
   'romanian',
   'russian',
   'spanish',
   'swedish'
)

Następnie utwórz instancję klasy SnowballStemmer w języku, którego chcesz używać. Tutaj tworzymy stemmer dla języka „francuskiego”.

French_stemmer = SnowballStemmer(‘french’)

Teraz wywołaj metodę stem () i wprowadź słowo, które chcesz wywołać.

French_stemmer.stem (‘Bonjoura’)

Wynik

'bonjour'

Kompletny przykład wdrożenia

import nltk
from nltk.stem import SnowballStemmer
French_stemmer = SnowballStemmer(‘french’)
French_stemmer.stem (‘Bonjoura’)

Wynik

'bonjour'

Co to jest lematyzacja?

Technika lematyzacji jest jak wyprowadzanie. Dane wyjściowe, które otrzymamy po lematyzacji, nazywa się „lemat”, które jest raczej słowem źródłowym niż rdzeniem rdzeniowym, wynikiem rdzenia. Po lematyzacji otrzymamy prawidłowe słowo, które oznacza to samo.

NLTK zapewnia WordNetLemmatizer klasa, która jest cienkim opakowaniem wokół wordnetciało. Ta klasa używamorphy() funkcji do WordNet CorpusReaderklasę, aby znaleźć lemat. Zrozummy to na przykładzie -

Przykład

Najpierw musimy zaimportować zestaw narzędzi języka naturalnego (nltk).

import nltk

Teraz zaimportuj plik WordNetLemmatizer klasy do implementacji techniki lematyzacji.

from nltk.stem import WordNetLemmatizer

Następnie utwórz wystąpienie WordNetLemmatizer klasa.

lemmatizer = WordNetLemmatizer()

Teraz wywołaj metodę lemmatize () i wprowadź słowo, którego chcesz znaleźć lemat.

lemmatizer.lemmatize('eating')

Wynik

'eating'
lemmatizer.lemmatize('books')

Wynik

'book'

Kompletny przykład wdrożenia

import nltk
from nltk.stem import WordNetLemmatizer
lemmatizer = WordNetLemmatizer()
lemmatizer.lemmatize('books')

Wynik

'book'

Różnica między Stemming a Lemmatyzacją

Zrozummy różnicę między Stemming i Lemmatyzacją za pomocą następującego przykładu -

import nltk
from nltk.stem import PorterStemmer
word_stemmer = PorterStemmer()
word_stemmer.stem('believes')

Wynik

believ
import nltk
from nltk.stem import WordNetLemmatizer
lemmatizer = WordNetLemmatizer()
lemmatizer.lemmatize(' believes ')

Wynik

believ

Dane wyjściowe obu programów pokazują główną różnicę między podstawianiem a lematyzacją. PorterStemmerklasa odcina „es” ze słowa. Z drugiej strony,WordNetLemmatizerclass znajduje prawidłowe słowo. Mówiąc prościej, technika pisowni bierze pod uwagę tylko formę słowa, podczas gdy technika lematyzacji analizuje znaczenie słowa. Oznacza to, że po zastosowaniu lematyzacji zawsze otrzymamy prawidłowe słowo.