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.

  • ???? Stemming: PorterStemmer beskjรฆrer suffikser for รฅ komme til en rot som kanskje ikke er et ekte ord.
  • ๐Ÿ“š Lemmatisering: WordNetLemmatizer returnerer ordbokens basisform, kalt lemmaet.
  • ๐Ÿ‡ง๐Ÿ‡ท Forskjell: Stemming er raskere, lemmatisering er tregere, men mer nรธyaktig og kontekstbevisst.
  • ๐Ÿ”ค normalisering: Begge reduserer ordtettheten slik at maskiner behandler varianter som รฉn funksjon.
  • ๐Ÿท๏ธ POS-tagger: ร… sende inn en ordklasse-tagg gjรธr lemmatisatoren mye mer presis.
  • ๐Ÿค– AI-fordel: Renere normalisert tekst produserer sterkere maskinlรฆringsfunksjoner og -modeller.

Stemming og lemmatisering i Python NLTK

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.

Spรธrsmรฅl og svar

Porter-stemmeren er NLTKs PorterStemmer-klasse. Den bruker suffiks-stripeping regler fra Martin Porters algoritme fra 1980 for รฅ redusere engelske ord til stammen, slik at ยซwaitingยป, ยซwaitedยป og ยซwaitsยป alle blir til ยซwaitยป.

Bruk stemming nรฅr hastighet og enkelhet er viktigere enn lesbarhet, for eksempel ved sรธkeindeksering, storskala sentimentanalyse eller funksjonsreduksjon. Velg lemmatisering nรฅr resultatet mรฅ vรฆre et gyldig, menneskelig lesbart ord.

Tekstnormalisering konverterer ulike former av et ord til รฉn felles representasjon. Ordstamme og lemmatisering er to normaliseringsteknikker som reduserer ordtetthet, slik at en modell behandler varianter som ยซstudieยป og ยซstudierยป som รฉn enkelt funksjon.

NLTK tilbyr PorterStemmer (og andre stammere som Snowball) for stemming, og WordNetLemmatizer for lemmatisering. Lemmatisatoren er avhengig av WordNet-ordboken for รฅ returnere riktig grunnform av hvert ord.

De fjerner overflรธdige ordvariasjoner, slik at en maskinlรฆringsmodell ser renere, lavere dimensjonale funksjoner. Fรฆrre dupliserte tokens betyr mindre tvetydighet under trening og mer nรธyaktige prediksjoner pรฅ usett tekst.

Moderne AI-modeller utleder kontekst automatisk, men NLTKs WordNetLemmatizer trenger en ordklasse-tagg for รฅ tydeliggjรธre. Ved รฅ bruke denne taggen kan den velge riktig lemma, for eksempel รฅ gjรธre ยซlearningยป om til ยซlearnยป nรฅr det er tagget som et verb.

Et ord kan vรฆre et substantiv eller et verb med forskjellige lemmaer. Uten en ordklasse-tagg antar WordNetLemmatizer et substantiv. ร… bruke riktig tagg, for eksempel verb eller adjektiv, gir riktig grunnform.

Nei. Stamming fjerner bare suffikser, sรฅ ยซstudierยป blir til ยซstudiยป og ยซcriesยป blir til ยซcriยป, som ikke er gyldige ord. Lemmatisering, derimot, returnerer alltid et ekte ordbokord som ยซstudieยป.

Oppsummer dette innlegget med: