Stemming och Lemmatisering med Python NLTK

Innehållsförteckning:

Anonim

Vad är Stemming?

Stemming är en slags normalisering av ord. Normalisering är en teknik där en uppsättning ord i en mening omvandlas till en sekvens för att förkorta dess uppslag. Orden som har samma betydelse men har viss variation beroende på sammanhanget eller meningen normaliseras.

I ett annat ord finns det ett rotord, men det finns många variationer av samma ord. Till exempel är rotordet "äta" och dess variationer är "äter, äter, ätit och liknande". På samma sätt kan vi med hjälp av Stemming hitta rotordet för alla variationer.

Till exempel

He was riding.He was taking the ride.

I ovanstående två meningar är innebörden densamma, dvs. ridaktivitet tidigare. En människa kan lätt förstå att båda betydelserna är desamma. Men för maskiner är båda meningarna olika. Således blev det svårt att konvertera den till samma datarad. Om vi ​​inte tillhandahåller samma datauppsättning misslyckas maskinen med att förutsäga. Så det är nödvändigt att skilja innebörden av varje ord för att förbereda datamängden för maskininlärning. Och här används stemming för att kategorisera samma typ av data genom att få dess rotord.

Låt oss implementera detta med ett Python-program. NLK har en algoritm som heter "PorterStemmer". Denna algoritm accepterar listan över tokeniserat ord och stammar det till rotord.

Program för att förstå Stemming

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

Utgång :

waitwaitwaitwait

Kodförklaring:

  • Det finns en stammodul i NLTk som importeras. Om du importerar hela modulen blir programmet tungt eftersom det innehåller tusentals rader med koder. Så från hela stammodulen importerade vi bara "PorterStemmer."
  • Vi utarbetade en dummy-lista över variationer i samma ord.
  • Ett objekt skapas som tillhör klass nltk.stem.porter.PorterStemmer.
  • Vidare skickade vi den till PorterStemmer en efter en med "for" -slingan. Slutligen fick vi utgångsrotord för varje ord som nämns i listan.

Från ovanstående förklaring kan man också dra slutsatsen att stemming betraktas som ett viktigt förbehandlingssteg eftersom det tog bort redundans i data och variationer i samma ord. Som ett resultat filtreras data som hjälper till bättre maskinutbildning.

Nu passerar vi en fullständig mening och kontrollerar dess beteende som utdata.

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

Kodförklaring

  • Paketet PorterStemer importeras från modulstammen
  • Paket för tokenisering av mening såväl som ord importeras
  • En mening skrivs som ska tokeniseras i nästa steg.
  • Word tokenization implementeras i detta steg.
  • Ett objekt för PorterStemmer skapas här.
  • Loop körs och stemming av varje ord görs med hjälp av objektet som skapats i kodraden 5

Slutsats:

Stemming är en databehandlingsmodul. Det engelska språket har många varianter av ett enda ord. Dessa variationer skapar tvetydighet i träning och förutsägelse av maskininlärning. För att skapa en framgångsrik modell är det viktigt att filtrera sådana ord och konvertera till samma typ av sekvenserad data med hjälp av stemming. Detta är också en viktig teknik för att få raddata från en uppsättning meningar och ta bort överflödiga data, även kända som normalisering.

Vad är Lemmatisering?

Lemmatisering är den algoritmiska processen för att hitta ett ords lemma beroende på deras betydelse. Lemmatisering refererar vanligtvis till den morfologiska analysen av ord, som syftar till att ta bort böjningsänden. Det hjälper till att returnera bas- eller ordboksformen för ett ord, som kallas lemma. NLTK Lemmatiseringsmetoden bygger på WorldNets inbyggda morf-funktion. Förbehandling av text inkluderar både stemming och lemmatisering. Många tycker att de två termerna är förvirrande. Vissa behandlar dessa som samma, men det finns en skillnad mellan dessa båda. Lemmatisering är att föredra framför den tidigare på grund av nedanstående anledning.

Varför är Lemmatisering bättre än Stemming?

Stemming algoritm fungerar genom att klippa suffixet från ordet. I bredare mening skär antingen början eller slutet av ordet.

Tvärtom är lemmatisering en mer kraftfull operation, och den tar hänsyn till morfologisk analys av orden. Det returnerar lemmaet som är basformen för alla dess böjningsformer. Fördjupad språklig kunskap krävs för att skapa ordböcker och leta efter ordets rätta form. Stemming är en allmän operation medan lemmatisering är en intelligent operation där rätt form kommer att ses i ordboken. Därför hjälper lemmatisering till att skapa bättre maskininlärningsfunktioner.

Kod för att skilja mellan Lemmatisering och Stemming

Stemming kod

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

Lemmatiseringskod

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 om utdata:

Om du letar efter studier och studier är produktionen densamma (studi) men lemmatizer ger olika lemma för både tokens-studier för studier och studier för studier. Så när vi behöver göra funktionssätt för att träna maskin skulle det vara bra om lemmatisering är att föredra.

Använd fall av Lemmatizer:

Lemmatizer minimerar tvetydighet i texten. Exempelord som cykel eller cyklar omvandlas till grundord cykel. I grund och botten kommer det att konvertera alla ord med samma betydelse men olika representation till deras basform. Det minskar ordtätheten i den givna texten och hjälper till att förbereda de exakta funktionerna för träningsmaskinen. Renare data, desto mer intelligent och exakt blir din maskininlärningsmodell. Lemmatizer sparar också minne såväl som beräkningskostnader.

Realtidsexempel som visar användning av Wordnet Lemmatisering och POS-taggning 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)

Kodförklaring

  • För det första importeras corpus reader wordnet.
  • WordNetLemmatizer importeras från wordnet
  • Word tokenize såväl som delar av taltaggen importeras från nltk
  • Standardordbok importeras från samlingar
  • Ordbok skapas där pos_tag (första bokstaven) är nyckelvärden vars värden mappas med värdet från wordnet-ordlistan. Vi har tagit den enda första bokstaven eftersom vi kommer att använda den senare i slingan.
  • Text skrivs och tokeniseras.
  • Objekt lemma_function skapas som kommer att användas inuti slingan
  • Loop körs och lemmatize tar två argument, det ena är token och det andra är en mappning av pos_tag med wordnet-värde.

Produktion:

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

Lemmatisering har en nära relation till wordnet-ordlistan, så det är viktigt att studera detta ämne, så vi behåller detta som nästa ämne