Stemming și lematizare în Python NLTK cu exemple
⚡ Rezumat inteligent
Stemming-ul și lematizarea sunt tehnici de normalizare a textului în Python NLTK care reduce variațiile cuvintelor la o bază comună, unde radicalizarea generează sufixe rapid fără context, iar lematizarea returnează un cuvânt real din dicționar folosind sensul.

Î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-ul este mai rapid deoarece elimină cuvinte 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 naturalEste o tehnică prin care un set de cuvinte dintr-o propoziție este convertit într-o secvență pentru a scurta căutarea. În această metodă, cuvintele care au același înțeles, dar cu unele variații în funcție de context sau propoziție, sunt normalizate. Cu alte cuvinte, există o singură rădăcină, dar există mai multe variații ale aceluiași cuvânt. De exemplu, rădăcina cuvântului este „eat” (a mânca), iar variațiile sale sunt „eats”, eating, eated și așa mai departe”. În același mod, cu ajutorul stemming-ului (a folosi stemming în...) Python, putem găsi rădăcina cuvântului al oricărei variante.
De exemplu:
He was riding. He was taking the ride.
În cele două propoziții de mai sus, sensul este același, adică o 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. Prin urmare, devine dificil să le convertim în același rând de date. Dacă nu furnizăm același set de date, atunci mașina nu reușește să prezică. Prin urmare, este necesar să diferențiem sensul fiecărui cuvânt pentru a pregăti setul de date pentru învățarea automată. Aici, stemming-ul este utilizat pentru a clasifica același tip de date prin obținerea cuvântului rădăcină.
Să implementăm acest lucru cu un Python program. NLTK are un algoritm numit PorterStemmerAcest algoritm acceptă lista de cuvinte tokenizate și le transformă în cuvinte 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)
ieșire:
wait wait wait wait
Code Explicaţie:
- Există un modul stem în NLTK care este importat. Dacă importați modulul complet, programul devine greu, deoarece conține mii de linii de cod. Așadar, din întregul modul stem, am importat doar „PorterStemmer”.
- Am pregătit o listă inactivă a datelor de variație ale aceluiași cuvânt.
- Se creează un obiect care aparține clasei nltk.stem.porter.PorterStemmer.
- Le-am transmis lui PorterStemmer pe rând folosind o buclă „for”. În final, am obținut rădăcina fiecărui cuvânt menționat în listă.
Din cele de mai sus, stemming-ul este o etapă importantă de preprocesare, deoarece elimină redundanța și variațiile aceluiași cuvânt. Drept urmare, datele sunt filtrate, ceea ce ajută la o mai bună instruire a mașinii. Acum transmitem o propoziție completă și verificăm rezultatul acesteia.
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
Code Explicaţie:
- Pachetul PorterStemmer este importat din modulul stem.
- Sunt importate pachete pentru tokenizarea propozițiilor, precum și a cuvintelor.
- Se scrie o propoziție care urmează să fie simbolizată în pasul următor.
- Aici este creat un obiect pentru PorterStemmer.
- Se rulează o buclă și se face codificarea fiecărui cuvânt folosind obiectul creat în linia de cod 5.
Pe scurt, stemming este un modul de preprocesare a datelor. Limba engleză are multe variante ale unui singur cuvânt, ceea ce creează ambiguitate în antrenamentul și predicția învățării automate. Pentru a construi un model de succes, este vital să se filtreze astfel de cuvinte în aceleași date secvențiate folosind stemming. Aceasta este cunoscută și sub numele de normalizare.
Ce este lematizarea?
Lematizarea În NLTK, termenul este procesul algoritmic de găsire a lemei unui cuvânt în funcție de sensul și contextul său. Lematizarea se referă de obicei la analiza morfologică a cuvintelor, care își propune să elimine terminațiile flexionare. Aceasta 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ă a WordNet. Preprocesarea textului include atât stemming, cât și lematizare. Mulți oameni consideră cei doi termeni confuzi. Unii îi tratează ca fiind la fel, dar există o diferență între stemming și lematizare. Lematizarea este preferată primei din motivul de mai jos.
De ce este mai bună lematizarea decât stemming?
Algoritmul de stemming funcționează prin eliminarea sufixului din cuvânt. Într-un sens mai larg, elimină fie începutul, fie sfârșitul cuvântului. Dimpotrivă, lematizarea este o operațiune mai puternică și ia în considerare analiza morfologică a cuvintelor. Returnează lema, care este forma de bază a tuturor formelor sale flexionare. Sunt necesare cunoștințe lingvistice aprofundate pentru a crea dicționare și a căuta forma corectă a cuvântului. Stemming-ul este o operațiune generală, în timp ce lematizarea este o operațiune inteligentă în care forma corectă este căutată în dicționar. Prin urmare, lematizarea ajută la formarea unor cuvinte mai bune. masina de învățare caracteristici.
Code să se facă distincția între lematizare și stemming
Pentru a putea reduce Code:
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
Lematizarea Code:
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 lemmare pentru studii și studiu, rezultatul este același (studi), dar lematizatorul NLTK oferă o lemă diferită pentru ambele elemente: studiu pentru studii și studiu pentru studiu. Așadar, atunci când trebuie să creăm un set de caracteristici pentru a antrena o mașină, ar fi grozav dacă s-ar prefera lematizarea.
Cazul de utilizare a Lematizerului
Lematizatorul minimizează ambiguitatea textului. Cuvinte precum „bicicletă” sau „biciclete” sunt convertite în cuvântul de bază „bicicletă”. Acesta convertește toate cuvintele cu același înțeles, dar cu o reprezentare diferită, la forma lor de bază, reducând densitatea cuvintelor și...ping pregătiți caracteristici precise pentru antrenarea unei mașini. Cu cât datele sunt mai curate, cu atât modelul de învățare automată va fi mai precis. Lemmatizer-ul NLTK economisește, de asemenea, memorie și costuri de calcul.
Exemplu în timp real care arată utilizarea lematizării WordNet și a etichetării POS în 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)
ieșire:
guru99 => guru99 is => be totally => totally new => new kind => kind of => of learning => learn experience => experience . => .
Code Explicaţie:
- Wordnet-ul cititorului de corpus este importat, iar WordNetLemmatizer este importat din Wordnet.
- Eticheta pentru tokenizarea cuvintelor și a părților de vorbire este importată din nltk, iar dicționarul implicit din colecții.
- Se creează un dicționar în care prima literă a argumentului pos_tag este cheia, mapată la valoarea din dicționarul wordnet.
- Textul este scris și tokenizat, iar obiectul lemma_function este creat pentru utilizare în interiorul buclei.
- Bucla este rulată, iar lemmatize primește două argumente: token-ul și o hartă.ping a pos_tag cu valoarea wordnet.
Python Lematizarea are o strânsă legătură cu Dicționar WordNet, așa că este esențial să studiem acest subiect în continuare.
