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.
