Tüvestamine ja lemmatiseerimine sisse Python NLTK koos näidetega

⚡ Nutikas kokkuvõte

Tüve loomine ja lemmatiseerimine on teksti normaliseerimise tehnikad, mis Python NLTK, mis taandab sõnavariatsioonid ühisele baasile, kus tüvest tulenevad põllukultuuride järelliited lisatakse kiiresti kontekstita ja lemmatiseerimine tagastab tõelise sõnastikusõna koos tähendusega.

  • 🌱 Tüvi: PorterStemmer kasutab järelliiteid, et jõuda tüveni, mis ei pruugi olla päris sõna.
  • 📚 Lemmatiseerimine: WordNetLemmatizer tagastab sõnastiku baasvormi, mida nimetatakse lemmatuks.
  • 🇧🇷 Erinevus: Tüve moodustamine on kiirem, lemmatiseerimine aeglasem, kuid täpsem ja kontekstitundlikum.
  • 🔤 Normaliseerimine: Mõlemad vähendavad sõnatihedust, nii et masinad käsitlevad variante ühe tunnusena.
  • ???? ️ POS-sildid: Kõneosa sildi edastamine muudab lemmatiseerija palju täpsemaks.
  • 🤖 Tehisintellekti eelis: Puhtam normaliseeritud tekst loob tugevamad masinõppe funktsioonid ja mudelid.

Tüvestamine ja lemmatiseerimine sisse Python NLTK

Milles seisneb tüvestamine ja lemmatiseerimine Python NLTK?

Tüvestamine ja lemmatiseerimine in Python NLTK on loomuliku keele töötlemiseks mõeldud teksti normaliseerimise tehnikad. Neid tehnikaid kasutatakse laialdaselt teksti eeltöötluseks. Varreotsingu ja lemmatiseerimise erinevus seisneb selles, et varreotsingu puhul on tegemist kiirema meetodiga, kuna see lõikab sõnu konteksti teadmata, samas kui lemmatiseerimise puhul on tegemist aeglasema meetodiga, kuna see teab sõnade konteksti enne töötlemist.

Mis on Stemming?

Stemming on meetod sõnade normaliseerimiseks Natural Language ProcessingSee on tehnika, mille puhul lauses olevad sõnad teisendatakse otsingu lühendamiseks järjestuseks. Selle meetodi puhul normaliseeritakse sõnad, millel on sama tähendus, kuid mõned variatsioonid vastavalt kontekstile või lausele. Teisisõnu, on üks tüvisõna, kuid samal sõnal on palju variatsioone. Näiteks tüvisõna on „sööma“ ja selle variatsioonid on „sööb, söömine, söödud jne“. Samamoodi, tüve moodustamise abil ... Python, leiame mis tahes variatsiooni tüve.

Näiteks:

He was riding.
He was taking the ride.

Kahes ülaltoodud lauses on tähendus sama, st tegemist on minevikus toimunud ratsutamistegevusega. Inimene saab kergesti aru, et mõlemad tähendused on samad. Masinate jaoks on need laused aga erinevad. Seega on neid raske samaks andmereale teisendada. Kui me ei paku sama andmestikku, siis masin ei suuda ennustada. Seega on vaja eristada iga sõna tähendust, et valmistada andmestik masinõppeks ette. Siin kasutatakse tüvede loomist sama tüüpi andmete kategoriseerimiseks, leides nende tüvisõna.

Rakendame selle a-ga Python programm. NLTK-l on algoritm nimega PorterStemmerSee algoritm aktsepteerib tokeniseeritud sõnade loendi ja tükeldab need tüvisõnadeks.

Programm tüvede mõistmiseks

from nltk.stem import PorterStemmer
e_words= ["wait", "waiting", "waited", "waits"]
ps =PorterStemmer()
for w in e_words:
    rootWord=ps.stem(w)
    print(rootWord)

Väljund:

wait
wait
wait
wait

Code Selgitus:

  • NLTK-s on tüvimoodul, mis imporditakse. Kui impordite kogu mooduli, muutub programm raskeks, kuna see sisaldab tuhandeid koodiridu. Seega importisime kogu tüvimoodulist ainult „PorterStemmeri“.
  • Koostasime sama sõna variatsiooniandmete näiva loendi.
  • Luuakse objekt, mis kuulub klassi nltk.stem.porter.PorterStemmer.
  • Edastasime selle PorterStemmerile ükshaaval „for“ tsükli abil. Lõpuks saime väljundiks iga loendis mainitud sõna tüvesõna.

Eelnevast lähtuvalt on tüve moodustamine oluline eeltöötlusetapp, kuna see eemaldab samas sõnas redundantsuse ja variatsioonid. Selle tulemusena andmed filtreeritakse, mis aitab paremini masinõpet teha. Nüüd edastame terve lause ja kontrollime selle väljundit.

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)

Väljund:

hello
guru99
,
you
have
build
a
veri
good
site
and
I
love
visit
your
site

Code Selgitus:

  • Pakett PorterStemmer imporditakse mooduli tüvest.
  • Imporditakse nii lausete kui ka sõnade tokeniseerimise pakette.
  • Kirjutatakse lause, mis tuleb järgmises etapis märgistada.
  • Siin luuakse PorterStemmeri objekt.
  • Käivitatakse tsükkel ja iga sõna tüvestamine toimub koodireal 5 loodud objekti abil.

Lühidalt öeldes on tüvendamine andmete eeltöötlusmoodul. Inglise keeles on ühest sõnast palju variatsioone, mis tekitavad masinõppe treenimisel ja ennustamisel ebaselgust. Eduka mudeli loomiseks on oluline sellised sõnad tüvendamise abil samadesse järjestatud andmetesse filtreerida. Seda nimetatakse ka normaliseerimiseks.

Mis on lemmatiseerimine?

Lemmatiseerimine NLTK-s on see algoritmiline protsess, mille käigus leitakse sõna lemma selle tähenduse ja konteksti põhjal. Lemmatiseerimine viitab tavaliselt sõnade morfoloogilisele analüüsile, mille eesmärk on eemaldada käändelõpud. See aitab tagastada sõna baas- või sõnastikuvormi, mida tuntakse lemmana. NLTK lemmatiseerimise meetod põhineb WordNeti sisseehitatud morfimisfunktsioonil. Teksti eeltöötlus hõlmab nii tüve moodustamist kui ka lemmatiseerimist. Paljud inimesed leiavad, et need kaks terminit ajavad omavahel segamini. Mõned käsitlevad neid samamoodi, kuid tüve moodustamise ja lemmatiseerimise vahel on erinevus. Lemmatiseerimist eelistatakse esimesele allpool toodud põhjusel.

Miks on lemmatiseerimine parem kui tüvistamine?

Tüve moodustamise algoritm töötab sõnast järelliite lõikamise teel. Laiemas tähenduses lõikab see välja kas sõna alguse või lõpu. Seevastu lemmatiseerimine on võimsam toiming ja see võtab arvesse sõnade morfoloogilist analüüsi. See tagastab lemma, mis on kõigi selle käändevormide baasvorm. Sõnaraamatute loomiseks ja sõna õige vormi otsimiseks on vaja põhjalikke keeleteadmisi. Tüve moodustamine on üldine toiming, samas kui lemmatiseerimine on intelligentne toiming, kus õige vorm otsitakse sõnaraamatust. Seega aitab lemmatiseerimine paremini moodustada... masinõpe funktsioone.

Code eristada lemmatiseerimist ja tüvistamist

Stemming 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)))

Väljund:

Stemming for studies is studi
Stemming for studying is studi
Stemming for cries is cri
Stemming for cry is cri

Lemmatiseerimine 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)))

Väljund:

Lemma for studies is study
Lemma for studying is studying
Lemma for cries is cry
Lemma for cry is cry

Väljundi arutelu

Kui vaadata „studies” ja „studying” puhul tüve moodustamist, on väljund sama (studi), kuid NLTK lemmatiseerija pakub mõlema märgi jaoks erineva lemma: „study” „studies” jaoks ja „studying” „studying” jaoks. Seega, kui meil on vaja luua tunnuste komplekt masina treenimiseks, oleks suurepärane, kui eelistataks lemmatiseerimist.

Lemmatizeri kasutusjuht

Lemmatiseerija minimeerib teksti ebaselgust. Sõnad nagu "jalgratas" või "jalgrattad" teisendatakse baassõnaks "jalgratas". See teisendab kõik sama tähendusega, kuid erineva esitusega sõnad oma baasvormi, vähendades sõnade tihedust ja helping Valmista ette täpsed tunnused masina treenimiseks. Mida puhtamad on andmed, seda täpsem on sinu masinõppe mudel. NLTK Lemmatiser säästab ka mälu ja arvutuskulusid.

Reaalajas näide WordNeti lemmatiseerimise ja POS-sildistamise kasutamisest 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)

Väljund:

guru99 => guru99
is => be
totally => totally
new => new
kind => kind
of => of
learning => learn
experience => experience
. => .

Code Selgitus:

  • Korpuse lugeja wordnet imporditakse ja WordNetLemmatizer imporditakse wordnetist.
  • Sõnade märgistamine ja kõneosade märgend imporditakse nltk-st ja vaikesõnastik kollektsioonidest.
  • Luuakse sõnastik, kus pos_tag esimene täht on võti, mis on kaardistatud Wordneti sõnastiku väärtusega.
  • Tekst kirjutatakse ja tokeniseeritakse ning tsükli sees kasutamiseks luuakse objekt lemma_function.
  • Tsükkel käivitatakse ja lemmatize võtab kaks argumenti: märgi ja kaardi.ping pos_tag-ist koos WordNeti väärtusega.

Python Lemmatiseerimisel on tihe seos WordNeti sõnastik, seega on oluline seda teemat järgmisena uurida.

KKK

Porteri tüvega sõna on NLTK PorterStemmer klass. See rakendab järelliidete riba.ping Martin Porteri 1980. aasta algoritmi reegleid, mis taadavad ingliskeelsed sõnad nende tüveks, nii et sõnadest „waiting”, „waited” ja „waits” saab kõik „wait”.

Kasutage tüve moodustamist, kui kiirus ja lihtsus on loetavusest olulisemad, näiteks otsingu indekseerimisel, ulatuslikul sentimentaalsuse analüüsil või tunnuste vähendamisel. Valige lemmatiseerimine, kui väljund peab olema kehtiv, inimloetav sõna.

Teksti normaliseerimine teisendab sõna erinevad vormid üheks ühiseks esituseks. Tüve moodustamine ja lemmatiseerimine on kaks normaliseerimistehnikat, mis vähendavad sõnatihedust, nii et mudel käsitleb variante nagu „uurimine“ ja „uuringud“ ühe tunnusena.

NLTK pakub tüveotsingu jaoks PorterStemmerit (ja teisi tüveotsaga sõnade otsijaid, näiteks Snowballi) ning lemmatiseerimise jaoks WordNetLemmatizerit. Lemmatiseerija tugineb iga sõna õige algvormi tagastamiseks WordNeti sõnastikule.

Need eemaldavad üleliigsed sõnavariatsioonid, nii et masinõppemudel näeb puhtamaid ja madalama dimensiooniga tunnuseid. Vähem duplikaatmärke tähendab vähem ebaselgust treeningu ajal ja täpsemaid ennustusi nähtamatu teksti kohta.

Tänapäevased tehisintellekti mudelid järeldavad konteksti automaatselt, kuid NLTK WordNetLemmatizer vajab üheselt mõistetavaks sõnaliigi silti. Selle sildi lisamine võimaldab tal valida õige lemma, näiteks muuta „õppimine“ tegusõnana märgistatuna „õppima“.

Sõna võib olla nimisõna või tegusõna, millel on erinevad lemad. Ilma sõnaliigi sildita eeldab WordNetLemmatizer nimisõna. Õige sildi, näiteks tegusõna või omadussõna, edastamine annab õige põhivormi.

Ei. Tüve moodustamine annab tulemuseks ainult järelliited, seega sõnast „studies“ saab „studi“ ja sõnast „cries“ saab „cri“, mis ei ole korrektsed sõnad. Lemmatiseerimine seevastu tagastab alati tegeliku sõnastikusõna, näiteks „study“.

Võta see postitus kokku järgmiselt: