Stemming og lemmatisering med Python NLTK

Hvad er stemming?

Stemming er en slags normalisering af ord. Normalisering er en teknik, hvor et sæt ord i en sætning konverteres til en sekvens for at forkorte dens opslag. Ordene, der har samme betydning, men som har en vis variation i henhold til konteksten eller sætningen, normaliseres.

I et andet ord er der et rodord, men der er mange variationer af de samme ord. For eksempel er rodordet "spis", og variationerne er "spiser, spiser, spises og lignende". På samme måde kan vi ved hjælp af Stemming finde rodordet for alle variationer.

For eksempel

He was riding.He was taking the ride.

I ovenstående to sætninger er betydningen den samme, dvs. rideaktivitet i fortiden. Et menneske kan let forstå, at begge betydninger er ens. Men for maskiner er begge sætninger forskellige. Således blev det svært at konvertere det til den samme datarække. Hvis vi ikke leverer det samme datasæt, forudsiger maskinen ikke. Så det er nødvendigt at differentiere betydningen af ​​hvert ord for at forberede datasættet til maskinindlæring. Og her bruges stemming til at kategorisere den samme type data ved at få sit rodord.

Lad os implementere dette med et Python-program.NLTK har en algoritme kaldet "PorterStemmer". Denne algoritme accepterer listen over tokeniserede ord og stammer det til rodord.

Program til forståelse af stemming

from nltk.stem import PorterStemmere_words= ["wait", "waiting", "waited", "waits"]ps =PorterStemmer()for w in e_words:rootWord=ps.stem(w)print(rootWord)

Output :

waitwaitwaitwait

Kode Forklaring:

  • Der er et stammemodul i NLTk, der importeres. Hvis hvis du importerer det komplette modul, bliver programmet tungt, da det indeholder tusinder af linjer med koder. Så fra hele stammemodulet importerede vi kun "PorterStemmer".
  • Vi udarbejdede en dummy-liste med variationsdata for det samme ord.
  • Der oprettes et objekt, der hører til klasse nltk.stem.porter.PorterStemmer.
  • Desuden sendte vi den til PorterStemmer en efter en ved hjælp af "for" -sløjfen. Endelig fik vi output rodord for hvert ord nævnt på listen.

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, som hjælper med bedre maskinuddannelse.

Nu passerer vi en komplet sætning og kontrollerer for dens opførsel som output.

Program:

from nltk.stem import PorterStemmerfrom nltk.tokenize import sent_tokenize, word_tokenizesentence="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)

Produktion:

helloguru99,youhavebuildaverigoodsiteandIlovevisityoursite

Kode Forklaring

  • Pakke PorterStemer importeres fra modulstamme
  • Pakker til tokenisering af sætning såvel som ord importeres
  • Der skrives en sætning, som skal tokeniseres i næste trin.
  • Word tokenization 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 kodelinjen 5

Konklusion:

Stemming er et modul til databehandling. Det engelske sprog har mange variationer af et enkelt ord. Disse variationer skaber tvetydighed i maskinlæringstræning og forudsigelse. For at skabe en vellykket model er det vigtigt at filtrere sådanne ord og konvertere til samme type sekventerede data ved hjælp af stemming. Dette er også en vigtig teknik til at hente række data fra et sæt sætning og fjernelse af overflødige data, også kendt som normalisering.

Hvad er Lemmatisering?

Lemmatisering er den algoritmiske proces til at finde et ords lemma afhængigt af deres betydning. Lemmatisering refererer normalt til den morfologiske analyse af ord, der sigter mod at fjerne bøjningsendelser. Det hjælper med at returnere basis- eller ordbogsformen af ​​et ord, der er kendt som lemmaet. NLTK Lemmatiseringsmetoden er baseret på WorldNets indbyggede morf-funktion. Tekstforbehandling omfatter både stemming og lemmatisering. Mange mennesker finder de to udtryk forvirrende. Nogle behandler disse som de samme, men der er forskel på disse begge. Lemmatisering foretrækkes frem for førstnævnte på grund af nedenstående grund.

Hvorfor er Lemmatisering bedre end Stemming?

Stemming algoritme 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 basisformen for alle dets bøjningsformer. Der kræves dybdegå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 rette form vil blive set i ordbogen. Derfor hjælper lemmatisering med at danne bedre maskinlæringsfunktioner.

Kode for at skelne mellem lemmatisering og stemming

Stemming kode

import nltkfrom nltk.stem.porter import PorterStemmerporter_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)))

Produktion:

Stemming for studies is studiStemming for studying is studiStemming for cries is criStemming for cry is cri

Lemmatiseringskode

import nltkfrom nltk.stem import WordNetLemmatizerwordnet_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)))

Produktion:

Lemma for studies is studyLemma for studying is studyingLemma for cries is cryLemma for cry is cry

Diskussion af output:

Hvis du ser stemming til studier og studier, er output det samme (studi), men lemmatizer giver forskellige lemmaer for både tokens-studier til studier og studier til studier. Så når vi har brug for at lave funktionssæt til at træne maskine, ville det være godt, hvis lemmatisering foretrækkes.

Brug af Lemmatizer:

Lemmatizer minimerer tvetydighed i teksten. Eksempel ord som cykel eller cykler konverteres til basisord cykel. Dybest set vil det konvertere alle ord med 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 præcis bliver din maskinlæringsmodel. Lemmatizer sparer også hukommelse såvel som beregningsomkostninger.

Realtidseksempel, der viser brugen af ​​Wordnet-lemmatisering og POS-tagging i Python

from nltk.corpus import wordnet as wnfrom nltk.stem.wordnet import WordNetLemmatizerfrom nltk import word_tokenize, pos_tagfrom collections import defaultdicttag_map = defaultdict(lambda : wn.NOUN)tag_map['J'] = wn.ADJtag_map['V'] = wn.VERBtag_map['R'] = wn.ADVtext = "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 corpus reader 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 kortlægges med værdien fra wordnet-ordbogen. Vi har taget det eneste første bogstav, da vi vil bruge det senere i sløjfen.
  • Tekst skrives og tokeniseres.
  • Objekt lemma_function oprettes, som vil blive brugt inde i sløjfen
  • Loop køres og lemmatize tager to argumenter, det ene er token og det andet er en kortlægning af pos_tag med wordnet-værdi.

Produktion:

guru99 => guru99is => betotally => totallynew => newkind => kindof => oflearning => learnexperience => experience. => .

Lemmatisering har et tæt forhold til wordnet-ordbogen, så det er vigtigt at studere dette emne, så vi holder det som det næste emne

Interessante artikler...