Nastanak i lematizacija u Python NLTK s primjerima
โก Pametni saลพetak
Stemming i lematizacija su tehnike normalizacije teksta u Python NLTK koji svode varijacije rijeฤi na zajedniฤku osnovu, gdje korijeni brzo izrezuju sufikse bez konteksta, a lematizacija vraฤa pravu rijeฤ iz rjeฤnika koristeฤi znaฤenje.

U ฤemu je ishodiลกte i lematizacija Python NLTK?
Ishodiลกte i lematizacija in Python NLTK su tehnike normalizacije teksta za obradu prirodnog jezika. Ove se tehnike ลกiroko koriste za predobradu teksta. Razlika izmeฤu stemminga i lematizacije je u tome ลกto je stemming brลพi jer reลพe rijeฤi bez poznavanja konteksta, dok je lematizacija sporija jer poznaje kontekst rijeฤi prije obrade.
ล to je Stemming?
proizlazi je metoda normalizacije rijeฤi u Obrada prirodnog jezikaTo je tehnika u kojoj se skup rijeฤi u reฤenici pretvara u niz kako bi se skratila pretraga. U ovoj metodi normaliziraju se rijeฤi koje imaju isto znaฤenje, ali neke varijacije ovisno o kontekstu ili reฤenici. Drugim rijeฤima, postoji jedna korijenska rijeฤ, ali postoji mnogo varijacija iste rijeฤi. Na primjer, korijenska rijeฤ je โjestiโ, a njezine varijacije su โjesti, jesti, pojedeno i tako daljeโ. Na isti naฤin, uz pomoฤ Stemminga u Python, moลพemo pronaฤi korijensku rijeฤ bilo koje varijacije.
Na primjer:
He was riding. He was taking the ride.
U gornje dvije reฤenice znaฤenje je isto, odnosno rijeฤ je o jahanju u proลกlosti. ฤovjek lako moลพe razumjeti da su oba znaฤenja ista. Ali za strojeve su obje reฤenice razliฤite. Stoga ih je teลกko pretvoriti u isti redak podataka. Ako ne pruลพimo isti skup podataka, stroj neฤe moฤi predvidjeti. Stoga je potrebno razlikovati znaฤenje svake rijeฤi kako bi se skup podataka pripremio za strojno uฤenje. Ovdje se stemming koristi za kategorizaciju iste vrste podataka dobivanjem korijenske rijeฤi.
Implementirajmo ovo s Python program. NLTK ima algoritam pod nazivom PorterStemmerOvaj algoritam prihvaฤa popis tokeniziranih rijeฤi i pretvara ih u korijenske rijeฤi.
Program za razumijevanje korijena
from nltk.stem import PorterStemmer e_words= ["wait", "waiting", "waited", "waits"] ps =PorterStemmer() for w in e_words: rootWord=ps.stem(w) print(rootWord)
Izlaz:
wait wait wait wait
Code Objaลกnjenje:
- U NLTK-u postoji stem modul koji se uvozi. Ako uvezete cijeli modul, program postaje teลพak jer sadrลพi tisuฤe redaka koda. Dakle, iz cijelog stem modula uvezli smo samo โPorterStemmerโ.
- Pripremili smo laลพni popis podataka o varijacijama iste rijeฤi.
- Stvara se objekt koji pripada klasi nltk.stem.porter.PorterStemmer.
- Proslijedili smo ga PorterStemmeru jedan po jedan koristeฤi petlju "for". Konaฤno, dobili smo izlaznu korijensku rijeฤ svake rijeฤi spomenute na popisu.
Iz navedenog, stemming je vaลพan korak predobrade jer uklanja redundanciju i varijacije u istoj rijeฤi. Kao rezultat toga, podaci se filtriraju, ลกto pomaลพe u boljem strojnom obuฤavanju. Sada prosljeฤujemo cijelu reฤenicu i provjeravamo njezin izlaz.
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)
Izlaz:
hello
guru99
,
you
have
build
a
veri
good
site
and
I
love
visit
your
site
Code Objaลกnjenje:
- Paket PorterStemmer se uvozi iz modula stem.
- Uvoze se paketi za tokenizaciju reฤenica kao i rijeฤi.
- Napisana je reฤenica koju treba tokenizirati u sljedeฤem koraku.
- Ovdje se stvara objekt za PorterStemmer.
- Izvrลกava se petlja i odvajanje korijena svake rijeฤi vrลกi se pomoฤu objekta stvorenog u liniji koda 5.
Ukratko, stemming je modul za predobradu podataka. Engleski jezik ima mnogo varijacija jedne rijeฤi, ลกto stvara dvosmislenost u strojnom uฤenju i predviฤanju. Za izgradnju uspjeลกnog modela, kljuฤno je filtrirati takve rijeฤi u iste sekvencirane podatke pomoฤu stemminga. To je takoฤer poznato kao normalizacija.
ล to je lematizacija?
Lematizacija U NLTK-u je algoritamski proces pronalaลพenja leme rijeฤi ovisno o njenom znaฤenju i kontekstu. Lematizacija se obiฤno odnosi na morfoloลกku analizu rijeฤi, koja ima za cilj uklanjanje flekcijskih zavrลกetaka. Pomaลพe u vraฤanju osnovnog ili rjeฤniฤkog oblika rijeฤi, poznatog kao lema. Metoda NLTK lematizacije temelji se na WordNetovoj ugraฤenoj funkciji morfiranja. Predobrada teksta ukljuฤuje i stemming i lematizaciju. Mnogi ljudi smatraju da su ta dva pojma zbunjujuฤa. Neki ih tretiraju kao isto, ali postoji razlika izmeฤu stemminga i lematizacije. Lematizacija je poลพeljnija od prve iz razloga navedenog u nastavku.
Zaลกto je lematizacija bolja od stvaranja korijena?
Algoritam za stemming funkcionira tako da iz rijeฤi izbacuje sufiks. U ลกirem smislu, izbacuje ili poฤetak ili kraj rijeฤi. Naprotiv, lematizacija je moฤnija operacija i uzima u obzir morfoloลกku analizu rijeฤi. Vraฤa lemu, koja je osnovni oblik svih njezinih flekcijskih oblika. Za izradu rjeฤnika i traลพenje ispravnog oblika rijeฤi potrebno je dubinsko lingvistiฤko znanje. Stemming je opฤa operacija, dok je lematizacija inteligentna operacija u kojoj se ispravan oblik traลพi u rjeฤniku. Stoga lematizacija pomaลพe u formiranju boljih stroj za uฤenje znaฤajke.
Code razlikovati lematizaciju i stemming
proizlazi 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)))
Izlaz:
Stemming for studies is studi Stemming for studying is studi Stemming for cries is cri Stemming for cry is cri
Lematizacija 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)))
Izlaz:
Lemma for studies is study Lemma for studying is studying Lemma for cries is cry Lemma for cry is cry
Rasprava o izlazu
Ako pogledate stemming za studije i studiranje, izlaz je isti (studi), ali NLTK lematizator daje drugaฤiju lemu za oba tokena: studiranje za studije i studiranje za studiranje. Dakle, kada trebamo napraviti skup znaฤajki za treniranje stroja, bilo bi sjajno kada bi se lematizacija preferirala.
Upotreba sluฤaja lematizatora
Lematizator minimizira dvosmislenost teksta. Rijeฤi poput bicikl ili bicikli pretvaraju se u osnovnu rijeฤ bicikl. Pretvara sve rijeฤi s istim znaฤenjem, ali razliฤitim predstavljanjem, u njihov osnovni oblik, smanjujuฤi gustoฤu rijeฤi i pomoฤ.ping pripremite toฤne znaฤajke za treniranje stroja. ล to su podaci ฤiลกฤi, to ฤe vaลก model strojnog uฤenja biti toฤniji. NLTK Lematizator takoฤer ลกtedi memoriju i raฤunalne troลกkove.
Primjer u stvarnom vremenu koji prikazuje koriลกtenje WordNet lematizacije i POS oznaฤavanja u 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)
Izlaz:
guru99 => guru99 is => be totally => totally new => new kind => kind of => of learning => learn experience => experience . => .
Code Objaลกnjenje:
- ฤitaฤ korpusa Wordnet je uvezen, a WordNetLemmatizer je uvezen iz Wordneta.
- Tokenizacija rijeฤi i oznaka vrsta rijeฤi uvoze se iz nltk-a, a zadani rjeฤnik iz kolekcija.
- Stvara se rjeฤnik gdje je prvo slovo pos_tag kljuฤ, mapiran na vrijednost iz wordnet rjeฤnika.
- Tekst je napisan i tokeniziran, a objekt lemma_function je kreiran za koriลกtenje unutar petlje.
- Petlja se izvrลกava, a lematizacija prima dva argumenta: token i mapu.ping od pos_tag s wordnet vrijednoลกฤu.
Python Lematizacija je u bliskoj vezi s WordNet rjeฤnik, stoga je bitno prouฤiti tu temu u nastavku.
