Stemming un Lemmatization ar Python NLTK

Satura rādītājs:

Anonim

Kas ir Stemming?

Stemming ir sava veida vārdu normalizācija. Normalizācija ir paņēmiens, kurā vārdu kopa teikumā tiek pārveidota par secību, lai saīsinātu tā meklēšanu. Vārdi, kuriem ir tāda pati nozīme, bet kuriem ir dažas variācijas atkarībā no konteksta vai teikuma, tiek normalizēti.

Citā vārdā ir viens saknes vārds, bet tiem pašiem vārdiem ir daudz variāciju. Piemēram, pamatvārds ir "ēst", un tā variācijas ir "ēd, ēd, ēd un patīk". Tādā pašā veidā ar Stemming palīdzību mēs varam atrast visu variāciju saknes vārdu.

Piemēram

He was riding.He was taking the ride.

Iepriekšējos divos teikumos nozīme ir vienāda, ti, braukšanas aktivitāte pagātnē. Cilvēks var viegli saprast, ka abas nozīmes ir vienādas. Bet mašīnām abi teikumi ir atšķirīgi. Tādējādi kļuva grūti to pārveidot tajā pašā datu rindā. Ja mēs nenodrošinām to pašu datu kopu, mašīna nespēj paredzēt. Tāpēc ir nepieciešams nošķirt katra vārda nozīmi, lai sagatavotu datu kopu mašīnmācībai. Un šeit stemming tiek izmantots, lai kategorizētu tāda paša veida datus, iegūstot tā saknes vārdu.

Īstenosim to ar programmu Python. NLTK ir algoritms ar nosaukumu "PorterStemmer". Šis algoritms pieņem tokenizētā vārda sarakstu un sakņo to saknes vārdā.

Programma Stemming izpratnei

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

Izeja :

waitwaitwaitwait

Koda skaidrojums:

  • NLTk ir cilmes modulis, kas tiek importēts. Ja importējat visu moduli, programma kļūst smaga, jo tajā ir tūkstošiem kodu rindu. Tātad no visa cilmes moduļa mēs importējām tikai "PorterStemmer".
  • Mēs sagatavojām šī paša vārda variācijas datu fiktīvu sarakstu.
  • Tiek izveidots objekts, kas pieder klasei nltk.stem.porter.PorterStemmer.
  • Tālāk mēs to pa vienam nodevām PorterStemmer, izmantojot cilni “par”. Visbeidzot, mēs ieguvām katra sarakstā minētā vārda izejas saknes vārdu.

No iepriekš minētā skaidrojuma var secināt arī to, ka izveide tiek uzskatīta par svarīgu priekšapstrādes posmu, jo tā novērsa dublēšanos datos un tā paša vārda variācijas. Rezultātā tiek filtrēti dati, kas palīdzēs labāk apmācīt mašīnu.

Tagad mēs pieņemam pilnu teikumu un pārbaudām tā uzvedību kā rezultātu.

Programma:

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)

Izeja:

helloguru99,youhavebuildaverigoodsiteandIlovevisityoursite

Kods Paskaidrojums

  • Pakotne PorterStemer tiek importēta no moduļa kāta
  • Tiek importēti iepakojumi teikuma apzīmēšanai, kā arī vārdi
  • Tiek uzrakstīts teikums, kas jāapzīmē nākamajā solī.
  • Šajā solī tiek ieviesta vārdu marķēšana.
  • Šeit tiek izveidots objekts PorterStemmer.
  • Tiek palaista cilpa, un katra vārda atdalīšana tiek veikta, izmantojot objektu, kas izveidots koda 5. rindā

Secinājums:

Stemming ir datu pirmapstrādes modulis. Angļu valodā ir daudz viena vārda variāciju. Šīs variācijas rada neskaidrības mašīnmācīšanās apmācībā un paredzēšanā. Lai izveidotu veiksmīgu modeli, ir svarīgi filtrēt šādus vārdus un konvertēt uz tāda paša veida secīgiem datiem, izmantojot saknes. Tas ir arī svarīgs paņēmiens, kā iegūt rindu datus no teikumu kopas un lieko datu noņemšana, kas pazīstama arī kā normalizēšana.

Kas ir Lemmatization?

Lemmatizācija ir algoritmisks process, kā atrast vārda lemmu atkarībā no to nozīmes. Lemmatizācija parasti attiecas uz vārdu morfoloģisko analīzi, kuras mērķis ir noņemt locījuma galus. Tas palīdz atgriezt vārda bāzes vai vārdnīcas formu, kas ir pazīstama kā lemma. NLTK Lemmatization metode ir balstīta uz WorldNet iebūvēto morph funkciju. Teksta pirmapstrāde ietver gan stemming, gan lemmatization. Daudzi cilvēki uzskata, ka abi termini ir mulsinoši. Daži pret tiem izturas vienādi, taču starp abiem ir atšķirība. Zemāk minētā iemesla dēļ priekšroka dodama lemmatizācijai, nevis pirmajai.

Kāpēc Lemmatizācija ir labāka par Stemming?

Izcelsmes algoritms darbojas, nogriežot no vārda sufiksu. Plašākā nozīmē sagriež vārda sākumu vai beigas.

Gluži pretēji, Lemmatization ir spēcīgāka darbība, un tajā tiek ņemta vērā vārdu morfoloģiskā analīze. Tas atgriež lemmu, kas ir visu tās locīšanas formu pamatforma. Lai izveidotu vārdnīcas un meklētu pareizu vārda formu, ir nepieciešamas padziļinātas valodas zināšanas. Stemming ir vispārēja darbība, bet lemmatization ir inteliģenta operācija, kurā vārdnīcā tiks izskatīta pareizā forma. Tādējādi lemmatizācija palīdz veidot labākas mašīnmācīšanās iespējas.

Kods, lai atšķirtu Lemmatization un Stemming

Izcelsmes kods

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

Izeja:

Stemming for studies is studiStemming for studying is studiStemming for cries is criStemming for cry is cri

Lemmatization kods

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

Izeja:

Lemma for studies is studyLemma for studying is studyingLemma for cries is cryLemma for cry is cry

Rezultāta apspriešana:

Ja jūs meklējat mācībām un studijām, rezultāts ir vienāds (studi), bet lemmatizer nodrošina atšķirīgu likmi gan žetonu studijām studijām, gan studijām studijām. Tāpēc, kad mums ir jāizveido iezīme vilciena mašīnai, būtu lieliski, ja priekšroka būtu dota lemmatizācijai.

Lemmatizer lietošanas gadījums:

Lemmatizer samazina teksta neskaidrību. Vārdu piemēri, piemēram, velosipēds vai velosipēdi, tiek pārveidoti par bāzes vārdu velosipēds. Būtībā tas pārveidos visus vārdus ar tādu pašu nozīmi, bet atšķirīgu attēlojumu to pamatformā. Tas samazina vārdu blīvumu dotajā tekstā un palīdz sagatavot precīzas funkcijas apmācības mašīnai. Tīrāki dati, jo viedāks un precīzāks būs jūsu mašīnmācīšanās modelis. Lemmatizerwill arī ietaupa atmiņu, kā arī aprēķina izmaksas.

Reālā laika piemērs, kas parāda Wordnet Lemmatization un POS Tagging izmantošanu Python

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)

Kods Paskaidrojums

  • Pirmkārt, tiek importēts korpusa lasītāja vārdu tīkls.
  • WordNetLemmatizer tiek importēts no wordnet
  • Vārdu marķēšana, kā arī runas tagu daļas tiek importētas no nltk
  • Noklusējuma vārdnīca tiek importēta no kolekcijām
  • Vārdnīca tiek izveidota, kur pos_tag (pirmais burts) ir galvenās vērtības, kuru vērtības tiek kartētas ar vārdu no wordnet vārdnīcas. Mēs esam paņēmuši vienīgo pirmo burtu, jo to izmantosim vēlāk.
  • Teksts ir rakstīts un ir marķēts.
  • Tiek izveidots objekta lemma_function, kas tiks izmantots cilpas iekšpusē
  • Loop tiek palaists, un lemmatize prasīs divus argumentus, viens ir marķieris, bet otrs - pos_tag kartēšana ar wordnet vērtību.

Izeja:

guru99 => guru99is => betotally => totallynew => newkind => kindof => oflearning => learnexperience => experience. => .

Lemmatizācijai ir cieša saistība ar wordnet vārdnīcu, tāpēc ir svarīgi izpētīt šo tēmu, tāpēc mēs to paturam kā nākamo tēmu