Stemming and Lemmatization in Python NLTK példákkal

Miben rejlik a Stemming és a Lemmatization? Python NLTK?

Száradás és lemmatizáció in Python Az NLTK a természetes nyelvi feldolgozás szövegnormalizálási technikái. Ezeket a technikákat széles körben használják szöveg-előfeldolgozásra. A tőképző és a lemmatizáció közötti különbség az, hogy a szótő gyorsabb, mivel a szövegkörnyezet ismerete nélkül vágja el a szavakat, míg a lemmatizálás lassabb, mivel feldolgozás előtt ismeri a szavak kontextusát.

Mi az a Stemming?

fakadó a szavak normalizálásának módszere Természetes nyelvi feldolgozás. Ez egy olyan technika, amelyben egy mondatban lévő szavakat sorozatmá alakítanak, hogy lerövidítsék a keresést. Ebben a módszerben az azonos jelentésű, de a szövegkörnyezettől vagy mondattól függően eltérő szavakat normalizáljuk.

Más szóval, van egy gyökérszó, de ugyanazoknak a szavaknak sok változata van. Például az alapszó az „enni”, a változatai pedig az „eats, eaten, eaten and hasonló”. Ugyanígy, a Stemming in segítségével Python, bármelyik variáció alapszavát megtaláljuk.

Például

He was riding.	
He was taking the ride.

A fenti két mondatban a jelentés ugyanaz, azaz a múltbeli lovaglás. Az ember könnyen megérti, hogy mindkét jelentés ugyanaz. De a gépeknél mindkét mondat más. Így nehézkessé vált ugyanabba az adatsorba konvertálni. Ha nem ugyanazt az adatkészletet adjuk meg, akkor a gép nem képes előre jelezni. Szükséges tehát az egyes szavak jelentésének megkülönböztetése az adathalmaz gépi tanulásra való felkészítéséhez. És itt a törzsszót az azonos típusú adatok kategorizálására használják a gyökérszavak lekérésével.

Valósítsuk meg ezt a Python program.NLTK-nak van egy „PorterStemmer” nevű algoritmusa. Ez az algoritmus elfogadja a tokenizált szavak listáját, és gyökérszóvá alakítja.

Program a Stemming megértéséhez

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

teljesítmény:

wait	
wait	
wait	
wait 

Program az eredet megértéséhez

Kód magyarázata:

  • Az NLTk-ban van egy szármodul, amely importálva van. Ha a teljes modult importálja, akkor a program nehézzé válik, mivel több ezer sornyi kódot tartalmaz. Tehát a teljes szármodulból csak a „PorterStemmer”-et importáltuk.
  • Ugyanannak a szónak a variációs adataiból állistát készítettünk.
  • Létrejön egy objektum, amely az nltk.stem.porter.PorterStemmer osztályba tartozik.
  • Továbbá egyenként adtuk át a PorterStemmernek a „for” ciklus segítségével. Végül megkaptuk a listában említett összes szó kimeneti gyökérszavát.

A fenti magyarázatból az is levonható, hogy a tőszót fontos előfeldolgozási lépésnek tekintjük, mert megszüntette az adatok redundanciáját és ugyanazon szó variációit. Ennek eredményeként az adatok szűrésre kerülnek, ami elősegíti a jobb gépi képzést.

Most átadunk egy teljes mondatot, és kimenetként ellenőrizzük a viselkedését.

program:

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)

output:

hello	
guru99	
,	
you	
have	
build	
a	
veri	
good	
site	
and	
I	
love	
visit	
your	
site	 

Program az eredet megértéséhez

Kód magyarázata:

  • A PorterStemer csomag a modulszárból importálva
  • A mondatok és a szavak tokenizálására szolgáló csomagok importálásra kerülnek
  • Egy mondatot írunk, amelyet a következő lépésben kell tokenizálni.
  • Ebben a lépésben a szótokenizációs lemmatizációt hajtjuk végre.
  • Itt jön létre egy objektum a PorterStemmer számára.
  • A ciklus lefut, és az egyes szavak eredője az 5-ös kódsorban létrehozott objektum segítségével történik

Következtetés:

A Stemming egy adat-előfeldolgozó modul. Az angol nyelv egyetlen szónak számos változatát tartalmazza. Ezek a változatok kétértelműséget okoznak a gépi tanulás képzésében és előrejelzésében. A sikeres modell létrehozásához létfontosságú az ilyen szavak kiszűrése, és a törzsszó használatával azonos típusú szekvenált adatokká konvertálása. Ezenkívül ez egy fontos technika a soradatok gyűjtéséhez egy mondatkészletből, és a redundáns adatok eltávolításához, amelyeket normalizálásnak is neveznek.

Mi az a lemmatizáció?

Lemmatizálás Az NLTK-ban egy szó lemmájának megtalálásának algoritmikus folyamata a jelentésétől és kontextusától függően. A lemmatizáció általában a szavak morfológiai elemzését jelenti, amelynek célja a ragozható végződések eltávolítása. Segít a lemma néven ismert szó alap- vagy szótári alakjának visszaadásában.

Az NLTK Lemmatizációs módszer a WorldNet beépített morph függvényén alapul. A szöveg előfeldolgozása magában foglalja a szótő és a lemmatizálást is. Sokan összekeverik a két kifejezést. Egyesek ezeket azonosnak tekintik, de van különbség a származtatás és a lemmatizálás között. A lemmatizálást előnyben részesítjük az előbbivel szemben az alábbi okok miatt.

Miért jobb a lemmatizálás, mint a száradás?

A törzsképző algoritmus úgy működik, hogy kivágja a szó utótagját. Tágabb értelemben levágja a szó elejét vagy végét.

Ellenkezőleg, a lemmatizálás erőteljesebb művelet, és figyelembe veszi a szavak morfológiai elemzését. A lemmát adja vissza, amely az összes inflexiós alakjának alapalakja. Mélyreható nyelvi ismeretek szükségesek a szótárak készítéséhez és a szó megfelelő formájának kereséséhez. A törzsszó egy általános művelet, míg a lemmatizáció egy intelligens művelet, ahol a megfelelő formát a szótárban keresik. Ezért a lemmatizáció segít a jobb formálásban gépi tanulás jellemzők.

Kód, amely megkülönbözteti a lemmatizációt és a törzsképzést

Törzskód:

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

output::

Stemming for studies is studi
Stemming for studying is studi
Stemming for cries is cri
Stemming for cry is cri

Lemmatizációs kód:

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

output:

Lemma for studies is study
Lemma for studying is studying
Lemma for cries is cry
Lemma for cry is cry

A kimenet megbeszélése

Ha a tanulmányokra és a tanulásra utal, akkor a kimenet ugyanaz (studi), de az NLTK lemmatizer eltérő lemmát biztosít mind a tanulás a tanulmányokhoz, mind a tanulás a tanulás tokenjeihez. Tehát amikor funkciókészletet kell készítenünk a gép betanításához, jó lenne, ha a lemmatizálást részesítenék előnyben.

A Lemmatizer használati esete

A Lemmatizer minimalizálja a szöveg kétértelműségét. A példaszavak, mint például a kerékpár vagy a kerékpárok, a kerékpár alapszóvá alakulnak. Alapvetően az összes azonos jelentésű, de eltérő reprezentációjú szót alapformájukká alakítja. Csökkenti a szósűrűséget az adott szövegben, és segít a pontos jellemzők előkészítésében az edzőgéphez. Tisztábbak az adatok, annál intelligensebb és pontosabb lesz a gépi tanulási modell. Az NLTK Lemmatizer memóriát és számítási költséget is megtakarít.

Valós idejű példa, amely bemutatja a Wordnet Lemmatization és a POS Tagging használatát 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)

A Lemmatizer használati esete

Kód Magyarázat

  • Először a korpusz olvasó wordnet importálásra kerül.
  • A WordNetLemmatizer a Wordnetből van importálva.
  • A Word tokenize, valamint a beszédcímke részei az nltk-ból importálva vannak.
  • Az alapértelmezett szótár a gyűjteményekből importálva.
  • A szótár jön létre, ahol a pos_tag (első betű) azok a kulcsértékek, amelyek értékei a Wordnet szótárból származó értékkel vannak leképezve. Az egyetlen első betűt vettük, mivel később a ciklusban használni fogjuk.
  • A szöveg meg van írva és tokenizált.
  • Létrejön a lemma_function objektum, amelyet a cikluson belül használunk.
  • A ciklus fut, és a lemmatize két argumentumot vesz fel, az egyik a token, a másik pedig a pos_tag leképezése wordnet értékkel.

teljesítmény:

guru99 => guru99				
is => be				
totally => totally				
new => new				
kind => kind				
of => of				
learning => learn				
experience => experience				
. => .				 

Python A lemmatizáció szoros kapcsolatban áll a wordnet szótár, ezért elengedhetetlen ennek a témának a tanulmányozása, ezért ezt tartjuk a következő témakörnek.