Stemming i lematyzacja w Python NLTK z przykładami
⚡ Inteligentne podsumowanie
Stemming i lematyzacja to techniki normalizacji tekstu w Python NLTK redukuje odmiany słów do wspólnej bazy, gdzie rdzeniowe przyrostki „crows” szybko tworzą wyrazy bez kontekstu, a lematyzacja zwraca prawdziwe słowo słownikowe, wykorzystując znaczenie.
Na czym polega Stemming i Lematyzacja Python NLTK?
Pochodzenie i lemmatyzacja in Python NLTK to techniki normalizacji tekstu wykorzystywane w przetwarzaniu języka naturalnego. Techniki te są szeroko stosowane do wstępnego przetwarzania tekstu. Różnica między stemmingiem a lematyzacją polega na tym, że stemming jest szybszy, ponieważ wycina słowa bez znajomości kontekstu, podczas gdy lematyzacja jest wolniejsza, ponieważ zna kontekst słów przed przetworzeniem.
Co to jest Stemming?
Przybitka jest metodą normalizacji słów w Przetwarzanie języka naturalnego. Jest to technika, w której zestaw słów w zdaniu jest przekształcany w sekwencję, aby skrócić wyszukiwanie. W tej metodzie słowa o tym samym znaczeniu, ale z pewnymi wariantami w zależności od kontekstu lub zdania, są normalizowane. Innymi słowy, istnieje jeden rdzeń, ale istnieje wiele wariantów tego samego słowa. Na przykład rdzeń to „eat”, a jego warianty to „eats”, eating, eaten itd.”. W ten sam sposób, z pomocą stemmingu w Python, możemy znaleźć rdzeń każdej odmiany.
Na przykład:
He was riding. He was taking the ride.
W powyższych dwóch zdaniach znaczenie jest takie samo, czyli dotyczy jazdy konnej w przeszłości. Człowiek z łatwością zrozumie, że oba znaczenia są takie same. Jednak dla maszyn oba zdania są różne. W związku z tym trudno jest przekształcić je w ten sam wiersz danych. Jeśli nie dostarczymy tego samego zestawu danych, maszyna nie będzie w stanie przewidzieć. Konieczne jest zatem rozróżnienie znaczenia każdego słowa, aby przygotować zbiór danych do uczenia maszynowego. W tym przypadku stemming służy do kategoryzowania tego samego typu danych poprzez wyprowadzenie jego słowa kluczowego.
Wdrażajmy to za pomocą Python program. NLTK ma algorytm o nazwie Porter StemmerTen algorytm akceptuje listę tokenizowanych słów i przekształca je w słowa rdzeniowe.
Program do zrozumienia Stemmingu
from nltk.stem import PorterStemmer e_words= ["wait", "waiting", "waited", "waits"] ps =PorterStemmer() for w in e_words: rootWord=ps.stem(w) print(rootWord)
Wyjście:
wait wait wait wait
Code Wyjaśnienie:
- W NLTK znajduje się moduł STEM, który został zaimportowany. Jeśli zaimportujemy cały moduł, program stanie się ciężki, ponieważ zawiera tysiące linii kodu. Dlatego z całego modułu STEM zaimportowaliśmy tylko „PorterStemmer”.
- Przygotowaliśmy fikcyjną listę danych o odmianach tego samego słowa.
- Tworzony jest obiekt należący do klasy nltk.stem.porter.PorterStemmer.
- Przekazaliśmy je do PorterStemmera pojedynczo, używając pętli „for”. Na koniec otrzymaliśmy rdzeń każdego słowa wymienionego na liście.
Z powyższego wynika, że stemming jest ważnym etapem wstępnego przetwarzania, ponieważ usuwa redundancję i zmienność w obrębie tego samego słowa. W rezultacie dane są filtrowane, co pomaga w lepszym szkoleniu maszyn. Teraz przekazujemy pełne zdanie i sprawdzamy jego wynik.
from nltk.stem import PorterStemmer from nltk.tokenize import sent_tokenize, word_tokenize sentence="Hello Guru99, You have to build a very good site and I love visiting your site." words = word_tokenize(sentence) ps = PorterStemmer() for w in words: rootWord=ps.stem(w) print(rootWord)
Wyjście:
hello
guru99
,
you
have
build
a
veri
good
site
and
I
love
visit
your
site
Code Wyjaśnienie:
- Pakiet PorterStemmer jest importowany z modułu STEM.
- Importowane są pakiety do tokenizacji zdań i słów.
- Zapisywane jest zdanie, które w kolejnym kroku należy tokenizować.
- Tutaj tworzony jest obiekt dla PorterStemmer.
- Uruchomiona zostaje pętla, a rdzeniowanie każdego słowa odbywa się przy użyciu obiektu utworzonego w wierszu kodu 5.
Krótko mówiąc, stemming to moduł wstępnego przetwarzania danych. Język angielski ma wiele wariantów jednego słowa, co powoduje niejednoznaczność w uczeniu maszynowym i przewidywaniu. Aby zbudować skuteczny model, kluczowe jest filtrowanie takich słów do tych samych danych sekwencyjnych za pomocą stemmingu. Jest to również znane jako normalizacja.
Co to jest lematyzacja?
Lemmatyzacja W NLTK to algorytmiczny proces znajdowania lematu słowa w zależności od jego znaczenia i kontekstu. Lematyzacja zazwyczaj odnosi się do analizy morfologicznej słów, której celem jest usunięcie końcówek fleksyjnych. Pomaga ona w zwróceniu formy bazowej lub słownikowej słowa, zwanej lematem. Metoda lematyzacji w NLTK opiera się na wbudowanej funkcji morphingu w WordNet. Wstępne przetwarzanie tekstu obejmuje zarówno stemming, jak i lematyzację. Wiele osób uważa te dwa terminy za mylące. Niektórzy traktują je jako to samo, ale istnieje różnica między stemmingiem a lematyzacją. Lematyzacja jest preferowana z poniższego powodu.
Dlaczego lematyzacja jest lepsza od Stemmingu?
Algorytm stemmingu działa poprzez odcięcie sufiksu ze słowa. W szerszym sensie, odcina początek lub koniec słowa. Z kolei lematyzacja jest operacją bardziej zaawansowaną, uwzględniającą analizę morfologiczną słów. Zwraca lemat, który jest formą bazową wszystkich form fleksyjnych. Do tworzenia słowników i wyszukiwania właściwej formy słowa wymagana jest dogłębna wiedza lingwistyczna. Stemming to operacja ogólna, podczas gdy lematyzacja to operacja inteligentna, polegająca na wyszukiwaniu właściwej formy w słowniku. Zatem lematyzacja pomaga w tworzeniu lepszych uczenie maszynowe funkcje.
Code rozróżniać lematyzację i stemming
Przybitka Code:
import nltk from nltk.stem.porter import PorterStemmer porter_stemmer = PorterStemmer() text = "studies studying cries cry" tokenization = nltk.word_tokenize(text) for w in tokenization: print("Stemming for {} is {}".format(w,porter_stemmer.stem(w)))
Wyjście:
Stemming for studies is studi Stemming for studying is studi Stemming for cries is cri Stemming for cry is cri
Lemmatyzacja Code:
import nltk from nltk.stem import WordNetLemmatizer wordnet_lemmatizer = WordNetLemmatizer() text = "studies studying cries cry" tokenization = nltk.word_tokenize(text) for w in tokenization: print("Lemma for {} is {}".format(w, wordnet_lemmatizer.lemmatize(w)))
Wyjście:
Lemma for studies is study Lemma for studying is studying Lemma for cries is cry Lemma for cry is cry
Omówienie wyników
Jeśli spojrzymy na stemming dla studies i teaching, wynik jest taki sam (studi), ale lematyzator NLTK generuje inny lemat dla obu tokenów: teaching dla studies i teaching dla teaching. Dlatego gdy potrzebujemy stworzyć zestaw cech do trenowania maszyny, lematyzacja byłaby idealnym rozwiązaniem.
Przypadek użycia Lemmatizera
Lemmatizer minimalizuje niejednoznaczność tekstu. Słowa takie jak „rower” lub „rowery” są konwertowane na słowo bazowe „rower”. Konwertuje wszystkie słowa o tym samym znaczeniu, ale o innej reprezentacji, na ich formę bazową, zmniejszając gęstość słów i…ping Przygotuj dokładne cechy do trenowania maszyny. Im czystsze dane, tym dokładniejszy będzie Twój model uczenia maszynowego. Lemmatizer NLTK oszczędza również pamięć i zmniejsza koszty obliczeniowe.
Przykład w czasie rzeczywistym pokazujący zastosowanie lematyzacji WordNet i tagowania POS w Python:
from nltk.corpus import wordnet as wn from nltk.stem.wordnet import WordNetLemmatizer from nltk import word_tokenize, pos_tag from collections import defaultdict tag_map = defaultdict(lambda : wn.NOUN) tag_map['J'] = wn.ADJ tag_map['V'] = wn.VERB tag_map['R'] = wn.ADV text = "guru99 is a totally new kind of learning experience." tokens = word_tokenize(text) lemma_function = WordNetLemmatizer() for token, tag in pos_tag(tokens): lemma = lemma_function.lemmatize(token, tag_map[tag[0]]) print(token, "=>", lemma)
Wyjście:
guru99 => guru99 is => be totally => totally new => new kind => kind of => of learning => learn experience => experience . => .
Code Wyjaśnienie:
- Importowany jest czytnik korpusu WordNet i moduł WordNetLemmatizer importowany z WordNet.
- Tokenizacja słów i znaczniki części mowy są importowane z nltk, a słownik domyślny z kolekcji.
- Tworzony jest słownik, w którym pierwsza litera znacznika pos_tag stanowi klucz, mapowany na wartość ze słownika Wordnet.
- Tekst zostaje zapisany i podzielony na tokeny, a następnie tworzony jest obiekt lemma_function przeznaczony do użycia wewnątrz pętli.
- Pętla jest uruchamiana, a funkcja lematize przyjmuje dwa argumenty: token i mapęping pos_tag z wartością wordnet.
Python Lematyzacja ma ścisły związek z Słownik WordNet, dlatego też tak ważne jest, aby zgłębić ten temat.

