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