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.

