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.

  • ???? Steming: PorterStemmer elimină sufixe pentru a ajunge la o rădăcină care s-ar putea să nu fie un cuvânt real.
  • 📚 Lematizare: WordNetLemmatizer returnează forma de bază a dicționarului, numită lemă.
  • 🇧🇷 Diferență: Stemming-ul este mai rapid, lematizarea este mai lentă, dar mai precisă și mai conștientă de context.
  • 🔤 Normalizare: Ambele reduc densitatea cuvintelor, astfel încât mașinile tratează variantele ca pe o singură caracteristică.
  • 🏷️ Etichete POS: Transmiterea unei etichete pentru o parte de vorbire face lematizatorul mult mai precis.
  • 🤖 Beneficiul IA: Textul normalizat și mai curat produce funcții și modele de învățare automată mai puternice.

Stemming și lematizare în Python NLTK

Î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.

Întrebări frecvente

Stemmerul Porter este clasa PorterStemmer a NLTK. Aplică sufix-stripping reguli din algoritmul lui Martin Porter din 1980 pentru a reduce cuvintele englezești la rădăcina lor, astfel încât „waiting”, „waited” și „waits” devin toate „wait”.

Folosește lematizarea atunci când viteza și simplitatea contează mai mult decât lizibilitatea, cum ar fi indexarea căutărilor, analiza sentimentelor la scară largă sau reducerea caracteristicilor. Alege lematizarea atunci când rezultatul trebuie să fie un cuvânt valid, lizibil de către om.

Normalizarea textului convertește diferite forme ale unui cuvânt într-o singură reprezentare comună. Stemming-ul și lematizarea sunt două tehnici de normalizare care reduc densitatea cuvintelor, astfel încât un model tratează variante precum „studiu” și „studii” ca o singură caracteristică.

NLTK oferă PorterStemmer (și alte programe de stemming precum Snowball) pentru stemming și WordNetLemmatizer pentru lematizare. Lematizatorul se bazează pe dicționarul WordNet pentru a returna forma de bază corectă a fiecărui cuvânt.

Acestea elimină variațiile redundante ale cuvintelor, astfel încât un model de învățare automată vede caracteristici mai curate, cu dimensiuni reduse. Mai puține token-uri duplicate înseamnă mai puțină ambiguitate în timpul antrenamentului și predicții mai precise asupra textului nevăzut.

Modelele moderne de inteligență artificială deduc automat contextul, dar WordNetLemmatizer din NLTK are nevoie de o etichetă specifică categoriei de vorbire pentru a dezambigua. Furnizarea acestei etichete îi permite să aleagă lema corectă, de exemplu, transformând cuvântul „învățare” în „învățare” atunci când este etichetat ca verb.

Un cuvânt poate fi un substantiv sau un verb cu leme diferite. Fără o etichetă de categorie gramaticală, WordNetLemmatizer presupune că este un substantiv. Prin transmiterea etichetei corecte, cum ar fi verbul sau adjectivul, se obține forma de bază corectă.

Nu. Radicalizarea elimină doar sufixele, astfel încât „studies” devine „studi” și „cries” devine „cri”, care nu sunt cuvinte valide. Lematizarea, prin contrast, returnează întotdeauna un cuvânt real din dicționar, cum ar fi „study”.

Rezumați această postare cu: