Tüvestamine ja lemmatiseerimine sisse Python NLTK koos näidetega
⚡ Nutikas kokkuvõte
Tüve loomine ja lemmatiseerimine on teksti normaliseerimise tehnikad, mis Python NLTK, mis taandab sõnavariatsioonid ühisele baasile, kus tüvest tulenevad põllukultuuride järelliited lisatakse kiiresti kontekstita ja lemmatiseerimine tagastab tõelise sõnastikusõna koos tähendusega.

Milles seisneb tüvestamine ja lemmatiseerimine Python NLTK?
Tüvestamine ja lemmatiseerimine in Python NLTK on loomuliku keele töötlemiseks mõeldud teksti normaliseerimise tehnikad. Neid tehnikaid kasutatakse laialdaselt teksti eeltöötluseks. Varreotsingu ja lemmatiseerimise erinevus seisneb selles, et varreotsingu puhul on tegemist kiirema meetodiga, kuna see lõikab sõnu konteksti teadmata, samas kui lemmatiseerimise puhul on tegemist aeglasema meetodiga, kuna see teab sõnade konteksti enne töötlemist.
Mis on Stemming?
Stemming on meetod sõnade normaliseerimiseks Natural Language ProcessingSee on tehnika, mille puhul lauses olevad sõnad teisendatakse otsingu lühendamiseks järjestuseks. Selle meetodi puhul normaliseeritakse sõnad, millel on sama tähendus, kuid mõned variatsioonid vastavalt kontekstile või lausele. Teisisõnu, on üks tüvisõna, kuid samal sõnal on palju variatsioone. Näiteks tüvisõna on „sööma“ ja selle variatsioonid on „sööb, söömine, söödud jne“. Samamoodi, tüve moodustamise abil ... Python, leiame mis tahes variatsiooni tüve.
Näiteks:
He was riding. He was taking the ride.
Kahes ülaltoodud lauses on tähendus sama, st tegemist on minevikus toimunud ratsutamistegevusega. Inimene saab kergesti aru, et mõlemad tähendused on samad. Masinate jaoks on need laused aga erinevad. Seega on neid raske samaks andmereale teisendada. Kui me ei paku sama andmestikku, siis masin ei suuda ennustada. Seega on vaja eristada iga sõna tähendust, et valmistada andmestik masinõppeks ette. Siin kasutatakse tüvede loomist sama tüüpi andmete kategoriseerimiseks, leides nende tüvisõna.
Rakendame selle a-ga Python programm. NLTK-l on algoritm nimega PorterStemmerSee algoritm aktsepteerib tokeniseeritud sõnade loendi ja tükeldab need tüvisõnadeks.
Programm tüvede mõistmiseks
from nltk.stem import PorterStemmer e_words= ["wait", "waiting", "waited", "waits"] ps =PorterStemmer() for w in e_words: rootWord=ps.stem(w) print(rootWord)
Väljund:
wait wait wait wait
Code Selgitus:
- NLTK-s on tüvimoodul, mis imporditakse. Kui impordite kogu mooduli, muutub programm raskeks, kuna see sisaldab tuhandeid koodiridu. Seega importisime kogu tüvimoodulist ainult „PorterStemmeri“.
- Koostasime sama sõna variatsiooniandmete näiva loendi.
- Luuakse objekt, mis kuulub klassi nltk.stem.porter.PorterStemmer.
- Edastasime selle PorterStemmerile ükshaaval „for“ tsükli abil. Lõpuks saime väljundiks iga loendis mainitud sõna tüvesõna.
Eelnevast lähtuvalt on tüve moodustamine oluline eeltöötlusetapp, kuna see eemaldab samas sõnas redundantsuse ja variatsioonid. Selle tulemusena andmed filtreeritakse, mis aitab paremini masinõpet teha. Nüüd edastame terve lause ja kontrollime selle väljundit.
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)
Väljund:
hello
guru99
,
you
have
build
a
veri
good
site
and
I
love
visit
your
site
Code Selgitus:
- Pakett PorterStemmer imporditakse mooduli tüvest.
- Imporditakse nii lausete kui ka sõnade tokeniseerimise pakette.
- Kirjutatakse lause, mis tuleb järgmises etapis märgistada.
- Siin luuakse PorterStemmeri objekt.
- Käivitatakse tsükkel ja iga sõna tüvestamine toimub koodireal 5 loodud objekti abil.
Lühidalt öeldes on tüvendamine andmete eeltöötlusmoodul. Inglise keeles on ühest sõnast palju variatsioone, mis tekitavad masinõppe treenimisel ja ennustamisel ebaselgust. Eduka mudeli loomiseks on oluline sellised sõnad tüvendamise abil samadesse järjestatud andmetesse filtreerida. Seda nimetatakse ka normaliseerimiseks.
Mis on lemmatiseerimine?
Lemmatiseerimine NLTK-s on see algoritmiline protsess, mille käigus leitakse sõna lemma selle tähenduse ja konteksti põhjal. Lemmatiseerimine viitab tavaliselt sõnade morfoloogilisele analüüsile, mille eesmärk on eemaldada käändelõpud. See aitab tagastada sõna baas- või sõnastikuvormi, mida tuntakse lemmana. NLTK lemmatiseerimise meetod põhineb WordNeti sisseehitatud morfimisfunktsioonil. Teksti eeltöötlus hõlmab nii tüve moodustamist kui ka lemmatiseerimist. Paljud inimesed leiavad, et need kaks terminit ajavad omavahel segamini. Mõned käsitlevad neid samamoodi, kuid tüve moodustamise ja lemmatiseerimise vahel on erinevus. Lemmatiseerimist eelistatakse esimesele allpool toodud põhjusel.
Miks on lemmatiseerimine parem kui tüvistamine?
Tüve moodustamise algoritm töötab sõnast järelliite lõikamise teel. Laiemas tähenduses lõikab see välja kas sõna alguse või lõpu. Seevastu lemmatiseerimine on võimsam toiming ja see võtab arvesse sõnade morfoloogilist analüüsi. See tagastab lemma, mis on kõigi selle käändevormide baasvorm. Sõnaraamatute loomiseks ja sõna õige vormi otsimiseks on vaja põhjalikke keeleteadmisi. Tüve moodustamine on üldine toiming, samas kui lemmatiseerimine on intelligentne toiming, kus õige vorm otsitakse sõnaraamatust. Seega aitab lemmatiseerimine paremini moodustada... masinõpe funktsioone.
Code eristada lemmatiseerimist ja tüvistamist
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)))
Väljund:
Stemming for studies is studi Stemming for studying is studi Stemming for cries is cri Stemming for cry is cri
Lemmatiseerimine 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)))
Väljund:
Lemma for studies is study Lemma for studying is studying Lemma for cries is cry Lemma for cry is cry
Väljundi arutelu
Kui vaadata „studies” ja „studying” puhul tüve moodustamist, on väljund sama (studi), kuid NLTK lemmatiseerija pakub mõlema märgi jaoks erineva lemma: „study” „studies” jaoks ja „studying” „studying” jaoks. Seega, kui meil on vaja luua tunnuste komplekt masina treenimiseks, oleks suurepärane, kui eelistataks lemmatiseerimist.
Lemmatizeri kasutusjuht
Lemmatiseerija minimeerib teksti ebaselgust. Sõnad nagu "jalgratas" või "jalgrattad" teisendatakse baassõnaks "jalgratas". See teisendab kõik sama tähendusega, kuid erineva esitusega sõnad oma baasvormi, vähendades sõnade tihedust ja helping Valmista ette täpsed tunnused masina treenimiseks. Mida puhtamad on andmed, seda täpsem on sinu masinõppe mudel. NLTK Lemmatiser säästab ka mälu ja arvutuskulusid.
Reaalajas näide WordNeti lemmatiseerimise ja POS-sildistamise kasutamisest 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)
Väljund:
guru99 => guru99 is => be totally => totally new => new kind => kind of => of learning => learn experience => experience . => .
Code Selgitus:
- Korpuse lugeja wordnet imporditakse ja WordNetLemmatizer imporditakse wordnetist.
- Sõnade märgistamine ja kõneosade märgend imporditakse nltk-st ja vaikesõnastik kollektsioonidest.
- Luuakse sõnastik, kus pos_tag esimene täht on võti, mis on kaardistatud Wordneti sõnastiku väärtusega.
- Tekst kirjutatakse ja tokeniseeritakse ning tsükli sees kasutamiseks luuakse objekt lemma_function.
- Tsükkel käivitatakse ja lemmatize võtab kaks argumenti: märgi ja kaardi.ping pos_tag-ist koos WordNeti väärtusega.
Python Lemmatiseerimisel on tihe seos WordNeti sõnastik, seega on oluline seda teemat järgmisena uurida.
