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: