Stemming og lemmatisering i Python NLTK med eksempler
Hvad er stamning og lemmatisering i Python NLTK?
Stemming og Lematisering in Python NLTK er tekstnormaliseringsteknikker til naturlig sprogbehandling. Disse teknikker er meget brugt til tekstforbehandling. Forskellen mellem stemming og lemmatisering er, at stemming er hurtigere, da den skærer ord uden at kende konteksten, mens lemmatisering er langsommere, da den kender konteksten af ord før behandling.
Hvad er Stemming?
Tilsyn er en metode til normalisering af ord i Natural Language Processing. Det er en teknik, hvor et sæt ord i en sætning konverteres til en sekvens for at forkorte dets opslag. I denne metode normaliseres ordene, der har samme betydning, men har nogle variationer i henhold til konteksten eller sætningen.
Med et andet ord er der ét rodord, men der er mange variationer af de samme ord. For eksempel er grundordet "spise", og dets variationer er "spiser, spiser, spist og sådan". På samme måde med hjælp fra Stemming in Python, kan vi finde rodordet for enhver variation.
For eksempel
He was riding. He was taking the ride.
I de to ovenstående sætninger er betydningen den samme, dvs. rideaktivitet i fortiden. Et menneske kan nemt forstå, at begge betydninger er de samme. Men for maskiner er begge sætninger forskellige. Det blev derfor svært at konvertere det til den samme datarække. Hvis vi ikke leverer det samme datasæt, kan maskinen ikke forudsige. Så det er nødvendigt at differentiere betydningen af hvert ord for at forberede datasættet til maskinlæring. Og her bruges stemming til at kategorisere den samme type data ved at få dets rodord.
Lad os implementere dette med en Python program.NLTK har en algoritme kaldet "PorterStemmer". Denne algoritme accepterer listen over tokeniserede ord og omdanner det til rodord.
Program til at 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)
Produktion:
wait wait wait wait
Kodeforklaring:
- Der er et stammodul i NLTk som importeres. Hvis du importerer hele modulet, bliver programmet tungt, da det indeholder tusindvis af linjer med koder. Så fra hele stammemodulet importerede vi kun "PorterStemmer."
- Vi udarbejdede en dummy-liste over variationsdata af det samme ord.
- Der oprettes et objekt, som tilhører klassen nltk.stem.porter.PorterStemmer.
- Yderligere sendte vi den til PorterStemmer en efter en ved hjælp af "for" loop. Til sidst fik vi output-rodord for hvert ord nævnt på listen.
Ud fra ovenstående forklaring kan det også konkluderes, at stemming betragtes som et vigtigt forbehandlingstrin, fordi det fjernede redundans i dataene og variationer i det samme ord. Som et resultat filtreres data, hvilket vil hjælpe med bedre maskintræning.
Nu sender vi en hel sætning og kontrollerer dens opførsel som output.
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)
Output:
hello guru99 , you have build a veri good site and I love visit your site
Kodeforklaring:
- Pakke PorterStemer importeres fra modulstamme
- Pakker til tokenisering af sætning samt ord importeres
- Der skrives en sætning, som skal tokeniseres i næste trin.
- Ordtokenisering, der stammer fra lemmatisering, implementeres i dette trin.
- Her oprettes et objekt til PorterStemmer.
- Loop køres, og stemming af hvert ord udføres ved hjælp af objektet oprettet i kodelinje 5
konklusion:
Stemming er et data-forbehandlingsmodul. Det engelske sprog har mange variationer af et enkelt ord. Disse variationer skaber tvetydighed i maskinlæringstræning og forudsigelse. For at skabe en succesfuld model er det vigtigt at filtrere sådanne ord og konvertere til den samme type sekvenserede data ved hjælp af stemming. Dette er også en vigtig teknik til at få rækkedata fra et sæt sætninger og fjernelse af overflødige data, også kendt som normalisering.
Hvad er lemmatisering?
lemmatisering i NLTK er den algoritmiske proces med at finde et ords lemma afhængigt af dets betydning og kontekst. Lemmatisering refererer normalt til den morfologiske analyse af ord, som har til formål at fjerne bøjningsendelser. Det hjælper med at returnere basis- eller ordbogsformen af et ord kendt som lemma.
NLTK Lemmatiseringsmetoden er baseret på WorldNets indbyggede morph-funktion. Tekstforbehandling omfatter både stammering og lemmatisering. Mange mennesker finder de to udtryk forvirrende. Nogle behandler disse som det samme, men der er en forskel mellem stemming vs lemmatisering. Lemmatisering foretrækkes frem for førstnævnte på grund af nedenstående årsag.
Hvorfor er Lemmatisering bedre end Stemming?
Stemming-algoritmen fungerer ved at skære suffikset fra ordet. I bredere forstand skærer enten begyndelsen eller slutningen af ordet.
Tværtimod er lemmatisering en mere kraftfuld operation, og den tager hensyn til morfologisk analyse af ordene. Det returnerer lemmaet, som er grundformen for alle dets bøjningsformer. Der kræves dybtgående sproglig viden for at skabe ordbøger og lede efter ordets rette form. Stemming er en generel operation, mens lemmatisering er en intelligent operation, hvor den korrekte form vil blive kigget i ordbogen. Derfor hjælper lemmatisering med at danne bedre machine learning funktioner.
Kode til at skelne mellem 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)))
Output::
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)))
Output:
Lemma for studies is study Lemma for studying is studying Lemma for cries is cry Lemma for cry is cry
Diskussion af output
Hvis du ser ud til at stamme efter studier og studier, er output det samme (studi), men NLTK lemmatizer giver forskellige lemmaer for både tokens-studie til studier og studier for at studere. Så når vi skal lave funktionssæt til at træne maskine, ville det være fantastisk, hvis lemmatisering foretrækkes.
Brug Case of Lemmatizer
Lemmatizer minimerer tekstens uklarhed. Eksempelord som cykel eller cykler konverteres til grundord cykel. Grundlæggende vil det konvertere alle ord, der har samme betydning, men forskellig repræsentation, til deres basisform. Det reducerer ordtætheden i den givne tekst og hjælper med at forberede de nøjagtige funktioner til træningsmaskine. Renere data, jo mere intelligent og nøjagtig vil din maskinlæringsmodel være. NLTK Lemmatizer sparer også hukommelse såvel som beregningsomkostninger.
Realtidseksempel, der viser brugen af 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 korpuslæserens wordnet.
- WordNetLemmatizer importeres fra wordnet.
- Word tokenize såvel som dele af tale-tag importeres fra nltk.
- Standardordbog importeres fra samlinger.
- Ordbog oprettes, hvor pos_tag (første bogstav) er nøgleværdierne, hvis værdier er afbildet med værdien fra wordnet-ordbogen. Vi har taget det eneste første bogstav, da vi vil bruge det senere i løkken.
- Teksten er skrevet og er tokeniseret.
- Objekt lemma_function oprettes, som vil blive brugt inde i løkken.
- Loop køres, og lemmatize vil tage to argumenter, det ene er token, og det andet er en mapping af pos_tag med wordnet-værdi.
Produktion:
guru99 => guru99 is => be totally => totally new => new kind => kind of => of learning => learn experience => experience . => .
Python Lematisering har en tæt sammenhæng med wordnet ordbog, så det er vigtigt at studere dette emne, så vi beholder dette som det næste emne.