Stemming og lemmatisering i Python NLTK med eksempler
⚡ Smart oppsummering
Stemming og lemmatisering er tekstnormaliseringsteknikker i Python NLTK som reduserer ordvariasjoner til en felles base, der stammeavlinger raskt avler suffikser uten kontekst og lemmatisering returnerer et ekte ordbokord ved hjelp av betydning.

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 fordi den kutter ord uten å kjenne konteksten, mens lemmatisering er tregere fordi den kjenner konteksten til ordene før behandling.
Hva er Stemming?
stemming er en metode for å normalisere ord i Natural Language ProcessingDet er en teknikk der et sett med ord i en setning konverteres til en sekvens for å forkorte oppslaget. I denne metoden normaliseres ord som har samme betydning, men noen variasjoner i henhold til konteksten eller setningen. Med andre ord er det ett rotord, men det finnes mange varianter av det samme ordet. For eksempel er rotordet «spise» og variasjonene er «spiser, spiser, spist og så videre». På samme måte, ved hjelp av stemming i Python, kan vi finne rotordet til enhver variant.
For eksempel:
He was riding. He was taking the ride.
I de to setningene ovenfor er betydningen den samme, det vil si en rideaktivitet i fortiden. Et menneske kan lett forstå at begge betydningene er de samme. Men for maskiner er begge setningene forskjellige. Dermed blir det vanskelig å konvertere dem til samme datarad. Hvis vi ikke oppgir det samme datasettet, klarer ikke maskinen å forutsi. Så det er nødvendig å differensiere betydningen av hvert ord for å forberede datasettet for maskinlæring. Her brukes stemming for å kategorisere samme type data ved å finne rotordet.
La oss implementere dette med en Python program. NLTK har en algoritme som heter PorterStemmerDenne algoritmen godtar listen over tokeniserte ord og stammer dem til rotord.
Program for å forstå stammen
from nltk.stem import PorterStemmer e_words= ["wait", "waiting", "waited", "waits"] ps =PorterStemmer() for w in e_words: rootWord=ps.stem(w) print(rootWord)
Utgang:
wait wait wait wait
Code Forklaring:
- Det finnes en stammodul i NLTK som importeres. Hvis du importerer hele modulen, blir programmet tungt ettersom det inneholder tusenvis av kodelinjer. Så fra hele stammodulen 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.
- Vi sendte dem til PorterStemmer én etter én ved hjelp av en «for»-løkke. Til slutt fikk vi rotordet til hvert ord som er nevnt i listen.
Ut fra det ovennevnte er stemming et viktig forbehandlingstrinn fordi det fjerner redundans og variasjoner i samme ord. Som et resultat filtreres data, noe som bidrar til bedre maskinopplæring. Nå sender vi en fullstendig setning og sjekker resultatet.
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
Code Forklaring:
- Pakken PorterStemmer importeres fra modulstammen.
- Pakker for tokenisering av setninger så vel som ord importeres.
- Det skrives en setning som skal tokeniseres i neste trinn.
- Et objekt for PorterStemmer er laget her.
- En løkke kjøres, og stemming av hvert ord gjøres ved hjelp av objektet som ble opprettet i kodelinje 5.
Kort sagt er stemming en modul for dataforbehandling. Det engelske språket har mange varianter av et enkelt ord, noe som skaper tvetydighet i maskinlæringstrening og prediksjon. For å bygge en vellykket modell er det viktig å filtrere slike ord inn i de samme sekvenserte dataene ved hjelp av stemming. Dette er også kjent som normalisering.
Hva er lemmatisering?
lemmatisering I NLTK er lemmatisering den algoritmiske prosessen med å finne lemmaet til et ord avhengig av dets betydning og kontekst. Lemmatisering refererer vanligvis til morfologisk analyse av ord, som har som mål å fjerne bøyningsendelser. Det hjelper med å returnere grunnformen eller ordboksformen til et ord, kjent som lemmaet. NLTKs lemmatiseringsmetoden er basert på WordNets innebygde morffunksjon. Tekstforbehandling inkluderer både stemming og lemmatisering. Mange synes de to begrepene er forvirrende. Noen behandler disse som det samme, men det er en forskjell mellom stemming og lemmatisering. Lemmatisering foretrekkes fremfor førstnevnte av grunnen nedenfor.
Hvorfor er Lemmatisering bedre enn Stemming?
Stammingsalgoritmen fungerer ved å kutte suffikset fra ordet. I en bredere forstand kutter den enten begynnelsen eller slutten av ordet. Lemmatisering er derimot en kraftigere operasjon, og den tar hensyn til den morfologiske analysen av ordene. Den returnerer lemmaet, som er grunnformen til alle bøyningsformene. Dyptgående språklig kunnskap er nødvendig for å lage ordbøker og lete etter den riktige formen av ordet. Stamming er en generell operasjon, mens lemmatisering er en intelligent operasjon der den riktige formen slås opp i ordboken. Derfor bidrar lemmatisering til å danne bedre maskinlæring funksjoner.
Code å skille mellom lemmatisering og 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)))
Utgang:
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)))
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å stemming for studier og studying, er utdataene det samme (studi), men NLTK-lemmatisereren gir et annet lemma for begge tokenene: study for studier og studying for studying. Så når vi trenger å lage et funksjonssett for å trene en maskin, ville det være flott om lemmatisering foretrekkes.
Bruk Case of Lemmatizer
Lemmatisatoren minimerer teksttvetydighet. Ord som sykkel eller sykler konverteres til grunnordet sykkel. Den konverterer alle ord med samme betydning, men ulik representasjon, til grunnformen, noe som reduserer ordtettheten og hel.ping klargjør nøyaktige funksjoner for trening av en maskin. Jo renere dataene er, desto mer nøyaktig blir maskinlæringsmodellen din. NLTK Lemmatizer sparer også minne og beregningskostnader.
Sanntidseksempel som viser bruk av WordNet-lemmatisering og POS-tagging i 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)
Utgang:
guru99 => guru99 is => be totally => totally new => new kind => kind of => of learning => learn experience => experience . => .
Code Forklaring:
- Korpusleseren Wordnet importeres, og WordNetLemmatizer importeres fra Wordnet.
- Ordtokenisering og ordklassetagger importeres fra nltk, og standardordbok fra samlinger.
- Det opprettes en ordbok der den første bokstaven i pos_tag er nøkkelen, tilordnet verdien fra wordnet-ordboken.
- Teksten skrives og tokeniseres, og objektet lemma_function opprettes for bruk inne i løkken.
- Løkken kjøres, og lemmatize tar to argumenter: tokenet og et kart.ping av pos_tag med wordnet-verdien.
Python Lemmatisering har en nær sammenheng med WordNet-ordbok, så det er viktig å studere dette emnet videre.
