Stamning och lemmatisering in Python NLTK med exempel

Vad รคr stam och lemmatisering i Python NLTK?

Stamning och lemmatisering in Python NLTK รคr textnormaliseringstekniker fรถr naturlig sprรฅkbehandling. Dessa tekniker anvรคnds ofta fรถr textfรถrbehandling. Skillnaden mellan stemming och lemmatisering รคr att stemming รคr snabbare eftersom det skรคr ord utan att kรคnna till sammanhanget, medan lemmatisering รคr lรฅngsammare eftersom det kรคnner till ords sammanhang innan bearbetning.

Vad รคr Stemming?

stemming รคr en metod fรถr normalisering av ord i Naturlig sprรฅkbehandling. Det รคr en teknik dรคr en uppsรคttning ord i en mening omvandlas till en sekvens fรถr att fรถrkorta dess uppslag. I denna metod normaliseras orden som har samma betydelse men har vissa variationer beroende pรฅ sammanhanget eller meningen.

Med ett annat ord finns det ett grundord, men det finns mรฅnga varianter av samma ord. Till exempel รคr grundordet "รคta" och dess varianter รคr "รคter, รคter, รคter och sรฅ". Pรฅ samma sรคtt med hjรคlp av Stemming in Python, kan vi hitta grundordet fรถr alla varianter.

Till exempel

He was riding.	
He was taking the ride.

I ovanstรฅende tvรฅ meningar รคr innebรถrden densamma, dvs. ridaktivitet i det fรถrflutna. En mรคnniska kan lรคtt fรถrstรฅ att bรฅda betydelserna รคr desamma. Men fรถr maskiner รคr bรฅda meningarna olika. Dรคrfรถr blev det svรฅrt att konvertera den till samma datarad. Om vi โ€‹โ€‹inte tillhandahรฅller samma datauppsรคttning, misslyckas maskinen med att fรถrutsรคga. Sรฅ det รคr nรถdvรคndigt att skilja innebรถrden av varje ord fรถr att fรถrbereda datasetet fรถr maskininlรคrning. Och hรคr anvรคnds stemming fรถr att kategorisera samma typ av data genom att fรฅ dess rotord.

Lรฅt oss implementera detta med en Python program.NLTK har en algoritm som heter "PorterStemmer". Denna algoritm accepterar listan med tokeniserade ord och stammar in det i rotord.

Program fรถr att fรถrstรฅ 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)

Produktion:

wait	
wait	
wait	
wait 

Program fรถr att fรถrstรฅ stam

Code Fรถrklaring:

  • Det finns en stammodul i NLTk som importeras. Om du importerar hela modulen blir programmet tungt eftersom det innehรฅller tusentals rader med koder. Sรฅ frรฅn hela stammodulen importerade vi bara "PorterStemmer."
  • Vi fรถrberedde en dummylista med variationsdata fรถr samma ord.
  • Ett objekt skapas som tillhรถr klassen nltk.stem.porter.PorterStemmer.
  • Vidare skickade vi den till PorterStemmer en efter en med hjรคlp av "for" loop. Slutligen fick vi utmatningsrotord fรถr varje ord som nรคmns i listan.

Frรฅn ovanstรฅende fรถrklaring kan man ocksรฅ dra slutsatsen att stemming anses vara ett viktigt fรถrbearbetningssteg eftersom det tog bort redundans i data och variationer i samma ord. Som ett resultat filtreras data vilket kommer att hjรคlpa till med bรคttre maskintrรคning.

Nu skickar vi en hel mening och kontrollerar dess beteende som en utgรฅng.

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)

Produktion:

hello	
guru99	
,	
you	
have	
build	
a	
veri	
good	
site	
and	
I	
love	
visit	
your	
site	 

Program fรถr att fรถrstรฅ stam

Code Fรถrklaring:

  • Paketet PorterStemer importeras frรฅn modulstam
  • Paket fรถr tokenisering av mening sรฅvรคl som ord importeras
  • En mening skrivs som ska tokeniseras i nรคsta steg.
  • Ordtokenisering som hรคrrรถr lemmatisering implementeras i detta steg.
  • Ett objekt fรถr PorterStemmer skapas hรคr.
  • Slinga kรถrs och stemming av varje ord gรถrs med hjรคlp av objektet som skapats i kodrad 5

Slutsats:

Stemming รคr en datafรถrbearbetningsmodul. Det engelska sprรฅket har mรฅnga varianter av ett enda ord. Dessa variationer skapar otydlighet i maskininlรคrningstrรคning och fรถrutsรคgelse. Fรถr att skapa en framgรฅngsrik modell รคr det viktigt att filtrera sรฅdana ord och konvertera till samma typ av sekvenserad data med hjรคlp av stemming. Detta รคr ocksรฅ en viktig teknik fรถr att fรฅ raddata frรฅn en uppsรคttning mening och ta bort redundanta data, รคven kรคnd som normalisering.

Vad รคr lemmatisering?

lemmatisering i NLTK รคr den algoritmiska processen att hitta ett ords lemma beroende pรฅ dess betydelse och sammanhang. Lemmatisering syftar vanligtvis pรฅ den morfologiska analysen av ord, som syftar till att ta bort bรถjningsรคndelser. Det hjรคlper till att returnera bas- eller ordboksformen fรถr ett ord som kallas lemma.

NLTK Lemmatiseringsmetoden รคr baserad pรฅ WorldNets inbyggda morph-funktion. Textfรถrbearbetning inkluderar bรฅde hรคrdning och lemmatisering. Mรฅnga tycker att de tvรฅ termerna รคr fรถrvirrande. Vissa behandlar dessa som samma, men det finns en skillnad mellan hรคrdning och lemmatisering. Lematisering fรถredras framfรถr den fรถrra pรฅ grund av nedanstรฅende anledning.

Varfรถr รคr Lemmatisering bรคttre รคn Stemming?

Stamalgoritm fungerar genom att klippa suffixet frรฅn ordet. I en vidare mening skรคr antingen bรถrjan eller slutet av ordet.

Tvรคrtom รคr lemmatisering en mer kraftfull operation, och den tar hรคnsyn till morfologisk analys av orden. Det returnerar lemma som รคr basformen fรถr alla dess bรถjningsformer. Fรถrdjupade sprรฅkkunskaper krรคvs fรถr att skapa ordbรถcker och leta efter ordets rรคtta form. Stemming รคr en allmรคn operation medan lemmatisering รคr en intelligent operation dรคr rรคtt form kommer att ses i ordboken. Dรคrfรถr hjรคlper lemmatisering till att bilda bรคttre maskininlรคrning funktioner.

Code att skilja mellan lemmatisering och stemming

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

Produktion::

Stemming for studies is studi
Stemming for studying is studi
Stemming for cries is cri
Stemming for cry is cri

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

Produktion:

Lemma for studies is study
Lemma for studying is studying
Lemma for cries is cry
Lemma for cry is cry

Diskussion om output

Om du ser stammande fรถr studier och studier, รคr produktionen densamma (studi) men NLTK lemmatizer ger olika lemma fรถr bรฅde tokenstudier fรถr studier och studier fรถr att studera. Sรฅ nรคr vi behรถver gรถra funktionsuppsรคttningar fรถr att trรคna maskin skulle det vara bra om lemmatisering fรถredras.

Anvรคnd Case of Lemmatizer

Lemmatizer minimerar tvetydighet i texten. Exempelord som cykel eller cyklar konverteras till basord cykel. I grund och botten kommer det att konvertera alla ord som har samma betydelse men olika representation till sin basform. Det minskar ordtรคtheten i den givna texten och hjรคlper till att fรถrbereda de korrekta funktionerna fรถr trรคningsmaskinen. Renare data, desto mer intelligent och exakt blir din maskininlรคrningsmodell. NLTK Lemmatizer sparar ocksรฅ minne och berรคkningskostnader.

Realtidsexempel som visar anvรคndningen av Wordnet Lemmatization och POS-taggning 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)

Anvรคnd Case of Lemmatizer

Code Fรถrklaring

  • Fรถrst importeras corpus reader wordnet.
  • WordNetLemmatizer importeras frรฅn wordnet.
  • Word tokenize sรฅvรคl som delar av taltaggen importeras frรฅn nltk.
  • Standardordbok importeras frรฅn samlingar.
  • Dictionary skapas dรคr post_tag (fรถrsta bokstaven) รคr nyckelvรคrdena vars vรคrden รคr mappade med vรคrdet frรฅn wordnet dictionary. Vi har tagit den enda fรถrsta bokstaven dรฅ vi kommer att anvรคnda den senare i slingan.
  • Texten รคr skriven och symboliserad.
  • Objekt lemma_function skapas som kommer att anvรคndas inuti slingan.
  • Loopen kรถrs och lemmatize tar tvรฅ argument, ett รคr en token och det andra รคr en map.ping av pos_tag med wordnet-vรคrde.

Produktion:

guru99 => guru99				
is => be				
totally => totally				
new => new				
kind => kind				
of => of				
learning => learn				
experience => experience				
. => .				 

Python Lematisering har ett nรคra samband med wordnet ordbok, sรฅ det รคr viktigt att studera detta รคmne, sรฅ vi hรฅller detta som nรคsta รคmne.

Sammanfatta detta inlรคgg med: