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.