Stemming ja lemmatisaatio sisään Python NLTK esimerkkien kanssa
Mitä stemming ja lemmatisaatio ovat Python NLTK?
Stemming ja lemmatisaatio in Python NLTK ovat tekstin normalisointitekniikoita luonnollisen kielen käsittelyyn. Näitä tekniikoita käytetään laajasti tekstin esikäsittelyssä. Ero stemmingin ja lemmatisoinnin välillä on se, että johtuminen on nopeampaa, koska se leikkaa sanoja kontekstia tuntematta, kun taas lemmatisointi on hitaampaa, koska se tuntee sanojen kontekstin ennen käsittelyä.
Mikä on Stemming?
Sanan vartalo on menetelmä sanojen normalisoimiseksi Luonnollinen kielen käsittely. Se on tekniikka, jossa lauseen sanajoukko muunnetaan sekvenssiksi sen haun lyhentämiseksi. Tässä menetelmässä sanat, joilla on sama merkitys, mutta joilla on joitain muunnelmia kontekstin tai lauseen mukaan, normalisoidaan.
Toisella sanalla on yksi juurisana, mutta samoista sanoista on monia muunnelmia. Esimerkiksi juurisana on "syö" ja sen muunnelmat ovat "syö, syö, syö ja niin". Samalla tavalla Stemmingin avulla Python, voimme löytää minkä tahansa muunnelman juurisanan.
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 molemmat lauseet ovat erilaisia. Tästä syystä sen muuntaminen samaksi tietoriville oli vaikeaa. Jos emme tarjoa samaa tietojoukkoa, kone ei pysty ennustamaan. Joten on tarpeen erottaa kunkin sanan merkitys, jotta tietojoukko voidaan valmistaa koneoppimista varten. Ja tässä stemmingiä käytetään luokittelemaan samantyyppisiä tietoja hankkimalla sen juurisana.
Toteutetaan tämä a Python program.NLTK:lla on algoritmi nimeltä "PorterStemmer". Tämä algoritmi hyväksyy tokenisoitujen sanojen luettelon ja muodostaa sen juurisanaksi.
Ohjelma Stemmingin 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)
ulostulo:
wait wait wait wait
Koodin selitys:
- NLTk:ssa on varsimoduuli, joka tuodaan. Jos tuot koko moduulin, ohjelma tulee raskaaksi, koska se sisältää tuhansia rivejä koodeja. Joten koko varsimoduulista toimme vain "PorterStemmer".
- Laadimme valeluettelon saman sanan muunnelmatiedoista.
- Luodaan objekti, joka kuuluu luokkaan nltk.stem.porter.PorterStemmer.
- Lisäksi välitimme sen PorterStemmerille yksitellen "for" -silmukalla. Lopuksi saimme jokaisen luettelossa mainitun sanan tulosteen juurisanan.
Yllä olevasta selityksestä voidaan myös päätellä, että stemmingä pidetään tärkeänä esikäsittelyvaiheena, koska se poisti datan redundanssin ja saman sanan variaatiot. Tämän seurauksena tiedot suodatetaan, mikä auttaa parantamaan koneen koulutusta.
Nyt välitämme kokonaisen lauseen ja tarkistamme sen käyttäytymisen ulostulona.
Ohjelmoida:
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
Koodin selitys:
- Paketti PorterStemer on tuotu moduulivarresta
- Paketit virkkeen ja sanojen tokenointia varten tuodaan
- Lause kirjoitetaan, joka tulee tokenisoida seuraavassa vaiheessa.
- Tässä vaiheessa toteutetaan sanan tokenisaatio, joka perustuu lemmatisaatioon.
- PorterStemmerin objekti luodaan tähän.
- Silmukka ajetaan ja jokaisen sanan johdos tehdään koodirivillä 5 luodulla objektilla
Johtopäätös:
Stemming on tietojen esikäsittelymoduuli. Englannin kielessä on useita muunnelmia yhdestä sanasta. Nämä vaihtelut luovat epäselvyyttä koneoppimisen koulutuksessa ja ennustamisessa. Onnistuneen mallin luomiseksi on elintärkeää suodattaa tällaiset sanat ja muuntaa saman tyyppisiksi sekvensoiduiksi tiedoiksi johtuen. Tämä on myös tärkeä tekniikka rivitietojen saamiseksi lausejoukosta ja redundantin tiedon poistamiseksi, joka tunnetaan myös normalisoimisena.
Mitä on lemmatisaatio?
perusmuotoistaminen NLTK:ssa on algoritminen prosessi sanan lemman löytämiseksi sen merkityksestä ja kontekstista riippuen. Lemmatisaatiolla tarkoitetaan yleensä sanojen morfologista analyysiä, jolla pyritään poistamaan taivutuspäätteet. Se auttaa palauttamaan lemma-nimellä tunnetun sanan perus- tai sanakirjamuodon.
NLTK Lemmatization -menetelmä perustuu WorldNetin sisäänrakennettuun morph-funktioon. Tekstin esikäsittely sisältää sekä stemmingin että lemmatisoinnin. Monet ihmiset pitävät kahta termiä hämmentävänä. Jotkut pitävät näitä samoina, mutta stemmingin ja lemmatisoinnin välillä on ero. Lemmatisaatio on parempi kuin edellisen alla olevan syyn vuoksi.
Miksi lemmatisaatio on parempi kuin stemming?
Varsinainen algoritmi toimii leikkaamalla pääte sanasta. Laajemmassa merkityksessä leikkaa joko sanan alun tai lopun.
Päinvastoin, lemmatisaatio on tehokkaampi operaatio, ja se ottaa huomioon sanojen morfologisen analyysin. Se palauttaa lemman, joka on kaikkien sen taivutusmuotojen perusmuoto. Sanakirjojen luomiseen ja sanan oikean muodon etsimiseen tarvitaan syvällistä kielitaitoa. Varsinainen operaatio on yleinen operaatio, kun taas lemmatointi on älykäs operaatio, jossa oikeaa muotoa tarkastellaan sanakirjasta. Siksi lemmatisaatio auttaa muodostumaan paremmin koneoppiminen ominaisuuksia.
Koodi, jolla erotetaan lemmatisaatio ja stemming
Alkukoodi:
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
Lemmatisointikoodi:
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 katsot lähtökohtana opiskelua ja opiskelua, tulos on sama (studi), mutta NLTK lemmatizer tarjoaa erilaisen lemman molemmille opintoihin opiskelulle ja opiskelulle opiskelulle. Joten kun meidän on tehtävä ominaisuussarja koneen kouluttamiseen, olisi hienoa, jos lemmatisointi olisi parempi.
Lemmatizerin käyttötapaus
Lemmatizer minimoi tekstin epäselvyyden. Esimerkkisanat, kuten polkupyörä tai polkupyörät, muunnetaan perussanaksi polkupyörä. Pohjimmiltaan se muuntaa kaikki sanat, joilla on sama merkitys, mutta erilainen esitysmuoto, perusmuotoonsa. Se vähentää sanan tiheyttä annetussa tekstissä ja auttaa valmistamaan tarkkoja ominaisuuksia harjoituskoneeseen. Mitä puhtaampi data, sitä älykkäämpi ja tarkempi koneoppimismallisi on. NLTK Lemmatizer säästää myös muistia ja laskentakustannuksia.
Reaaliaikainen esimerkki Wordnet Lemmatizationin ja POS Taggingin 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)
Koodin selitys
- Ensin tuodaan korpuslukija wordnet.
- WordNetLemmatizer on tuotu Wordnetistä.
- Word tokenize sekä puhetunnisteen osat tuodaan nltk:stä.
- Oletussanakirja tuodaan kokoelmista.
- Sanakirja luodaan, jossa pos_tag (ensimmäinen kirjain) ovat avainarvoja, joiden arvot on yhdistetty wordnet-sanakirjan arvoon. Olemme ottaneet ainoan ensimmäisen kirjaimen, koska käytämme sitä myöhemmin silmukassa.
- Teksti on kirjoitettu ja tokenoitu.
- Objekti lemma_function luodaan, jota käytetään silmukan sisällä.
- Silmukka ajetaan ja lemmatize ottaa kaksi argumenttia, joista toinen on token ja toinen on pos_tag-kuvaus wordnet-arvolla.
ulostulo:
guru99 => guru99 is => be totally => totally new => new kind => kind of => of learning => learn experience => experience . => .
Python Lemmatisaatiolla on läheinen yhteys wordnet-sanakirja, joten on välttämätöntä tutkia tätä aihetta, joten pidämme tämän seuraavana aiheena.