Stemming og lemmatisering i Python NLTK med eksempler

Hva er stamme og lemmatisering i Python NLTK?

Stemming og lemmatisering in Python NLTK er tekstnormaliseringsteknikker for naturlig språkbehandling. Disse teknikkene er mye brukt for tekstforbehandling. Forskjellen mellom stemming og lemmatisering er at stemming er raskere ettersom den kutter ord uten å kjenne konteksten, mens lemmatisering er tregere ettersom den kjenner konteksten til ord før behandling.

Hva er Stemming?

stemming er en metode for normalisering av ord i Natural Language Processing. Det er en teknikk der et sett med ord i en setning konverteres til en sekvens for å forkorte oppslaget. I denne metoden normaliseres ordene som har samme betydning, men har noen variasjoner i henhold til konteksten eller setningen.

Med et annet ord er det ett grunnord, men det er mange varianter av de samme ordene. For eksempel er rotordet "spise" og dets varianter er "spiser, spiser, spist og sånn". På samme måte ved hjelp av Stemming in Python, kan vi finne rotordet til alle varianter.

For eksempel

He was riding.	
He was taking the ride.

I de to setningene ovenfor er betydningen den samme, dvs. rideaktivitet i fortiden. Et menneske kan lett forstå at begge betydningene er de samme. Men for maskiner er begge setningene forskjellige. Dermed ble det vanskelig å konvertere den til samme datarad. I tilfelle vi ikke leverer det samme datasettet, klarer ikke maskinen å forutsi. Så det er nødvendig å differensiere betydningen av hvert ord for å forberede datasettet for maskinlæring. Og her brukes stemming for å kategorisere samme type data ved å få rotordet.

La oss implementere dette med en Python program.NLTK har en algoritme kalt "PorterStemmer". Denne algoritmen aksepterer listen over tokeniserte ord og stammer fra rotordet.

Program for å forstå 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)

Produksjon:

wait	
wait	
wait	
wait 

Program for å forstå stammen

Kodeforklaring:

  • Det er en stammemodul i NLTk som importeres. Hvis du importerer hele modulen, blir programmet tungt ettersom det inneholder tusenvis av linjer med koder. Så fra hele stammemodulen importerte vi bare "PorterStemmer."
  • Vi utarbeidet en dummy-liste med variasjonsdata for samme ord.
  • Det opprettes et objekt som tilhører klassen nltk.stem.porter.PorterStemmer.
  • Videre ga vi den til PorterStemmer en etter en ved å bruke "for" loop. Til slutt fikk vi utgangsrotord for hvert ord nevnt i listen.

Fra forklaringen ovenfor kan det også konkluderes med at stemming anses som et viktig forbehandlingstrinn fordi det fjernet redundans i dataene og variasjoner i det samme ordet. Som et resultat blir data filtrert som vil hjelpe til med bedre maskintrening.

Nå gir vi en hel setning og ser etter oppførselen som utgang.

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)

Utgang:

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

Program for å forstå stammen

Kodeforklaring:

  • Pakke PorterStemer importeres fra modulstamme
  • Pakker for tokenisering av setninger så vel som ord importeres
  • Det skrives en setning som skal tokeniseres i neste trinn.
  • Ordtokenisering som stammer lemmatisering er implementert i dette trinnet.
  • Et objekt for PorterStemmer er laget her.
  • Loop kjøres og stamping av hvert ord gjøres ved å bruke objektet opprettet i kodelinje 5

Konklusjon:

Stemming er en dataforbehandlingsmodul. Det engelske språket har mange varianter av et enkelt ord. Disse variasjonene skaper tvetydighet i maskinlæringstrening og prediksjon. For å lage en vellykket modell, er det viktig å filtrere slike ord og konvertere til samme type sekvenserte data ved å bruke stamme. Dette er også en viktig teknikk for å få raddata fra et sett med setninger og fjerning av overflødige data også kjent som normalisering.

Hva er lemmatisering?

lemmatisering i NLTK er den algoritmiske prosessen med å finne lemmaet til et ord avhengig av dets betydning og kontekst. Lemmatisering refererer vanligvis til den morfologiske analysen av ord, som tar sikte på å fjerne bøyningsendelser. Det hjelper med å returnere basis- eller ordbokformen til et ord kjent som lemma.

NLTK Lemmatiseringsmetoden er basert på WorldNets innebygde morph-funksjon. Tekstforbehandling inkluderer både stamping og lemmatisering. Mange synes de to begrepene er forvirrende. Noen behandler disse som det samme, men det er en forskjell mellom stemming vs lemmatisering. Lematisering foretrekkes fremfor førstnevnte på grunn av grunnen nedenfor.

Hvorfor er Lemmatisering bedre enn Stemming?

Stemming-algoritmen fungerer ved å kutte suffikset fra ordet. I en bredere forstand kutter enten begynnelsen eller slutten av ordet.

Tvert imot er lemmatisering en kraftigere operasjon, og den tar hensyn til morfologisk analyse av ordene. Den returnerer lemmaet som er grunnformen til alle bøyningsformene. Det kreves dyptgående språkkunnskaper for å lage ordbøker og lete etter den rette formen på ordet. Stemming er en generell operasjon mens lemmatisering er en intelligent operasjon der den riktige formen vil bli sett i ordboken. Derfor hjelper lemmatisering til å danne seg bedre maskinlæring funksjoner.

Kode for å skille mellom Lemmatisering og Stemming

Stamkode:

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

Utgang::

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

Lematiseringskode:

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

Utgang:

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

Diskusjon av output

Hvis du ser på stammen for studier og studier, er produksjonen den samme (studi), men NLTK lemmatizer gir forskjellige lemma for både tokenstudier for studier og studier for å studere. Så når vi trenger å lage funksjonssett for å trene maskin, ville det være flott om lemmatisering foretrekkes.

Bruk Case of Lemmatizer

Lemmatizer minimerer tekstuklarhet. Eksempelord som sykkel eller sykler konverteres til basisordet sykkel. I utgangspunktet vil det konvertere alle ord som har samme betydning, men forskjellig representasjon, til grunnformen. Det reduserer ordtettheten i den gitte teksten og hjelper til med å forberede de nøyaktige funksjonene for treningsmaskinen. Renere data, jo mer intelligent og nøyaktig blir maskinlæringsmodellen din. NLTK Lemmatizer vil også spare minne så vel som beregningskostnader.

Sanntidseksempel som viser bruk av Wordnet Lemmatization og POS-tagging 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)

Bruk Case of Lemmatizer

Kode Forklaring

  • For det første importeres korpusleseren wordnet.
  • WordNetLemmatizer er importert fra wordnet.
  • Word tokenize så vel som deler av tale-tag importeres fra nltk.
  • Standardordbok importeres fra samlinger.
  • Ordbok lages der pos_tag (første bokstav) er nøkkelverdiene hvis verdier er kartlagt med verdien fra wordnet-ordboken. Vi har tatt den eneste første bokstaven da vi skal bruke den senere i loopen.
  • Teksten er skrevet og er tokenisert.
  • Objektlemma_function opprettes som vil bli brukt inne i loopen.
  • Loop kjøres og lemmatize vil ta to argumenter, det ene er token og det andre er en mapping av pos_tag med wordnet-verdi.

Produksjon:

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

Python Lematisering har et nært forhold til wordnet-ordbok, så det er viktig å studere dette emnet, så vi beholder dette som neste emne.