Nastanak i lematizacija u Python NLTK s primjerima
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 naširoko koriste za pretprocesiranje teksta. Razlika između korijena i lematizacije je u tome što je korijen 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 jezika. To je tehnika u kojoj se skup riječi u rečenici pretvara u niz kako bi se skratilo njegovo traženje. U ovoj metodi, riječi koje imaju isto značenje, ali imaju neke varijacije prema kontekstu ili rečenici su normalizirane.
U drugoj riječi, postoji jedan korijen riječi, ali postoje mnoge varijacije istih riječi. Na primjer, korijen riječi je "jesti", a njezine varijacije su "jede, jede, jede i slično". Na isti način, uz pomoć Stemming in Python, možemo pronaći korijen riječi bilo koje varijacije.
Na primjer
He was riding. He was taking the ride.
U gornje dvije rečenice značenje je isto, tj. jahačka aktivnost u prošlosti. Čovjek može lako shvatiti da su oba značenja ista. Ali za strojeve, obje rečenice su različite. Stoga je postalo teško pretvoriti ga u isti podatkovni red. U slučaju da ne pružimo isti skup podataka, stroj ne uspijeva predvidjeti. Stoga je potrebno razlikovati značenje svake riječi kako bi se skup podataka pripremio za strojno učenje. I ovdje se korijen koristi za kategorizaciju iste vrste podataka dobivanjem korijena riječi.
Implementirajmo ovo s a Python program.NLTK ima algoritam nazvan "PorterStemmer". Ovaj algoritam prihvaća popis tokeniziranih riječi i postavlja ih u korijen riječi.
Program za razumijevanje Stemminga
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
Objašnjenje koda:
- U NLTk-u postoji matični modul koji je uvezen. Ako uvezete cijeli modul, tada program postaje težak jer sadrži tisuće redaka kodova. Dakle, iz cijelog stem modula uvezli smo samo "PorterStemmer."
- Pripremili smo lažni popis podataka o varijacijama iste riječi.
- Kreiran je objekt koji pripada klasi nltk.stem.porter.PorterStemmer.
- Nadalje, proslijedili smo ga PorterStemmeru jedan po jedan koristeći "for" petlju. Konačno, dobili smo izlaznu korijensku riječ svake riječi spomenute na popisu.
Iz gornjeg objašnjenja također se može zaključiti da se stvaranje korijena smatra važnim korakom pretprocesiranja jer je uklonilo redundantnost u podacima i varijacije u istoj riječi. Kao rezultat toga, podaci se filtriraju što će pomoći u boljoj obuci stroja.
Sada prenosimo kompletnu rečenicu i provjeravamo njeno ponašanje kao izlaz.
Program:
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
Objašnjenje koda:
- Paket PorterStemer se uvozi iz stabla modula
- Uvoze se paketi za tokenizaciju rečenice kao i riječi
- Napisana je rečenica koju treba tokenizirati u sljedećem koraku.
- U ovom koraku implementirana je tokenizacija riječi proizlazeća lematizacija.
- Ovdje se stvara objekt za PorterStemmer.
- Petlja se pokreće i korijen svake riječi se vrši pomoću objekta kreiranog u retku koda 5
Zaključak:
Stemming je modul za pretprocesiranje podataka. Engleski jezik ima mnogo varijacija jedne riječi. Ove varijacije stvaraju dvosmislenost u obuci i predviđanju strojnog učenja. Da biste stvorili uspješan model, bitno je filtrirati takve riječi i pretvoriti ih u istu vrstu sekvenciranih podataka pomoću korijena. Također, ovo je važna tehnika za dobivanje podataka retka iz skupa rečenica i uklanjanje suvišnih podataka također poznato kao normalizacija.
Što je lematizacija?
Lematizacija u NLTK je algoritamski proces pronalaženja leme riječi ovisno o njezinom značenju i kontekstu. Lematizacija se obično odnosi na morfološku analizu riječi, čiji je cilj ukloniti flektivne nastavke. Pomaže u vraćanju baze ili rječničkog oblika riječi poznate kao lema.
Metoda NLTK lematizacije temelji se na WorldNet-ovoj ugrađenoj funkciji morph. Pretprocesiranje teksta uključuje i korijen kao i lematizaciju. Mnogi ljudi smatraju da su ta dva pojma zbunjujuća. Neki ih tretiraju kao isto, ali postoji razlika između korijena i lematizacije. Lematizacija je poželjnija u odnosu na prvu zbog dolje navedenog razloga.
Zašto je lematizacija bolja od stvaranja korijena?
Algoritam korijena radi tako da iz riječi izrezuje sufiks. U širem smislu reže ili početak ili kraj riječi.
Naprotiv, lematizacija je snažnija operacija, a 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 pravilnog oblika riječi potrebno je dubinsko lingvističko znanje. Stvaranje korijena je opća operacija dok je lematizacija inteligentna operacija gdje će se pravi oblik tražiti u rječniku. Dakle, lematizacija pomaže u boljem oblikovanju stroj za učenje značajke.
Kod za razlikovanje lematizacije i stvaranja korijena
Izvorni kod:
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
Kod lematizacije:
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 gledate proizlazeći za studije i proučavanje, izlaz je isti (studi), ali NLTK lematizator pruža različite leme za oba tokena studija za studije i proučavanje za proučavanje. Dakle, kada trebamo napraviti skup značajki za treniranje stroja, bilo bi sjajno da se preferira lematizacija.
Upotreba slučaja lematizatora
Lematizator smanjuje dvosmislenost teksta. Primjeri riječi kao što su bicikl ili bicikli pretvaraju se u osnovnu riječ bicikl. U osnovi, pretvorit će sve riječi istog značenja, ali različite reprezentacije u njihov osnovni oblik. Smanjuje gustoću riječi u danom tekstu i pomaže u pripremi točnih značajki za stroj za obuku. Što su podaci čišći, to će vaš model strojnog učenja biti inteligentniji i precizniji. NLTK Lemmatizer će također uštedjeti memoriju kao i troškove računanja.
Primjer u stvarnom vremenu koji pokazuje korištenje Wordnet lematizacije i POS označavanja 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)
Objašnjenje koda
- Prvo se uvozi Wordnet čitač korpusa.
- WordNetLemmatizer je uvezen iz wordneta.
- Tokenizacija riječi kao i oznaka dijelova govora uvoze se iz nltk-a.
- Zadani rječnik se uvozi iz zbirki.
- Rječnik se kreira gdje su pos_tag (prvo slovo) ključne vrijednosti čije su vrijednosti mapirane s vrijednošću iz wordnet rječnika. Uzeli smo jedino prvo slovo jer ćemo ga koristiti kasnije u petlji.
- Tekst je napisan i tokeniziran.
- Stvara se objekt lemma_function koji će se koristiti unutar petlje.
- Petlja se izvodi i lemmatize će uzeti dva argumenta, jedan je token, a drugi je mapiranje pos_tag s wordnet vrijednošću.
Izlaz:
guru99 => guru99 is => be totally => totally new => new kind => kind of => of learning => learn experience => experience . => .
Python Lematizacija je u bliskoj vezi s wordnet rječnik, stoga je neophodno proučiti ovu temu, pa je zadržavamo kao sljedeću temu.