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.

  • ???? Porijeklo: PorterStemmer izrezuje sufikse kako bi doลกao do korijena koji moลพda nije prava rijeฤ.
  • ๐Ÿ“š Lematizacija: WordNetLemmatizer vraฤ‡a osnovni oblik rjeฤnika, nazvan lema.
  • โš–๏ธ Razlika: Koriลกtenje korijena je brลพe, lematizacija je sporija, ali toฤnija i svjesna konteksta.
  • ๐Ÿ”ค Normalizacija: Oboje smanjuju gustoฤ‡u rijeฤi tako da strojevi tretiraju varijante kao jednu znaฤajku.
  • ๐Ÿท๏ธ POS oznake: Dodavanje oznake vrste rijeฤi ฤini lematizator daleko preciznijim.
  • ๐Ÿค– Prednost umjetne inteligencije: ฤŒiลกฤ‡i normalizirani tekst proizvodi jaฤe znaฤajke i modele strojnog uฤenja.

Nastanak i lematizacija u Python NLTK

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.

Pitanja i odgovori

Porterov stemmer je NLTK-ova klasa PorterStemmer. Primjenjuje sufiksno skidanje.ping pravila iz algoritma Martina Portera iz 1980. za svoฤ‘enje engleskih rijeฤi na njihovu osnovu, tako da โ€žwaitingโ€œ, โ€žwaitedโ€œ i โ€žwaitsโ€œ postaju โ€žwaitโ€œ.

Koristite stemming kada su brzina i jednostavnost vaลพniji od ฤitljivosti, kao ลกto je indeksiranje pretraลพivanja, analiza sentimenta velikih razmjera ili smanjenje znaฤajki. Odaberite lematizaciju kada izlaz mora biti valjana, ljudima ฤitljiva rijeฤ.

Normalizacija teksta pretvara razliฤite oblike rijeฤi u jedan zajedniฤki prikaz. Koriลกtenje korijena i lematizacija dvije su tehnike normalizacije koje smanjuju gustoฤ‡u rijeฤi, tako da model tretira varijante poput โ€žstudyโ€œ i โ€žstudiesโ€œ kao jednu znaฤajku.

NLTK nudi PorterStemmer (i druge stemere poput Snowballa) za stemming, te WordNetLemmatizer za lematizaciju. Lematizator se oslanja na WordNet rjeฤnik kako bi vratio ispravan osnovni oblik svake rijeฤi.

Uklanjaju suviลกne varijacije rijeฤi, tako da model strojnog uฤenja vidi ฤiลกฤ‡e, niลพedimenzionalne znaฤajke. Manje dupliciranih tokena znaฤi manje dvosmislenosti tijekom uฤenja i toฤnija predviฤ‘anja o nevidljivom tekstu.

Moderni AI modeli automatski zakljuฤuju kontekst, ali NLTK-ov WordNetLemmatizer treba oznaku vrste rijeฤi za razrjeลกenje dvosmislenosti. Navoฤ‘enje te oznake omoguฤ‡uje mu odabir prave leme, na primjer pretvaranje "uฤenje" u "uฤiti" kada je oznaฤen kao glagol.

Rijeฤ moลพe biti imenica ili glagol s razliฤitim lemama. Bez oznake vrste rijeฤi, WordNetLemmatizer pretpostavlja imenicu. Dodavanje ispravne oznake, poput glagola ili pridjeva, daje ispravan osnovni oblik.

Ne. Koriลกtenje korijena samo uklanja sufikse, pa tako โ€žstudiesโ€œ postaje โ€žstudiโ€œ, a โ€žcriesโ€œ postaje โ€žcriโ€œ, ลกto nisu valjane rijeฤi. Lematizacija, nasuprot tome, uvijek vraฤ‡a pravu rijeฤ iz rjeฤnika poput โ€žstudyโ€œ.

Saลพmite ovu objavu uz: