Što je stabljika?
Korenje je vrsta normalizacije riječi. Normalizacija je tehnika kojom se skup riječi u rečenici pretvara u niz radi skraćivanja pretraživanja. Riječi koje imaju isto značenje, ali imaju neke varijacije prema kontekstu ili rečenici, normalizirane su.
Drugom riječju postoji jedna korijenska riječ, ali postoji mnogo varijacija istih riječi. Na primjer, korijenska riječ je "jesti", a varijacije su "jede, jede, jede i slično". Na isti način, uz pomoć Stemminga, možemo pronaći korijen svih varijacija.
Na primjer
He was riding.He was taking the ride.
U gornje dvije rečenice značenje je isto, tj. Jahanje u prošlosti. Čovjek lako može shvatiti da su oba značenja ista. Ali za strojeve su obje rečenice različite. Stoga je postalo teško pretvoriti ga u isti podatkovni redak. U slučaju da ne pružimo isti skup podataka, stroj ne uspije predvidjeti. Stoga je potrebno razlikovati značenje svake riječi kako bi se skup podataka pripremio za strojno učenje. I ovdje se korijenje koristi za kategorizaciju iste vrste podataka dobivanjem njihove korijenske riječi.
Implementirajmo to s programom Python.NLTK ima algoritam nazvan "PorterStemmer". Ovaj algoritam prihvaća popis tokenizirane riječi i rezultira u korijensku riječ.
Program za razumijevanje matičnjaka
from nltk.stem import PorterStemmere_words= ["wait", "waiting", "waited", "waits"]ps =PorterStemmer()for w in e_words:rootWord=ps.stem(w)print(rootWord)
Izlaz :
waitwaitwaitwait
Objašnjenje koda:
- U NLTk postoji matični modul koji se uvozi. Ako uvezete kompletan modul, program postaje težak jer sadrži tisuće redaka kodova. Dakle, iz cijelog matičnog modula uvezli smo samo "PorterStemmer".
- Pripremili smo lažni popis varijacijskih podataka iste riječi.
- Stvara se objekt koji pripada klasi nltk.stem.porter.PorterStemmer.
- Dalje, prosljeđivali smo ga PorterStemmeru jedan po jedan pomoću petlje "for". Na kraju smo dobili izlaznu korijensku riječ svake riječi spomenute na popisu.
Iz gornjeg objašnjenja također se može zaključiti da se rezanje smatra važnim korakom predobrade jer je uklonio suvišnost podataka i varijacije u istoj riječi. Kao rezultat toga, podaci se filtriraju što će pomoći u boljoj obuci stroja.
Sada donosimo kompletnu rečenicu i kao izlaz provjeravamo njezino ponašanje.
Program:
from nltk.stem import PorterStemmerfrom nltk.tokenize import sent_tokenize, word_tokenizesentence="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:
helloguru99,youhavebuildaverigoodsiteandIlovevisityoursite
Objašnjenje koda
- Paket PorterStemer se uvozi iz matične ploče modula
- Uvoze se paketi za tokenizaciju rečenica kao i riječi
- Napisana je rečenica koju treba tokenizirati u sljedećem koraku.
- U ovom se koraku provodi tokenizacija riječi.
- Ovdje je stvoren objekt za PorterStemmer.
- Ponavlja se petlja i rezanje svake riječi vrši se pomoću objekta stvorenog u retku koda 5
Zaključak:
Suzbijanje je modul za obradu podataka. Engleski jezik ima mnogo varijacija jedne riječi. Te varijacije stvaraju dvosmislenost u obuci i predviđanju strojnog učenja. Da bi se stvorio uspješan model, vitalno je filtrirati takve riječi i pretvoriti ih u isti tip sekvenciranih podataka pomoću rezanja. Također je ovo važna tehnika za dobivanje podataka redaka iz skupa rečenica i uklanjanje suvišnih podataka također poznatih kao normalizacija.
Što je lematizacija?
Lematizacija je algoritamski postupak pronalaska leme riječi ovisno o njihovom značenju. Lematizacija se obično odnosi na morfološku analizu riječi koja ima za cilj uklanjanje flektivnih završetaka. Pomaže u vraćanju osnovnog ili rječničkog oblika riječi, koji je poznat kao lema. NLTK metoda lematizacije temelji se na WorldNetovoj ugrađenoj funkciji preobražaja. Predobrada teksta uključuje i matičnu i lematizaciju. Mnogi ljudi ta dva pojma zbunjuju. Neki se prema njima ponašaju isto, ali između njih oboje postoji razlika. Iz dolje navedenog razloga daje se prednost lematizaciji u odnosu na prvu.
Zašto je lematizacija bolja od matiranja?
Algoritam poticanja radi rezanjem sufiksa iz riječi. U širem smislu reže 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 njegovih flektivnih oblika. Dubinsko jezično znanje potrebno je za stvaranje rječnika i traženje pravilnog oblika riječi. Korenje je općenita operacija, dok je lematizacija inteligentna operacija u kojoj će se u rječniku potražiti odgovarajući oblik. Stoga lematizacija pomaže u oblikovanju boljih značajki strojnog učenja.
Kôd za razlikovanje lematizacije i temanja
Šifra roda
import nltkfrom nltk.stem.porter import PorterStemmerporter_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 studiStemming for studying is studiStemming for cries is criStemming for cry is cri
Lematizacijski kod
import nltkfrom nltk.stem import WordNetLemmatizerwordnet_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 studyLemma for studying is studyingLemma for cries is cryLemma for cry is cry
Rasprava o rezultatima:
Ako izgledate da potječe od studija i studija, izlaz je isti (studi), ali lematizator pruža različitu lemu za oba tokena koji studiraju za studij i za studiranje. Dakle, kada trebamo izraditi skup značajki za treniranje stroja, bilo bi sjajno da je poželjna lematizacija.
Slučaj upotrebe Lemmatizera:
Lemmatizer smanjuje dvosmislenost teksta. Primjeri riječi poput bicikla ili bicikla pretvaraju se u osnovnu riječ bicikl. U osnovi, pretvorit će sve riječi koje imaju isto značenje, ali različit prikaz, u njihov osnovni oblik. Smanjuje gustoću riječi u danom tekstu i pomaže u pripremi točnih značajki za stroj za vježbanje. Podaci će biti čišći, inteligentniji i precizniji će biti vaš model strojnog učenja. Lemmatizer također štedi memoriju kao i računske troškove.
Primjer u stvarnom vremenu koji prikazuje upotrebu Wordnet lematizacije i POS označavanja u Pythonu
from nltk.corpus import wordnet as wnfrom nltk.stem.wordnet import WordNetLemmatizerfrom nltk import word_tokenize, pos_tagfrom collections import defaultdicttag_map = defaultdict(lambda : wn.NOUN)tag_map['J'] = wn.ADJtag_map['V'] = wn.VERBtag_map['R'] = wn.ADVtext = "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ča korpusa.
- WordNetLemmatizer se uvozi iz wordneta
- Tokeniziranje riječi, kao i dijelovi govora, uvoze se iz nltk
- Zadani rječnik uvozi se iz zbirki
- Rječnik se kreira gdje su pos_tag (prvo slovo) ključne vrijednosti čije su vrijednosti preslikane s vrijednošću iz rječnika wordnet. Uzeli smo jedino prvo slovo jer ćemo ga koristiti kasnije u petlji.
- Tekst je napisan i tokeniziran.
- Stvara se objektna lemma_funkcija koja će se koristiti unutar petlje
- Petlja se izvodi, a lemmatize će uzeti dva argumenta, jedan je token, a drugi mapiranje pos_tag s vrijednošću wordneta.
Izlaz:
guru99 => guru99is => betotally => totallynew => newkind => kindof => oflearning => learnexperience => experience. => .
Lematizacija ima blisku vezu s rječnikom wordnet-a, stoga je neophodno proučiti ovu temu, pa ćemo je zadržati kao sljedeću temu