Stemming și lematizare în Python NLTK cu exemple
În ce este stemming și lematizare Python NLTK?
Stemming și lematizare in Python NLTK sunt tehnici de normalizare a textului pentru procesarea limbajului natural. Aceste tehnici sunt utilizate pe scară largă pentru preprocesarea textului. Diferența dintre stemming și lematizare este că stemming este mai rapid, deoarece taie cuvintele fără a cunoaște contextul, în timp ce lematizarea este mai lentă, deoarece cunoaște contextul cuvintelor înainte de procesare.
Ce este Stemming?
Pentru a putea reduce este o metodă de normalizare a cuvintelor în Procesarea limbajului natural. Este o tehnică în care un set de cuvinte dintr-o propoziție este convertit într-o secvență pentru a scurta căutarea acesteia. În această metodă, sunt normalizate cuvintele care au același sens dar au unele variații în funcție de context sau propoziție.
Cu un alt cuvânt, există un cuvânt rădăcină, dar există multe variații 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 Stemming in Python, 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ă activitatea 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 dificil să îl convertești în același rând de date. În cazul în care nu oferim același set de date, atunci mașina nu reușește să prezică. Prin urmare, este necesar să se diferențieze sensul 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 prin obținerea cuvântului său rădăcină.
Să implementăm asta cu a Python program.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 PorterStemmer e_words= ["wait", "waiting", "waited", "waits"] ps =PorterStemmer() for w in e_words: rootWord=ps.stem(w) print(rootWord)
producție:
wait wait wait wait
Explicația codului:
- 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ă inactivă a datelor de variație ale aceluiași cuvânt.
- Este creat un obiect care aparține clasei nltk.stem.porter.PorterStemmer.
- În plus, l-am transmis lui PorterStemmer unul câte unul folosind bucla „for”. Î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 de asemenea concluziona că stemming-ul este considerat un pas important de preprocesare deoarece a eliminat redundanța datelor ș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 transmitem o propoziție completă și verificăm comportamentul acesteia ca rezultat.
Program:
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)
ieșire:
hello guru99 , you have build a veri good site and I love visit your site
Explicația codului:
- Pachetul PorterStemer este importat din stem modulului
- Sunt importate pachete pentru tokenizarea propoziției, precum și a cuvintelor
- Se scrie o propoziție care urmează să fie simbolizată în pasul următor.
- Lematizarea care determină tokenizarea cuvântului este implementată în acest pas.
- Aici este creat un obiect pentru PorterStemmer.
- Bucla este rulată și ramificarea 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 instruirea ș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țiale 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 numele de normalizare.
Ce este lematizarea?
Lematizarea în NLTK este procesul algoritmic de găsire a lemei unui cuvânt în funcție de sensul și contextul acestuia. Lematizarea se referă de obicei la analiza morfologică a cuvintelor, care are ca scop eliminarea terminațiilor flexive. Ajută la returnarea formei de bază sau de dicționar a unui cuvânt cunoscut sub numele de lemă.
Metoda de lematizare NLTK se bazează pe funcția morph încorporată din WorldNet. Preprocesarea textului include atât derivarea, cât și lematizarea. Mulți oameni consideră cei doi termeni confuzi. Unii le tratează ca la fel, dar există o diferență între stemming și lematizare. Lematizarea este preferată față de prima din cauza motivului de mai jos.
De ce este mai bună lematizarea decât stemming?
Algoritmul stemming funcționează prin tăierea sufixului din cuvânt. Într-un sens mai larg, decupează fie începutul, fie sfârșitul cuvântului.
Dimpotrivă, lematizarea este o operație mai puternică și ia în considerare analiza morfologică a cuvintelor. Returnează lema care este forma de bază a tuturor formelor sale de flexiune. Sunt necesare cunoștințe lingvistice aprofundate pentru a crea dicționare și pentru a căuta forma potrivită a cuvântului. Stemming este o operație generală, în timp ce lematizarea este o operație inteligentă în care forma potrivită va fi căutată în dicționar. Prin urmare, lematizarea ajută la formarea mai bună masina de învățare caracteristici.
Cod pentru a distinge între lematizare și stemming
Cod de bază:
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)))
ieșire::
Stemming for studies is studi Stemming for studying is studi Stemming for cries is cri Stemming for cry is cri
Cod de lematizare:
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)))
ieșire:
Lemma for studies is study Lemma for studying is studying Lemma for cries is cry Lemma for cry is cry
Discuție despre ieșire
Dacă te uiți la bază pentru studii și studiu, rezultatul este același (studi), dar lematizatorul NLTK oferă lemă diferită pentru ambele simboluri, studiul pentru studii și studiul pentru studiu. Deci, atunci când trebuie să facem un set de funcții pentru a antrena mașina, ar fi grozav dacă se preferă lematizarea.
Cazul de utilizare a Lematizerului
Lematizatorul minimizează ambiguitatea textului. Exemple de cuvinte precum bicicletă sau biciclete sunt convertite în cuvântul de bază bicicletă. Practic, va converti toate cuvintele care au același sens, dar o reprezentare diferită la forma lor de bază. Reduce densitatea cuvintelor din textul dat și ajută la pregătirea caracteristicilor precise pentru mașina de antrenament. Mai curate datele, cu atât mai inteligent și mai precis va fi modelul dvs. de învățare automată. NLTK Lemmatizer va economisi, de asemenea, memorie, precum și costuri de calcul.
Exemplu în timp real care arată utilizarea lematizării Wordnet și a etichetării POS 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)
Explicarea codului
- În primul rând, este importat corpus reader wordnet.
- WordNetLemmatizer este importat din wordnet.
- Tokenizarea cuvântului, precum și părțile etichetei de vorbire sunt importate din nltk.
- Dicționarul implicit este importat din colecții.
- Dicționarul este creat unde pos_tag (prima literă) sunt valorile cheie ale căror valori sunt mapate cu valoarea din dicționarul wordnet. Am luat singura prima literă, așa cum o vom folosi mai târziu în buclă.
- Textul este scris și este simbolizat.
- Este creat obiectul lemma_function care va fi folosit în interiorul buclei.
- Loop este rulat și lematize va lua două argumente, unul este token și celălalt este o mapare a pos_tag cu valoare wordnet.
producție:
guru99 => guru99 is => be totally => totally new => new kind => kind of => of learning => learn experience => experience . => .
Python Lematizarea are o strânsă legătură cu dicționar wordnet, deci este esențial să studiem acest subiect, așa că îl păstrăm ca următor subiect.