https://szkolazpieklarodem.pl/
Stemming to proces redukcji odmienionych słów do ich rdzenia, formy podstawowej. Algorytm wynikający redukuje słowa „mówiąc” do rdzenia „powiedzieć”, podczas gdy „prawdopodobnie” staje się domniemaniem. Jak widać, może to być w 100% poprawne, ale nie zawsze. Lematyzacja jest ściśle związana z rdzeniem, ale lematyzacja to algorytmiczny proces określania lematu słowa na podstawie jego zamierzonego znaczenia. Na przykład w języku angielskim czasownik „chodzić” może występować jako „chodzić”, „chodzić”, „chodzić” lub „chodzić”. Podstawowa forma „spaceru”, którą można znaleźć w słowniku, nazywa się lematem na to słowo. spaCy nie ma wbudowanego rdzenia, ponieważ lematyzacja jest uważana za bardziej poprawną i produktywną. Różnica między Stemmingiem a Lematyzacją
- Stemming wykonuje tę pracę w prymitywny, heurystyczny sposób, odcinając końcówki słów, zakładając, że pozostałe słowo jest tym, czego faktycznie szukamy, ale często obejmuje to usuwanie afiksów derywacyjnych.
- Lematyzacja próbuje wykonać to zadanie w bardziej elegancki sposób, wykorzystując słownictwo i analizę morfologiczną słów. Próbuje usunąć tylko końcówki fleksyjne i zwrócić słownikową formę słowa, znaną jako lemat.
Chociaż niewiele bibliotek udostępnia metody rdzeniowania i lematyzacji, zawsze najlepszą praktyką jest użycie lematyzacji w celu prawidłowego uzyskania rdzenia słowa. Spróbujmy zbadać lematyzację na kilku przykładach:
Przykład 1:
from spacy.lemmatizer import Lemmatizer
from spacy.lang.en import LEMMA_INDEX, LEMMA_EXC, LEMMA_RULES
lemmatizer = Lemmatizer(LEMMA_INDEX, LEMMA_EXC, LEMMA_RULES)
lemmatizer(‘chuckles’, ‘NOUN’) # 2nd param is token’s part-of-speech tag
Wyjście :
[u’chuckle’]
Przykład 2:
lemmatizer(‘blazing’, ‘VERB’)
Wyjście:
[u’blaze’]
Przykład 3:
lemmatizer(‘fastest’, ‘ADJ’)
Wyjście:
[u’fast’]
Jeśli chcesz zobaczyć porównanie stemmera i lemmatizera, musisz zainstalować jedną z najpopularniejszych bibliotek dla Pythona: Natural Language Toolkit (NLTK). spaCy zyskało popularność niedawno, ale to NLTK sprawiło, że każdy entuzjasta NLP zanurzył się w oceanie NLP i jego technik. Sprawdź następujący przykład, w którym próbujemy użyć dwóch technik stemplowania dostarczonych przez NLTK. Najpierw staramy się uzyskać rdzeń słowa „najszybszy”, używając PorterStemmer, a następnie SnowBallStemmer. Obydwa dają ten sam wynik – to znaczy „najszybszy” – ale kiedy wykonujemy lematyzację za pomocą metody spaCy, otrzymujemy „szybki” jako rdzeń słowa „najszybszy”, co jest bardziej znaczące i poprawne.
from nltk.stem.porter import *
from nltk.stem.snowball import SnowballStemmer
porter_stemmer = PorterStemmer()
snowball_stemmer = SnowballStemmer(“english”)
print(porter_stemmer.stem(“fastest”))
print(snowball_stemmer.stem(“fastest”))
fastest
fastest
Uwaga: przed próbą uruchomienia tego kodu upewnij się, że zainstalowałeś pakiet nltk przy użyciu pip3.
Ponieważ jesteś prawie świadomy tego, co robi stemming lub lematyzacja w NLP, powinieneś być w stanie zrozumieć, że kiedykolwiek spotkasz się z sytuacją, w której potrzebujesz rdzenia słowa, musisz tam przeprowadzić lematyzację. Na przykład często jest używany do budowy wyszukiwarek. Pewnie zastanawiałeś się, w jaki sposób Google wyświetla w wynikach wyszukiwania artykuły, które chciałeś uzyskać, nawet jeśli wyszukiwany tekst nie został poprawnie sformułowany. W tym miejscu posługujemy się lematyzacją. Wyobraź sobie, że wyszukujesz tekst: „Kiedy zostanie wydany kolejny sezon Gry o tron?” Załóżmy teraz, że wyszukiwarka dokonuje prostego dopasowywania częstotliwości słów w dokumencie, aby uzyskać wyniki wyszukiwania. W tym przypadku powyższe zapytanie prawdopodobnie nie będzie pasować do artykułu z podpisem „Data premiery Gry o Tron w następnym sezonie”. Jeśli przeprowadzimy lematyzację pierwotnego pytania przed dopasowaniem danych wejściowych do dokumentów, możemy uzyskać lepsze wyniki. Spróbujemy przetestować tę teorię również w nadchodzących sekcjach.