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 

Ohjelma johdon ymmärtämiseen

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	 

Ohjelma johdon ymmärtämiseen

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)

Lemmatizerin käyttötapaus

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.