Stemming ja Lemmatization Python NLTK-ga

Lang L: none (table-of-contents):

Anonim

Mis on Stemming?

Stemming on omamoodi sõnade normaliseerimine. Normaliseerimine on tehnika, kus lause sõnakomplekt muundatakse järjestuseks, et lühendada selle otsimist. Sõnad, millel on sama tähendus, kuid millel on kontekstist või lausest tulenevalt mõningane variatsioon, normaliseeritakse.

Teises sõnas on üks tüvisõna, kuid samade sõnade variatsioone on palju. Näiteks on tüvisõna "söö" ja selle variatsioonid on "sööb, söö, sööb ja meeldib". Samamoodi võime Stemmingu abil leida mis tahes variatsioonide tüvisõna.

Näiteks

He was riding.He was taking the ride.

Kahes ülaltoodud lauses on tähendus sama, st minevikus ratsutamistegevus. Inimene saab hõlpsasti aru, et mõlemad tähendused on ühesugused. Kuid masinate puhul on mõlemad laused erinevad. Seega muutus selle samaks andmereaks muutmine raskeks. Kui me ei esita sama andmekogumit, ei suuda masin ennustada. Seega on masinõppe jaoks andmekogumi ettevalmistamiseks vaja eristada iga sõna tähendust. Ja siin kasutatakse stemmingut sama tüüpi andmete kategoriseerimiseks, saades selle tüvisõna.

Rakendame selle Pythoni programmiga. NLTK-l on algoritm nimega "PorterStemmer". See algoritm aktsepteerib märgistatud sõna loendi ja varustab selle tüvisõnaks.

Programm Stemmingi mõistmiseks

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

Väljund :

waitwaitwaitwait

Koodi selgitus:

  • NLTk-s on tüvemoodul, mis imporditakse. Kui impordite kogu mooduli, muutub programm raskeks, kuna see sisaldab tuhandeid koodiridu. Nii et kogu tüvemoodulist importisime ainult "PorterStemmeri".
  • Koostasime ühe ja sama sõna variatsiooniandmete loendi.
  • Luuakse objekt, mis kuulub klassi nltk.stem.porter.PorterStemmer.
  • Edastasime selle ükshaaval PorterStemmerile, kasutades silmus "for". Lõpuks saime iga loendis mainitud sõna väljundsõna.

Eespool toodud selgituse põhjal võib järeldada ka seda, et juurimist peetakse oluliseks eeltöötlemise etapiks, kuna see eemaldas andmete koondamise ja sama sõna variatsioonid. Selle tulemusena filtreeritakse andmed, mis aitavad masinaõppes paremini osaleda.

Nüüd anname täieliku lause ja kontrollime selle käitumist väljundina.

Programm:

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)

Väljund:

helloguru99,youhavebuildaverigoodsiteandIlovevisityoursite

Koodi selgitus

  • Pakett PorterStemer imporditakse mooduli tüvest
  • Importitakse nii lause kui ka sõnade märgistamiseks mõeldud pakette
  • Kirjutatakse lause, mis tuleb järgmises etapis märgistada.
  • Selles etapis rakendatakse sõna tokeniseerimine.
  • Siin luuakse objekt PorterStemmerile.
  • Käivitatakse aas ja iga sõna tüveliseerimine toimub koodireal 5 loodud objekti abil

Järeldus:

Stemming on andmete eeltöötlemise moodul. Inglise keeles on palju ühe sõna variatsioone. Need variatsioonid tekitavad masinaõppe koolituses ja ennustamises ebaselgust. Eduka mudeli loomiseks on hädavajalik sellised sõnad filtreerida ja teisendada samamoodi järjestatud andmeteks, kasutades tuletamist. Samuti on see oluline tehnika reaandmete saamiseks lausekomplektist ja üleliigsete andmete eemaldamine, mida nimetatakse ka normaliseerimiseks.

Mis on Lemmatization?

Lemmatization on sõna lemma leidmise algoritmiline protsess sõltuvalt nende tähendusest. Lemmatization viitab tavaliselt sõnade morfoloogilisele analüüsile, mille eesmärk on eemaldada käändelõpud. See aitab tagasi sõna põhi- või sõnastiku vormi, mida tuntakse lemma nime all. NLTK Lemmatization meetod põhineb WorldNeti sisseehitatud morph-funktsioonil. Teksti eeltöötlus hõlmab nii tuletamist kui ka lemmatiseerimist. Paljude inimeste arvates on need kaks mõistet segased. Mõni kohtleb neid samamoodi, kuid mõlemal on erinevus. Eelistatuile eelistatakse lemmatiseerimist allpool toodud põhjuse tõttu.

Miks on Lemmatization parem kui Stemming?

Tuletav algoritm töötab lõigates sõnast järelliite. Laiemas mõttes lõikab kas sõna algust või lõppu.

Vastupidi, Lemmatization on võimsam toiming ja see võtab arvesse sõnade morfoloogilist analüüsi. See tagastab lemma, mis on kõigi selle käändevormide põhivorm. Sõnastike loomiseks ja sõna õige vormi otsimiseks on vaja põhjalikke keeleteadmisi. Stemming on üldine operatsioon, samas kui lemmatization on intelligentne toiming, kus sõnastikus vaadatakse õiget vormi. Seega aitab lemmatiseerimine paremaid masinõppe funktsioone.

Kood Lemmatizationi ja Stemmingi eristamiseks

Stemming kood

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)))

Väljund:

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

Lemmatization kood

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)))

Väljund:

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

Väljundi arutelu:

Kui näete õppetööst ja õppimisest tulenevat, on väljund sama (studi), kuid lemmatizer pakub erinevat lemma nii õppemärkide õppimiseks kui ka õppimiseks. Nii et kui peame seadma rongimasinale seatud funktsioonid, oleks tore, kui eelistatakse lemmatiseerimist.

Lemmatizer'i juhtum:

Lemmatizer minimeerib teksti ebaselgust. Näitesõnad, näiteks jalgratas või jalgrattad, teisendatakse põhisõnaks jalgratas. Põhimõtteliselt teisendab see kõik sama tähendusega, kuid erineva esitusega sõnad nende põhivormiks. See vähendab antud teksti sõnatihedust ja aitab treeningmasina täpsete omaduste ettevalmistamisel. Mida puhtam, seda intelligentsem ja täpsem on teie masinõppe mudel. Lemmatizerwill säästab ka mälu ja arvutuskulusid.

Reaalajas näide Wordneti Lemmatizationi ja POS-i sildistamise kasutamisest Pythonis

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)

Koodi selgitus

  • Esiteks imporditakse korpuselugeja sõnavõrk.
  • WordNetLemmatizer imporditakse Wordnetist
  • Nii Word tokenize kui ka kõnetunnistuse osad imporditakse nltk-st
  • Vaikesõnastik imporditakse kogudest
  • Sõnastik luuakse seal, kus pos_tag (esimene täht) on põhiväärtused, mille väärtused vastendatakse Wordnet-sõnaraamatu väärtusega. Oleme võtnud ainsa esimese tähe, kuna kasutame seda hiljem tsüklis.
  • Tekst on kirjutatud ja märgistatud.
  • Luuakse objekti lemma_function, mida kasutatakse silmuse sees
  • Loop on käivitatud ja lemmatize võtab kaks argumenti, üks on märgiline ja teine ​​pos_tagi kaardistamine wordnet-väärtusega.

Väljund:

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

Lemmatization on tihedas seoses Wordnet sõnastikuga, seetõttu on oluline seda teemat uurida, nii et me hoiame seda järgmise teemana