Stemming a lemmatizácia s Python NLTK

Obsah:

Anonim

Čo je to stonanie?

Stemming je druh normalizácie slov. Normalizácia je technika, pri ktorej sa množina slov vo vete prevádza do postupnosti, aby sa skrátilo jej vyhľadávanie. Normalizujú sa slová, ktoré majú rovnaký význam, ale môžu sa meniť podľa kontextu alebo vety.

Ďalším slovom je jedno koreňové slovo, ale existuje veľa variácií tých istých slov. Napríklad koreňové slovo je „jesť“ a jeho variácie sú „jesť, jesť, jesť a podobne“. Rovnakým spôsobom pomocou nástroja Stemming nájdeme koreň všetkých variácií.

Napríklad

He was riding.He was taking the ride.

Vo vyššie uvedených dvoch vetách je význam rovnaký, tj jazdecká činnosť v minulosti. Človek ľahko pochopí, že oba významy sú rovnaké. Ale pre stroje sú obe vety odlišné. Preto bolo ťažké ho previesť do rovnakého údajového riadku. Ak neposkytneme rovnaký súbor údajov, stroj nedokáže predvídať. Preto je potrebné rozlišovať význam každého slova, aby sa pripravila množina údajov na strojové učenie. A tu sa stemming používa na kategorizáciu rovnakého typu údajov získaním koreňového slova.

Poďme to implementovať pomocou programu Python. NTLK má algoritmus s názvom „PorterStemmer“. Tento algoritmus prijíma zoznam tokenizovaných slov a vytvára ich z koreňového slova.

Program na pochopenie stonky

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

Výstup :

waitwaitwaitwait

Vysvetlenie kódu:

  • V NLTk je kmeňový modul, ktorý sa importuje. Ak importujete celý modul, program sa stane ťažkým, pretože obsahuje tisíce riadkov kódov. Takže z celého kmeňového modulu sme importovali iba „PorterStemmer“.
  • Pripravili sme fiktívny zoznam údajov o variáciách toho istého slova.
  • Vytvorí sa objekt, ktorý patrí do triedy nltk.stem.porter.PorterStemmer.
  • Ďalej sme to jeden po druhom odovzdali PorterStemmeru pomocou slučky „pre“. Nakoniec sme dostali výstupné koreňové slovo každého slova uvedeného v zozname.

Z vyššie uvedeného vysvetlenia tiež možno vyvodiť záver, že odstránenie sa považuje za dôležitý krok predspracovania, pretože odstránilo nadbytočnosť údajov a variácie toho istého slova. Vo výsledku sú dáta filtrované, čo pomôže pri lepšom zaškolení strojov.

Teraz odovzdáme celú vetu a skontrolujeme jej správanie ako výstupu.

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)

Výkon:

helloguru99,youhavebuildaverigoodsiteandIlovevisityoursite

Vysvetlenie kódu

  • Balík PorterStemer sa importuje z kmeňa modulu
  • Dovážajú sa balíky na tokenizáciu vety i slov
  • Napíše sa veta, ktorá sa má tokenizovať v ďalšom kroku.
  • V tomto kroku sa implementuje tokenizácia slov.
  • Tu sa vytvorí objekt pre PorterStemmer.
  • Spustí sa slučka a plynutie každého slova sa uskutoční pomocou objektu vytvoreného v kódovom riadku 5

Záver:

Stemming je modul na predspracovanie údajov. Anglický jazyk má veľa variácií jedného slova. Tieto variácie vytvárajú nejednoznačnosť vo výcviku a predpovedaní strojového učenia. Pre vytvorenie úspešného modelu je nevyhnutné filtrovať tieto slová a prevádzať ich na rovnaký typ sekvenovaných dát pomocou stemming. Toto je tiež dôležitá technika na získanie údajov o riadkoch zo sady viet a odstránenie nadbytočných údajov známych aj ako normalizácia.

Čo je to lemmatizácia?

Lemmatizácia je algoritmický proces hľadania lemmy slova v závislosti od ich významu. Lemmatizácia sa zvyčajne týka morfologickej analýzy slov, ktorej cieľom je odstrániť inflexné konce. Pomáha pri vrátení základnej alebo slovníkovej formy slova, ktoré je známe ako lemma. Metóda LLmatmatizácie NLTK je založená na zabudovanej morfnej funkcii WorldNet. Predbežné spracovanie textu zahŕňa sloganovanie aj lemmatizáciu. Mnoho ľudí považuje tieto dva pojmy za zmätočné. Niektoré s nimi zaobchádzajú rovnako, ale je medzi nimi rozdiel. Lemmatizácia je uprednostňovaná pred prvou z týchto dôvodov.

Prečo je lemmatizácia lepšia ako stonka?

Algoritmus zastavenia funguje tak, že oddeľuje príponu od slova. V širšom zmysle slova sa odsekáva na začiatku alebo na konci slova.

Lemmatizácia je naopak silnejšou operáciou a zohľadňuje morfologickú analýzu slov. Vráti lemmu, ktorá je základným tvarom všetkých jej inflexných foriem. Na vytvorenie slovníkov a hľadanie správnej formy slova sú potrebné hlboké jazykové znalosti. Stemming je všeobecná operácia, zatiaľ čo lemmatizácia je inteligentná operácia, kde sa v slovníku bude hľadať správna forma. Preto lemmatizácia pomáha pri formovaní lepších funkcií strojového učenia.

Kód na rozlíšenie medzi lemmatizáciou a stonkou

Kmeňový kód

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)))

Výkon:

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

Lemmatizačný kód

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)))

Výkon:

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

Diskusia k výstupu:

Ak hľadáte východiská pre štúdium a štúdium, výstup je rovnaký (studi), ale lemmatizer poskytuje odlišné lemma pre štúdium tokenov pre štúdium aj pre štúdium. Takže keď potrebujeme vytvoriť sadu funkcií na trénovanie stroja, bolo by skvelé, keby sa uprednostnila lemmatizácia.

Prípad použitia Lemmatizéra:

Lemmatizer minimalizuje nejednoznačnosť textu. Vzorové slová ako bicykel alebo bicykle sa prevedú na základné slovo bicykel. V zásade prevedie všetky slová, ktoré majú rovnaký význam, ale rozdielne zastúpenie, do základnej podoby. Znižuje hustotu slov v danom texte a pomáha pri príprave presných funkcií výcvikového zariadenia. Čím budú údaje čistejšie, tým inteligentnejší a presnejší bude váš model strojového učenia. Lemmatizerwill tiež šetrí pamäť, ako aj výpočtové náklady.

Príklad v reálnom čase ukazujúci použitie lemmatizácie Wordnetu a označovania POS v Pythone

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)

Vysvetlenie kódu

  • Najskôr sa naimportuje wordnet čítačky korpusu.
  • WordNetLemmatizer sa importuje z wordnetu
  • Tokenizácia slova, ako aj časti rečovej značky sa importujú z súboru nltk
  • Predvolený slovník sa importuje zo zbierok
  • Vytvorí sa slovník, kde pos_tag (prvé písmeno) sú kľúčové hodnoty, ktorých hodnoty sú mapované s hodnotou zo slovníka wordnet. Vzali sme jediné prvé písmeno, pretože ho použijeme neskôr v cykle.
  • Text je napísaný a tokenizovaný.
  • Vytvorí sa objekt lemma_function, ktorý sa použije vo vnútri cyklu
  • Loop je spustený a lemmatize bude mať dva argumenty, jeden je token a druhý je mapovanie pos_tag s hodnotou wordnet.

Výkon:

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

Lemmatizácia úzko súvisí so slovníkom wordnetu, takže je nevyhnutné študovať túto tému, preto si túto tému nechávame ako ďalšiu.