Stemming a lemmatizace s Python NLTK

Obsah:

Anonim

Co je to stonkování?

Stemming je druh normalizace slov. Normalizace je technika, při které se sada slov ve větě převádí do sekvence, aby se zkrátilo její vyhledávání. Slova, která mají stejný význam, ale mají určité variace podle kontextu nebo věty, jsou normalizována.

Jiným slovem je jedno kořenové slovo, ale existuje mnoho variant stejných slov. Například kořenové slovo je „jíst“ a jeho varianty jsou „jí, jí, jí a podobně“. Stejným způsobem můžeme pomocí Stemmingu najít kořen všech variací.

Například

He was riding.He was taking the ride.

Ve výše uvedených dvou větách je význam stejný, tj. Jezdecká činnost v minulosti. Člověk snadno pochopí, že oba významy jsou stejné. Ale u strojů jsou obě věty odlišné. Proto bylo obtížné převést jej do stejného datového řádku. V případě, že neposkytneme stejný soubor dat, stroj nedokáže předpovědět. Pro přípravu datové sady pro strojové učení je tedy nutné rozlišovat význam každého slova. A zde se používá stemming ke kategorizaci stejného typu dat získáním jeho kořenového slova.

Pojďme to implementovat pomocí programu Python. NLTK má algoritmus s názvem „PorterStemmer“. Tento algoritmus přijímá seznam tokenizovaného slova a vychází z něj v kořenovém slově.

Program pro porozumění Stemmingu

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

Vysvětlení kódu:

  • V NLTk je kmenový modul, který je importován. Pokud importujete celý modul, program bude těžký, protože obsahuje tisíce řádků kódů. Takže z celého modulu stonku jsme importovali pouze „PorterStemmer“.
  • Připravili jsme fiktivní seznam variačních dat stejného slova.
  • Vytvoří se objekt, který patří do třídy nltk.stem.porter.PorterStemmer.
  • Dále jsme to jeden po druhém předali PorterStemmeru pomocí smyčky „pro“. Nakonec jsme dostali výstupní kořenové slovo každého slova uvedeného v seznamu.

Z výše uvedeného vysvětlení lze také usoudit, že stemming je považován za důležitý krok předzpracování, protože odstranil nadbytečnost v datech a variace stejného slova. Ve výsledku jsou data filtrována, což pomůže při lepším tréninku strojů.

Nyní předáme celou větu a zkontrolujeme její chování jako výstup.

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ýstup:

helloguru99,youhavebuildaverigoodsiteandIlovevisityoursite

Vysvětlení kódu

  • Balíček PorterStemer se importuje ze stonku modulu
  • Importují se balíčky pro tokenizaci věty i slov
  • Je napsána věta, která má být tokenizována v dalším kroku.
  • V tomto kroku je implementována tokenizace slov.
  • Zde se vytvoří objekt pro PorterStemmer.
  • Smyčka se spouští a stopování každého slova se provádí pomocí objektu vytvořeného v kódovém řádku 5

Závěr:

Stemming je modul pro předzpracování dat. Anglický jazyk má mnoho variant jednoho slova. Tyto varianty vytvářejí nejednoznačnost v tréninku a predikci strojového učení. Chcete-li vytvořit úspěšný model, je důležité filtrovat taková slova a převést je na stejný typ sekvenovaných dat pomocí stemming. Jedná se také o důležitou techniku ​​k získání řádkových dat ze sady vět a odstranění nadbytečných dat známých také jako normalizace.

Co je to lemmatizace?

Lemmatizace je algoritmický proces hledání lemmatu slova v závislosti na jejich významu. Lemmatizace se obvykle týká morfologické analýzy slov, jejímž cílem je odstranit inflexní konce. Pomáhá při vracení základní nebo slovní formy slova, které je známé jako lemma. Metoda LLmatmatizace NLTK je založena na vestavěné morphové funkci WorldNet. Předzpracování textu zahrnuje jak pramenící, tak lemmatizaci. Mnoho lidí považuje tyto dva pojmy za matoucí. Někteří s nimi zacházejí stejně, ale je mezi nimi rozdíl. Lemmatizace je upřednostňována před první z níže uvedených důvodů.

Proč je Lemmatizace lepší než Stemming?

Algoritmus stonkování funguje tak, že odřízne příponu od slova. V širším smyslu řeže začátek nebo konec slova.

Lemmatizace je naopak silnější operací a bere v úvahu morfologickou analýzu slov. Vrátí lemma, které je základní formou všech jejích inflexních forem. K vytváření slovníků a hledání správné podoby slova jsou nutné hluboké jazykové znalosti. Stemming je obecná operace, zatímco lemmatizace je inteligentní operace, kde bude ve slovníku hledána správná forma. Lemmatizace tedy pomáhá při formování lepších funkcí strojového učení.

Kód pro rozlišení mezi Lemmatizací a Stemmingem

Zastavovací 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ýstup:

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ýstup:

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

Diskuse o výstupu:

Pokud hledáte studium a studium, výstup je stejný (studi), ale lemmatizer poskytuje jiné lemma pro studium tokenů pro studium i pro studium. Takže když potřebujeme vytvořit sadu funkcí pro trénování stroje, bylo by skvělé, kdyby byla upřednostňována lemmatizace.

Pouzdro Lemmatizer:

Lemmatizer minimalizuje nejednoznačnost textu. Ukázková slova jako kolo nebo jízdní kola jsou převedena na základní slovo kolo. V zásadě převede všechna slova, která mají stejný význam, ale odlišné zastoupení, do jejich základní podoby. Snižuje hustotu slov v daném textu a pomáhá při přípravě přesných funkcí pro cvičný stroj. Čím čistší budou data, tím inteligentnější a přesnější bude váš model strojového učení. Lemmatizerwill také šetří paměť i výpočetní náklady.

Příklad v reálném čase, který ukazuje použití lemmatizace Wordnetu a označování POS v Pythonu

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)

Vysvětlení kódu

  • Nejprve se importuje wordnet korpusové čtečky.
  • WordNetLemmatizer je importován z wordnetu
  • Tokenizace slov i části řeči jsou importovány z nltk
  • Výchozí slovník se importuje ze sbírek
  • Je vytvořen slovník, kde pos_tag (první písmeno) jsou klíčové hodnoty, jejichž hodnoty jsou mapovány s hodnotou ze slovníku wordnetu. Vzali jsme jediné první písmeno, protože ho použijeme později ve smyčce.
  • Text je psán a je tokenizován.
  • Vytvoří se objekt lemma_function, který bude použit uvnitř smyčky
  • Smyčka je spuštěna a lemmatize vezme dva argumenty, jeden je token a druhý je mapování pos_tag s hodnotou wordnet.

Výstup:

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

Lemmatizace má úzký vztah se slovníkem wordnetu, takže je důležité studovat toto téma, takže si toto ponecháme jako další téma