Stemming and Lemmatization in Python NLTK példákkal
⚡ Okos összefoglaló
A szótagolás és a lemmatizáció szövegnormalizálási technikák. Python Az NLTK olyan szóváltozatokat tartalmaz, amelyek egy közös alapra redukálják a szóváltozatokat, ahol a növényi eredetű utótagok gyorsan, kontextus nélkül alakulnak ki, a lemmatizáció pedig egy valódi szótári szót ad vissza jelentéssel.

Miben rejlik a Stemming és a Lemmatization? Python NLTK?
Száradás és lemmatizáció in Python Az NLTK szövegnormalizálási technikák a természetes nyelvi feldolgozáshoz. Ezeket a technikákat széles körben használják a szöveg előfeldolgozásához. A szótagolás és a lemmatizálás közötti különbség az, hogy a szótagolás gyorsabb, mert a kontextus ismerete nélkül vágja ki a szavakat, míg a lemmatizálás lassabb, mert a feldolgozás előtt ismeri a szavak kontextusát.
Mi az a Stemming?
fakadó egy módszer a szavak normalizálására Természetes nyelvi feldolgozásEz egy olyan technika, amelynek során egy mondatban lévő szavakat sorozattá alakítanak át a keresés lerövidítése érdekében. Ebben a módszerben az azonos jelentésű, de a kontextustól vagy a mondattól függően néhány eltérést mutató szavak normalizálódnak. Más szóval, van egy tőszó, de ugyanazon szónak sok változata létezik. Például az tőszó az „eat” (enni), és a változatai az „eats”, az „eats, eating, eaten” (evett) és így tovább. Ugyanígy, a szótőképzés segítségével... Python, bármely variáció alapszavát megtalálhatjuk.
Például:
He was riding. He was taking the ride.
A fenti két mondatban a jelentés ugyanaz, azaz egy múltbeli lovaglás. Egy ember könnyen megértheti, hogy a két jelentés ugyanaz. De a gépek számára a két mondat különböző. Ezért nehéz őket ugyanabba az adatsorba konvertálni. Ha nem ugyanazt az adathalmazt biztosítjuk, akkor a gép nem tudja megjósolni. Ezért meg kell különböztetni az egyes szavak jelentését, hogy felkészítsük az adathalmazt a gépi tanulásra. Itt a szótőképzőt arra használjuk, hogy azonos típusú adatokat kategorizáljunk a gyökérszavuk kinyerésével.
Valósítsuk meg ezt egy Python program. Az NLTK-nak van egy algoritmusa, melynek neve PorterStemmerEz az algoritmus elfogadja a tokenizált szavak listáját, és gyökérszavakká alakítja azokat.
Program az eredet 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)
output:
wait wait wait wait
Code Magyarázat:
- Van egy NLTK-ban egy importált stem modul. Ha a teljes modult importáljuk, a program nehézkessé válik, mivel több ezer sornyi kódot tartalmaz. Tehát a teljes stem modulból csak a „PorterStemmer”-t 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.
- Egy „for” ciklus segítségével egyesével adtuk át a PorterStemmernek. Végül megkaptuk a listában szereplő összes szó gyökérszavát.
A fentiekből kitűnik, hogy a szótőzés fontos előfeldolgozási lépés, mivel eltávolítja a redundanciát és a variációkat ugyanazon szón belül. Ennek eredményeként az adatok szűrésre kerülnek, ami segít a jobb gépi betanításban. Most átadunk egy teljes mondatot, és ellenőrizzük a kimenetét.
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
Code Magyarázat:
- A PorterStemmer csomag a modul törzséből importálódik.
- Mondatok és 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.
- Itt jön létre egy objektum a PorterStemmer számára.
- Egy ciklus lefut, és az 5. kódsorban létrehozott objektum segítségével minden szót szárba rendelünk.
Röviden, a stemming (származás) egy adat-előfeldolgozó modul. Az angol nyelvben egyetlen szónak számos variációja létezik, ami kétértelműséget okoz a gépi tanulás betanításában és predikciójában. Egy sikeres modell felépítéséhez elengedhetetlen az ilyen szavak szűrése ugyanabba a szekvenált adatba stemming (származás) segítségével. Ezt normalizálásnak is nevezik.
Mi az a lemmatizáció?
Lemmatizálás Az NLTK-ban az a algoritmikus folyamat, amely egy szó lemmáját keresi meg a jelentése és a kontextusa alapján. A lemmatizáció általában a szavak morfológiai elemzésére utal, amelynek célja az inflexiós végződések eltávolítása. Segít a szó alap- vagy szótári alakjának, az úgynevezett lemmának a visszaadásában. Az NLTK lemmatizációs módszere a WordNet beépített morph függvényén alapul. A szöveg előfeldolgozása magában foglalja mind a stemming, mind a lemmatizációt. Sokan zavarosnak találják a két kifejezést. Egyesek ugyanazon kifejezésként kezelik őket, de van különbség a stemming és a lemmatizáció között. A lemmatizációt az előbbivel szemben az alábbi okok miatt részesítik előnyben.
Miért jobb a lemmatizálás, mint a száradás?
A szótagképző algoritmus úgy működik, hogy kivágja a szó utótagját. Tágabb értelemben a szó elejét vagy végét vágja ki. Ezzel szemben a lemmatizáció egy hatékonyabb művelet, és figyelembe veszi a szavak morfológiai elemzését. Visszaadja a lemmát, amely az összes ragozó alakjának alapalakja. A szótárak létrehozásához és a szó megfelelő alakjának kereséséhez mélyreható nyelvészeti ismeretekre van szükség. A szótagképzés egy általános művelet, míg a lemmatizáció egy intelligens művelet, amelynek során a megfelelő alakot a szótárban keressük. Így a lemmatizáció segít a jobb szóalkotásban. gépi tanulás jellemzők.
Code különbséget tenni a lemmatizáció és a szótagolás között
fakadó 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)))
output:
Stemming for studies is studi Stemming for studying is studi Stemming for cries is cri Stemming for cry is cri
Lemmatizálás 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)))
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 studies és a studying szavakhoz a stemminget nézzük, a kimenet ugyanaz (studi), de az NLTK lemmatizáló más lemmát biztosít mindkét tokenhez: a study-t a studieshez és a studying-et a studyinghez. Tehát amikor egy gép betanításához jellemzőkészletet kell létrehoznunk, nagyszerű lenne, ha a lemmatizációt részesítenénk előnyben.
A Lemmatizer használati esete
A Lemmatizátor minimalizálja a szöveg kétértelműségét. Az olyan szavak, mint a „bicycle” vagy a „bicycles” (kerékpárok), a „bicycle” (kerékpár) alapszóvá alakulnak. Az összes azonos jelentésű, de eltérő ábrázolású szót az alapszóvá alakítja, csökkentve a szósűrűséget és a hel (súlyt).ping Készítsen pontos jellemzőket a gép betanításához. Minél tisztábbak az adatok, annál pontosabb lesz a gépi tanulási modellje. Az NLTK Lemmatizer memóriát és számítási költségeket is takarít meg.
Valós idejű példa a WordNet lemmatizáció és a POS címkézés használatára 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)
output:
guru99 => guru99 is => be totally => totally new => new kind => kind of => of learning => learn experience => experience . => .
Code Magyarázat:
- A korpuszolvasó wordnetjét importálja, a WordNetLemmatizer pedig a wordnetből importálódik.
- A szó tokenize és a szófaji címkék az nltk-ből, az alapértelmezett szótárak pedig gyűjteményekből importálódnak.
- Létrejön egy szótár, ahol a pos_tag első betűje a kulcs, amelyet a Wordnet szótár értékéhez rendelnek.
- A szöveg kiírásra és tokenizálásra kerül, majd a lemma_function objektum létrejön a cikluson belüli használatra.
- A ciklus lefut, és a lemmatize két argumentumot fogad el: a tokent és egy map-et.ping a pos_tag wordnet értékével.
Python A lemmatizáció szoros kapcsolatban áll a WordNet szótár, ezért elengedhetetlen a téma további tanulmányozása.
