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