Stemming ja lemmatisaatio sisään Python NLTK esimerkkien kanssa
⚡ Älykäs yhteenveto
Vartalon luominen ja lemmatisointi ovat tekstin normalisointitekniikoita, Python NLTK, joka supistaa sanavariaatiot yhteiseen kantaan, jossa rungon muodostamat sadot muodostavat päätteitä nopeasti ilman kontekstia ja lemmatisointi palauttaa todellisen sanakirjasanan merkityksen avulla.

Mitä stemming ja lemmatisaatio ovat Python NLTK?
Stemming ja lemmatisaatio in Python NLTK on luonnollisen kielen käsittelyyn tarkoitettu tekstin normalisointitekniikka. Näitä tekniikoita käytetään laajalti tekstin esikäsittelyyn. Stemmauksen ja lemmatisoinnin välinen ero on se, että stemmaus on nopeampi, koska se leikkaa sanoja tuntematta kontekstia, kun taas lemmatisointi on hitaampaa, koska se tietää sanojen kontekstin ennen käsittelyä.
Mikä on Stemming?
Sanan vartalo on menetelmä sanojen normalisoimiseksi Luonnollinen kielen käsittelySe on tekniikka, jossa lauseen sanajoukko muunnetaan jonoksi hakujen lyhentämiseksi. Tässä menetelmässä sanat, joilla on sama merkitys, mutta joitain variaatioita asiayhteydestä tai lauseesta riippuen, normalisoidaan. Toisin sanoen on yksi juurisana, mutta samasta sanasta on useita variaatioita. Esimerkiksi juurisana on ”syö” ja sen variaatiot ovat ”syö, syöminen, syödään ja niin edelleen”. Samalla tavalla, stemmingin avulla Python, voimme löytää minkä tahansa muunnelman kantasanan.
Esimerkiksi:
He was riding. He was taking the ride.
Yllä olevissa kahdessa lauseessa merkitys on sama, eli ratsastustoiminta menneisyydessä. Ihminen ymmärtää helposti, että molemmat merkitykset ovat samat. Mutta koneille lauseet ovat erilaisia. Siksi niiden muuntaminen samaksi datariviksi on vaikeaa. Jos emme tarjoa samaa datajoukkoa, kone ei pysty ennustamaan. Siksi on tarpeen erottaa sanojen merkitys, jotta datajoukko voidaan valmistella koneoppimista varten. Tässä käytetään stemmausta saman datatyypin luokittelemiseen hakemalla sen juurisana.
Toteutetaan tämä käyttämällä Python ohjelma. NLTK:lla on algoritmi nimeltä PorterStemmerTämä algoritmi hyväksyy luettelon tokenisoiduista sanoista ja muodostaa niistä juurisanat.
Ohjelma johdon ymmärtämiseen
from nltk.stem import PorterStemmer e_words= ["wait", "waiting", "waited", "waits"] ps =PorterStemmer() for w in e_words: rootWord=ps.stem(w) print(rootWord)
lähtö:
wait wait wait wait
Code Selitys:
- NLTK:ssa on stem-moduuli, joka tuodaan. Jos tuot koko moduulin, ohjelmasta tulee raskas, koska se sisältää tuhansia koodirivejä. Joten koko stem-moduulista tuotiin vain "PorterStemmer".
- Laadimme valeluettelon saman sanan muunnelmatiedoista.
- Luodaan objekti, joka kuuluu luokkaan nltk.stem.porter.PorterStemmer.
- Välitimme sen PorterStemmerille yksi kerrallaan käyttämällä "for"-silmukkaa. Lopuksi saimme tulosteena jokaisen listassa mainitun sanan juurisanan.
Yllä olevan perusteella stemmaaminen on tärkeä esikäsittelyvaihe, koska se poistaa redundanssia ja variaatioita samasta sanasta. Tämän seurauksena data suodattuu, mikä auttaa parantamaan koneenkoulutusta. Nyt välitämme kokonaisen lauseen ja tarkistamme sen tulosteen.
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)
lähtö:
hello
guru99
,
you
have
build
a
veri
good
site
and
I
love
visit
your
site
Code Selitys:
- PorterStemmer-paketti tuodaan moduulin varresta.
- Lauseiden ja sanojen tokenisointiin tarkoitetut paketit tuodaan.
- Lause kirjoitetaan, joka tulee tokenisoida seuraavassa vaiheessa.
- PorterStemmerin objekti luodaan tähän.
- Suoritetaan silmukka ja jokaisen sanan vartalo muodostetaan koodirivillä 5 luodun objektin avulla.
Lyhyesti sanottuna stemmaus on datan esikäsittelymoduuli. Englannin kielessä on monia variaatioita yhdestä sanasta, mikä aiheuttaa epäselvyyttä koneoppimisen koulutuksessa ja ennustamisessa. Onnistuneen mallin rakentamiseksi on tärkeää suodattaa tällaiset sanat samaan sekvensoituun dataan stemmauksen avulla. Tätä kutsutaan myös normalisoinniksi.
Mitä on lemmatisaatio?
perusmuotoistaminen NLTK:ssa on algoritminen prosessi, jossa löydetään sanan lemmat sen merkityksen ja asiayhteyden perusteella. Lemmatisointi viittaa yleensä sanojen morfologiseen analyysiin, jonka tarkoituksena on poistaa taivutuspäätteet. Se auttaa palauttamaan sanan perusmuodon eli sanakirjamuodon, joka tunnetaan nimellä lemmatisointi. NLTK:n lemmatisointimenetelmä perustuu WordNetin sisäänrakennettuun morph-funktioon. Tekstin esikäsittely sisältää sekä stemmauksen että lemmatisoinnin. Monet ihmiset hämmentävät näitä kahta termiä. Jotkut pitävät niitä samana, mutta stemmauksen ja lemmatisoinnin välillä on ero. Lemmatisointia suositaan ensin mainittuun verrattuna alla olevasta syystä.
Miksi lemmatisaatio on parempi kuin stemming?
Vartalonmuodostusalgoritmi toimii leikkaamalla sanasta päätteen. Laajemmassa merkityksessä se leikkaa joko sanan alun tai lopun. Lemmatisointi on sitä vastoin tehokkaampi operaatio, ja se ottaa huomioon sanojen morfologisen analyysin. Se palauttaa lemman, joka on kaikkien sen taivutusmuotojen perusmuoto. Sanakirjojen luominen ja sanan oikean muodon etsiminen vaatii syvällistä kielitieteellistä tietämystä. Vartalonmuodostus on yleinen operaatio, kun taas lemmatisointi on älykäs operaatio, jossa oikea muoto etsitään sanakirjasta. Näin ollen lemmatisointi auttaa muodostamaan paremmin koneoppiminen ominaisuuksia.
Code erottaa lemmatisointi ja stemming
Sanan vartalo 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)))
lähtö:
Stemming for studies is studi Stemming for studying is studi Stemming for cries is cri Stemming for cry is cri
perusmuotoistaminen 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)))
lähtö:
Lemma for studies is study Lemma for studying is studying Lemma for cries is cry Lemma for cry is cry
Tuotoskeskustelu
Jos tarkastellaan stemmausta sekä studies- että studying-lausekkeille, tuloste on sama (studi), mutta NLTK-lemmatisointityökalu tarjoaa eri lemman molemmille tokeneille: study-lauseen studies-lausekkeelle ja studying-lauseen studying-lausekkeelle. Joten kun meidän on luotava ominaisuusjoukko koneen kouluttamiseksi, olisi hienoa, jos lemmatisointia suosittaisiin.
Lemmatizerin käyttötapaus
Lemmatisointitoiminto minimoi tekstin monitulkintaisuuden. Sanat kuten "bicycle" tai "bicycles" muunnetaan perusmuodoksi "bicycle". Se muuntaa kaikki saman merkityksen mutta eri esitystavan omaavat sanat perusmuotoonsa, mikä vähentää sanatiheyttä ja help-arvoa.ping valmistele tarkkoja ominaisuuksia koneen kouluttamista varten. Mitä puhtaampi data on, sitä tarkempi koneoppimismallisi on. NLTK Lemmatizer säästää myös muistia ja laskentakustannuksia.
Reaaliaikainen esimerkki WordNet-lemmatisoinnin ja POS-tunnisteiden käytöstä 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)
lähtö:
guru99 => guru99 is => be totally => totally new => new kind => kind of => of learning => learn experience => experience . => .
Code Selitys:
- Korpuslukijan Wordnet tuodaan ja WordNetLemmatizer tuodaan Wordnetistä.
- Sanatunnisteet ja sanaluokat tuodaan nltk:sta ja oletussanakirja kokoelmista.
- Luodaan sanakirja, jossa pos_tag-muuttujasta ensimmäinen kirjain on avain, joka on yhdistetty Wordnet-sanakirjan arvoon.
- Teksti kirjoitetaan ja tokenisoidaan, ja lemma_function-objekti luodaan silmukan sisäistä käyttöä varten.
- Silmukka suoritetaan ja lemmatize ottaa kaksi argumenttia: tunnuksen ja kartan.ping pos_tag-tunnisteesta wordnet-arvolla.
Python Lemmatisaatiolla on läheinen yhteys WordNet-sanakirja, joten aiheen tutkiminen seuraavaksi on välttämätöntä.
