Stemming și Lemmatization cu Python NLTK

Cuprins:

Anonim

Ce este Stemming?

Stemming-ul este un fel de normalizare pentru cuvinte. Normalizarea este o tehnică în care un set de cuvinte dintr-o propoziție sunt convertite într-o secvență pentru a scurta căutarea. Cuvintele care au același înțeles, dar au unele variații în funcție de context sau propoziție, sunt normalizate.

Într-un alt cuvânt, există un cuvânt rădăcină, dar există multe variante ale acelorași cuvinte. De exemplu, cuvântul rădăcină este „mănâncă” și variațiile sale sunt „mănâncă, mănâncă, mănâncă și așa”. În același mod, cu ajutorul lui Stemming, putem găsi cuvântul rădăcină al oricăror variații.

De exemplu

He was riding.He was taking the ride.

În cele două propoziții de mai sus, sensul este același, adică activitate de călărie în trecut. Un om poate înțelege cu ușurință că ambele sensuri sunt aceleași. Dar pentru mașini, ambele propoziții sunt diferite. Astfel a devenit greu să-l convertiți în același rând de date. În cazul în care nu furnizăm același set de date, atunci mașina nu reușește să prezică. Deci, este necesar să diferențiem semnificația fiecărui cuvânt pentru a pregăti setul de date pentru învățarea automată. Și aici stemming este folosit pentru a clasifica același tip de date obținând cuvântul său rădăcină.

Să implementăm acest lucru cu un program Python.NLTK are un algoritm numit „PorterStemmer”. Acest algoritm acceptă lista de cuvinte tokenizate și o transformă în cuvânt rădăcină.

Program pentru înțelegerea Stemming

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

Ieșire :

waitwaitwaitwait

Explicatie cod:

  • Există un modul stem în NLTk care este importat. Dacă importați modulul complet, atunci programul devine greu deoarece conține mii de linii de coduri. Deci, din întregul modul stem, am importat doar „PorterStemmer”.
  • Am pregătit o listă falsă a datelor de variație ale aceluiași cuvânt.
  • Se creează un obiect care aparține clasei nltk.stem.porter.PorterStemmer.
  • Mai mult, l-am transmis PorterStemmer unul câte unul folosind bucla „pentru”. În cele din urmă, am obținut cuvântul rădăcină de ieșire pentru fiecare cuvânt menționat în listă.

Din explicația de mai sus, se poate concluziona, de asemenea, că derivarea este considerată ca un pas important de preprocesare, deoarece a eliminat redundanța în date și variațiile din același cuvânt. Ca rezultat, datele sunt filtrate, ceea ce va ajuta la o mai bună pregătire a mașinii.

Acum trecem o propoziție completă și verificăm comportamentul acesteia ca ieșire.

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)

Ieșire:

helloguru99,youhavebuildaverigoodsiteandIlovevisityoursite

Explicarea codului

  • Pachetul PorterStemer este importat din stemul modulului
  • Sunt importate pachete pentru simbolizarea propoziției, precum și cuvinte
  • Se scrie o propoziție care urmează a fi simbolizată în pasul următor.
  • Tokenizarea cuvântului este implementată în acest pas.
  • Aici este creat un obiect pentru PorterStemmer.
  • Bucla este rulată și derivarea fiecărui cuvânt se face folosind obiectul creat în linia de cod 5

Concluzie:

Stemming este un modul de preprocesare a datelor. Limba engleză are multe variante ale unui singur cuvânt. Aceste variații creează ambiguitate în pregătirea și predicția învățării automate. Pentru a crea un model de succes, este vital să filtrați astfel de cuvinte și să convertiți la același tip de date secvențiate folosind stemming. De asemenea, aceasta este o tehnică importantă pentru a obține date de rând dintr-un set de propoziții și eliminarea datelor redundante cunoscute și sub denumirea de normalizare.

Ce este Lematizarea?

Lematizarea este procesul algoritmic de a găsi lema unui cuvânt în funcție de semnificația lor. Lematizarea se referă de obicei la analiza morfologică a cuvintelor, care are ca scop eliminarea desinențelor flexive. Ajută la returnarea formei de bază sau a dicționarului unui cuvânt, cunoscut sub numele de lemă. Metoda NLTK de lematizare se bazează pe funcția de morph încorporată a WorldNet. Preprocesarea textului include atât stemming cât și lematizarea. Mulți oameni consideră cei doi termeni confuzi. Unii le tratează la fel, dar există o diferență între ambele. Lematizarea este preferată față de prima datorită motivului de mai jos.

De ce Lemmatizarea este mai bună decât Stemming?

Algoritmul de derulare funcționează prin tăierea sufixului din cuvânt. Într-un sens mai larg, taie fie începutul, fie sfârșitul cuvântului.

Dimpotrivă, Lematizarea este o operație mai puternică și ia în considerare analiza morfologică a cuvintelor. Întoarce lema, care este forma de bază a tuturor formelor sale flexive. Sunt necesare cunoștințe lingvistice aprofundate pentru a crea dicționare și pentru a căuta forma corectă a cuvântului. Stemming-ul este o operație generală, în timp ce lematizarea este o operație inteligentă în care forma corectă va fi căutată în dicționar. Prin urmare, lematizarea ajută la formarea unor caracteristici mai bune de învățare automată.

Cod pentru a distinge între Lemmatizare și Stemming

Cod de derulare

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

Ieșire:

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

Cod de lematizare

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

Ieșire:

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

Discutarea rezultatului:

Dacă te uiți la studii și la studii, rezultatul este același (studi), dar lemmatizer oferă o lemă diferită atât pentru jetoanele studiate pentru studii, cât și pentru studii. Deci, atunci când trebuie să facem set de caracteristici pentru a antrena mașina, ar fi minunat dacă se preferă lematizarea.

Utilizați cazul Lemmatizer:

Lemmatizer minimizează ambiguitatea textului. Exemple de cuvinte precum bicicletă sau biciclete sunt convertite în cuvânt de bază bicicletă. Practic, va converti toate cuvintele care au același sens, dar o reprezentare diferită la forma lor de bază. Reduce densitatea cuvântului din textul dat și ajută la pregătirea caracteristicilor exacte pentru aparatul de antrenament. Datele sunt mai curate, cu atât mai inteligent și mai precis va fi modelul dvs. de învățare automată. Lemmatizer va economisi, de asemenea, memorie, precum și costuri de calcul.

Exemplu în timp real care arată utilizarea Wordnet Lemmatization și POS Tagging în Python

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)

Explicarea codului

  • În primul rând, este importat wordnet-ul cititorului de corpus.
  • WordNetLemmatizer este importat din wordnet
  • Word tokenize, precum și părți ale etichetei de vorbire sunt importate din nltk
  • Dicționarul implicit este importat din colecții
  • Dicționarul este creat în cazul în care pos_tag (prima literă) sunt valorile cheie ale căror valori sunt mapate cu valoarea din dicționarul wordnet. Am luat singura primă literă, deoarece o vom folosi mai târziu în buclă.
  • Textul este scris și este simbolizat.
  • Obiectul lemma_function este creat, care va fi utilizat în interiorul buclei
  • Bucla este rulată și lemmatize va lua două argumente unul este token și altul este o mapare a pos_tag cu valoare wordnet.

Ieșire:

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

Lematizarea are o relație strânsă cu dicționarul wordnet, deci este esențial să studiezi acest subiect, așa că îl păstrăm ca subiect următor