Stemming and Lemmization with Python NLTK

Spisie treści:

Anonim

Co to jest Stemming?

Stemming to rodzaj normalizacji słów. Normalizacja to technika polegająca na przekształcaniu zestawu słów w zdaniu w sekwencję w celu skrócenia czasu wyszukiwania. Słowa, które mają to samo znaczenie, ale różnią się w zależności od kontekstu lub zdania, są znormalizowane.

Innymi słowy, istnieje jedno słowo źródłowe, ale istnieje wiele odmian tych samych słów. Na przykład głównym słowem jest „jeść”, a jego odmiany to „zjada, je, zjada i tym podobne”. W ten sam sposób za pomocą Stemming możemy znaleźć słowo źródłowe każdej odmiany.

Na przykład

He was riding.He was taking the ride.

W powyższych dwóch zdaniach znaczenie jest takie samo, tj. Aktywność jeździecka w przeszłości. Człowiek może łatwo zrozumieć, że oba znaczenia są takie same. Ale w przypadku maszyn oba zdania są różne. W związku z tym przekształcenie go w ten sam wiersz danych stało się trudne. W przypadku, gdy nie dostarczymy tego samego zestawu danych, maszyna nie przewiduje. Dlatego konieczne jest zróżnicowanie znaczenia każdego słowa, aby przygotować zbiór danych do uczenia maszynowego. W tym przypadku rymowanie służy do kategoryzowania tego samego typu danych, pobierając jego słowo źródłowe.

Zaimplementujmy to za pomocą programu w Pythonie. NLTK ma algorytm o nazwie „PorterStemmer”. Ten algorytm akceptuje listę słów tokenizowanych i tworzy z niej słowo źródłowe.

Program do zrozumienia Stemming

from nltk.stem import PorterStemmere_words= ["wait", "waiting", "waited", "waits"]ps =PorterStemmer()for w in e_words:rootWord=ps.stem(w)print(rootWord)

Dane wyjściowe :

waitwaitwaitwait

Objaśnienie kodu:

  • W NLTk jest importowany moduł macierzysty. Jeśli zaimportujesz cały moduł, program stanie się ciężki, ponieważ zawiera tysiące wierszy kodów. Dlatego z całego modułu macierzystego zaimportowaliśmy tylko plik „PorterStemmer”.
  • Przygotowaliśmy fikcyjną listę danych odmian tego samego słowa.
  • Tworzony jest obiekt należący do klasy nltk.stem.porter.PorterStemmer.
  • Następnie przekazaliśmy go do PorterStemmer jeden po drugim, używając pętli „for”. Na koniec otrzymaliśmy wyjściowe słowo główne każdego słowa wymienionego na liście.

Z powyższego wyjaśnienia można również wywnioskować, że pochodna jest uważana za ważny etap przetwarzania wstępnego, ponieważ usunęła nadmiarowość w danych i różnice w tym samym słowie. W rezultacie dane są filtrowane, co pomoże w lepszym szkoleniu maszyn.

Teraz przekazujemy całe zdanie i sprawdzamy jego zachowanie jako wynik.

Program:

from nltk.stem import PorterStemmerfrom nltk.tokenize import sent_tokenize, word_tokenizesentence="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)

Wynik:

helloguru99,youhavebuildaverigoodsiteandIlovevisityoursite

Objaśnienie kodu

  • Pakiet PorterStemer jest importowany z pnia modułu
  • Importowane są pakiety do tokenizacji zdań oraz słów
  • Zostaje zapisane zdanie, które ma zostać poddane tokenizacji w następnym kroku.
  • W tym kroku zaimplementowano tokenizację słowa.
  • Tutaj tworzony jest obiekt dla PorterStemmer.
  • Pętla jest uruchamiana, a wyprowadzanie każdego słowa odbywa się za pomocą obiektu utworzonego w linii kodu 5

Wniosek:

Stemming to moduł do wstępnego przetwarzania danych. Język angielski ma wiele odmian jednego słowa. Te różnice powodują niejednoznaczność w szkoleniu i prognozowaniu uczenia maszynowego. Aby stworzyć udany model, konieczne jest przefiltrowanie takich słów i przekonwertowanie ich na ten sam typ danych sekwencyjnych przy użyciu podstawiania. Jest to również ważna technika uzyskiwania danych wierszowych ze zbioru zdań i usuwania zbędnych danych, zwana również normalizacją.

Co to jest lematyzacja?

Lematyzacja to algorytmiczny proces znajdowania lematu słowa w zależności od jego znaczenia. Lemmatyzacja zwykle odnosi się do analizy morfologicznej słów, której celem jest usunięcie końcówek fleksyjnych. Pomaga w zwróceniu bazowej lub słownikowej formy słowa, która jest znana jako lemat. Metoda NLTK Lemmatization jest oparta na wbudowanej funkcji morph WorldNet. Wstępne przetwarzanie tekstu obejmuje zarówno wyprowadzanie tekstu, jak i lematyzację. Wiele osób uważa te dwa terminy za mylące. Niektórzy traktują je tak samo, ale istnieje różnica między nimi. Lemmatyzacja jest preferowana w stosunku do pierwszego z poniższych powodów.

Dlaczego lematyzacja jest lepsza niż stemming?

Algorytm stemming działa poprzez wycinanie przyrostka ze słowa. W szerszym sensie odcina początek lub koniec słowa.

Wręcz przeciwnie, lematyzacja jest operacją o większej mocy i bierze pod uwagę analizę morfologiczną słów. Zwraca lemat, który jest podstawą wszystkich jego form fleksyjnych. Do tworzenia słowników i szukania odpowiedniej formy wyrazu potrzebna jest dogłębna znajomość języka. Stemming to operacja ogólna, a lematyzacja to operacja inteligentna, w której odpowiednia forma będzie przeszukiwana w słowniku. Dlatego lematyzacja pomaga w tworzeniu lepszych funkcji uczenia maszynowego.

Kod umożliwiający rozróżnienie między Lemmatyzacją a Stemmingiem

Kod źródłowy

import nltkfrom nltk.stem.porter import PorterStemmerporter_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)))

Wynik:

Stemming for studies is studiStemming for studying is studiStemming for cries is criStemming for cry is cri

Kod lematyzacyjny

import nltkfrom nltk.stem import WordNetLemmatizerwordnet_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)))

Wynik:

Lemma for studies is studyLemma for studying is studyingLemma for cries is cryLemma for cry is cry

Omówienie wyników:

Jeśli szukasz pochodzenia na studia i studiowanie, wynik jest taki sam (studi), ale lemmatizer zapewnia inny lemat zarówno dla tokenów studiów na studia, jak i studiów na studia. Więc kiedy musimy stworzyć zestaw funkcji do trenowania maszyny, byłoby świetnie, gdyby preferowana była lematyzacja.

Przypadek użycia Lemmatizer:

Lemmatizer minimalizuje niejednoznaczność tekstu. Przykładowe słowa, takie jak rower lub rowery, są konwertowane na słowo podstawowe rower. Zasadniczo konwertuje wszystkie słowa mające to samo znaczenie, ale inną reprezentację, do ich podstawowej formy. Zmniejsza gęstość słów w podanym tekście i pomaga w przygotowaniu dokładnych funkcji maszyny treningowej. Czystsze dane, tym bardziej inteligentny i dokładny będzie Twój model uczenia maszynowego. Lemmatizerwill oszczędza również pamięć, a także koszty obliczeniowe.

Przykład czasu rzeczywistego pokazujący użycie lematyzacji Wordnet i tagowania POS w Pythonie

from nltk.corpus import wordnet as wnfrom nltk.stem.wordnet import WordNetLemmatizerfrom nltk import word_tokenize, pos_tagfrom collections import defaultdicttag_map = defaultdict(lambda : wn.NOUN)tag_map['J'] = wn.ADJtag_map['V'] = wn.VERBtag_map['R'] = wn.ADVtext = "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)

Objaśnienie kodu

  • Po pierwsze, importowany jest wordnet czytnika korpusu.
  • WordNetLemmatizer jest importowany z wordnet
  • Tokenizacja słów oraz części tagu mowy są importowane z nltk
  • Słownik domyślny jest importowany z kolekcji
  • Słownik jest tworzony, gdzie pos_tag (pierwsza litera) to wartości kluczy, których wartości są odwzorowywane na wartości ze słownika wordnet. Wzięliśmy jedyną pierwszą literę, której użyjemy później w pętli.
  • Tekst jest napisany i tokenizowany.
  • Tworzony jest obiekt lemma_function, który będzie używany wewnątrz pętli
  • Pętla jest uruchamiana, a lemmatize pobierze dwa argumenty, jeden jest tokenem, a drugi jest mapowaniem pos_tag z wartością wordnet.

Wynik:

guru99 => guru99is => betotally => totallynew => newkind => kindof => oflearning => learnexperience => experience. => .

Lemmatyzacja ma ścisły związek ze słownikiem wordnet, dlatego konieczne jest przestudiowanie tego tematu, więc pozostawiamy to jako następny temat