POS označavanje s NLTK i Chunking u NLP [PRIMJERI]
POS označavanje
POS označavanje (Parts of Speech Tagging) postupak je označavanja riječi u tekstualnom formatu za određeni dio govora na temelju njegove definicije i konteksta. Odgovoran je za čitanje teksta na jeziku i dodjeljivanje određenog tokena (dijelova govora) svakoj riječi. Također se naziva i gramatičko označavanje.
Učimo na primjeru NLTK dijela govora:
Ulazni: Sve da nam dopuste.
Izlaz: [('Sve', NN),('do', TO), ('dozvola', VB), ('nas', PRP)]
Koraci uključeni u primjer označavanja POS-a
- Tokeniziraj tekst (word_tokenize)
- primijenite pos_tag na gornji korak koji je nltk.pos_tag(tokenize_text)
Primjeri NLTK POS oznaka su sljedeći:
skraćenica | Značenje |
---|---|
CC | koordinirajući veznik |
CD | kardinalna znamenka |
DT | odrediti |
EX | egzistencijalni tamo |
FW | strana riječ |
IN | prijedlog/podredni veznik |
JJ | Ova NLTK POS oznaka je pridjev (veliki) |
JJR | pridjev, komparativ (veći) |
JJS | pridjev, superlativ (najveći) |
LS | lista tržišta |
MD | modalno (mogla bi, hoće) |
NN | imenica, jednina (mačka, drvo) |
NNS | imenica množina (stolovi) |
NNP | vlastita imenica, jednina (sarah) |
NNPS | vlastita imenica, množina (Indijanci ili Amerikanci) |
PDT | predodređen (sve, oboje, pola) |
POS | posvojni završetak (roditeljski) |
PRP | osobna zamjenica (njen, ona, on, sam) |
PRP$ | posvojna zamjenica (njen, njegov, moj, moj, naš) |
RB | prilog (povremeno, brzo) |
RBR proširenje | prilog, komparativ (veći) |
RBS | prilog, superlativ (najveći) |
RP | čestica (oko) |
DO | beskonačni marker (do) |
UH | uzvik (zbogom) |
VB | glagol (pitati) |
RN | glagolski gerundij (suditi) |
VBD | glagol prošlo vrijeme (molio se) |
VBN | glagol prošli particip (ponovno ujedinjen) |
VBP | glagol, sadašnje vrijeme ne 3. lice jednine (zamotati) |
VBZ | glagol, sadašnje vrijeme s 3. licem jednine (osnove) |
wdt | wh-determinator (to, što) |
WP | wh- zamjenica (tko) |
WRB | wh- prilog (kako) |
Gornji popis NLTK POS oznaka sadrži sve NLTK POS oznake. NLTK POS tagger koristi se za dodjelu gramatičkih informacija svakoj riječi u rečenici. Instalacija, uvoz i preuzimanje svih paketa POS NLTK-a je dovršeno.
Što je Chunking u NLP-u?
Komadanje u NLP-u je proces uzimanja malih dijelova informacija i grupiranja u velike jedinice. Primarna upotreba Chunkinga je stvaranje grupa "imeničkih izraza". Koristi se za dodavanje strukture rečenici slijedeći POS označavanje u kombinaciji s regularnim izrazima. Dobivena skupina riječi naziva se "komadići". Također se naziva plitko parsiranje.
U plitkom raščlanjivanju postoji najviše jedna razina između korijena i listova, dok se duboko raščlanjivanje sastoji od više od jedne razine. Plitko raščlanjivanje također se naziva lagano raščlanjivanje ili chunking.
Pravila za usitnjavanje
Ne postoje unaprijed definirana pravila, ali ih možete kombinirati prema potrebi i zahtjevu.
Na primjer, trebate označiti imenicu, glagol (prošlo vrijeme), pridjev i koordinirajuće spojnice iz rečenice. Možete koristiti pravilo kao u nastavku
komad:{ * * * ?}
Sljedeća tablica pokazuje što različiti simboli znače:
Naziv simbola | Description |
---|---|
. | Bilo koji znak osim novog retka |
* | Spojite 0 ili više ponavljanja |
? | Spojite 0 ili 1 ponavljanja |
Napišimo sada kod kako bismo bolje razumjeli pravilo
from nltk import pos_tag from nltk import RegexpParser text ="learn php from guru99 and make study easy".split() print("After Split:",text) tokens_tag = pos_tag(text) print("After Token:",tokens_tag) patterns= """mychunk:{<NN.?>*<VBD.?>*<JJ.?>*<CC>?}""" chunker = RegexpParser(patterns) print("After Regex:",chunker) output = chunker.parse(tokens_tag) print("After Chunking",output)
Izlaz:
After Split: ['learn', 'php', 'from', 'guru99', 'and', 'make', 'study', 'easy'] After Token: [('learn', 'JJ'), ('php', 'NN'), ('from', 'IN'), ('guru99', 'NN'), ('and', 'CC'), ('make', 'VB'), ('study', 'NN'), ('easy', 'JJ')] After Regex: chunk.RegexpParser with 1 stages: RegexpChunkParser with 1 rules: <ChunkRule: '<NN.?>*<VBD.?>*<JJ.?>*<CC>?'> After Chunking (S (mychunk learn/JJ) (mychunk php/NN) from/IN (mychunk guru99/NN and/CC) make/VB (mychunk study/NN easy/JJ))
Zaključak iz gornjeg označavanja dijela govora Python primjer: "make" je glagol koji nije uključen u pravilo, tako da nije označen kao mychunk
Slučaj upotrebe komadanja
Chunking se koristi za detekciju entiteta. Entitet je onaj dio rečenice pomoću kojeg stroj dobiva vrijednost za bilo koju namjeru.
Example: Temperature of New York. Here Temperature is the intention and New York is an entity.
Drugim riječima, chunking se koristi kao odabir podskupa tokena. Slijedite kod u nastavku da biste razumjeli kako se dijeljenje koristi za odabir tokena. U ovom primjeru vidjet ćete grafikon koji će odgovarati dijelu imeničke fraze. Napisat ćemo kod i nacrtati graf radi boljeg razumijevanja.
Kod za demonstraciju slučaja uporabe
import nltk text = "learn php from guru99" tokens = nltk.word_tokenize(text) print(tokens) tag = nltk.pos_tag(tokens) print(tag) grammar = "NP: {<DT>?<JJ>*<NN>}" cp =nltk.RegexpParser(grammar) result = cp.parse(tag) print(result) result.draw() # It will draw the pattern graphically which can be seen in Noun Phrase chunking
Izlaz:
['learn', 'php', 'from', 'guru99'] -- These are the tokens [('learn', 'JJ'), ('php', 'NN'), ('from', 'IN'), ('guru99', 'NN')] -- These are the pos_tag (S (NP learn/JJ php/NN) from/IN (NP guru99/NN)) -- Noun Phrase Chunking
Grafikon
Iz grafikona možemo zaključiti da su "learn" i "guru99" dva različita tokena, ali su kategorizirana kao imenička fraza, dok token "from" ne pripada imeničkoj frazi.
Chunking se koristi za kategorizaciju različitih tokena u isti chunk. Rezultat će ovisiti o gramatici koja je odabrana. Further Chunking NLTK se koristi za označavanje uzoraka i za istraživanje korpusa teksta.
BROJENJE POS OZNAKA
Razgovarali smo o raznim pos_tag u prethodnom odjeljku. U ovom ćete vodiču proučiti kako brojati te oznake. Oznake za brojanje ključne su za klasifikaciju teksta, kao i za pripremu značajki za operacije temeljene na prirodnom jeziku. Raspravljat ću s vama o pristupu koji je guru99 slijedio dok je pripremao kod zajedno s raspravom o izlazu. Nadam se da će vam ovo pomoći.
Kako brojati oznake:
Ovdje ćemo prvo napisati radni kod, a zatim ćemo napisati različite korake za objašnjenje koda.
from collections import Counter import nltk text = "Guru99 is one of the best sites to learn WEB, SAP, Ethical Hacking and much more online." lower_case = text.lower() tokens = nltk.word_tokenize(lower_case) tags = nltk.pos_tag(tokens) counts = Counter( tag for word, tag in tags) print(counts)
Izlaz:
Brojač({'NN': 5, ',': 2, 'TO': 1, 'CC': 1, 'VBZ': 1, 'NNS': 1, 'CD': 1, '.': 1 , 'DT': 1, 'JJS': 1, 'JJ': 1, 'JJR': 1, 'IN': 1, 'VB': 1, 'RB': 1})
Razrada kodeksa
- Za brojanje oznaka možete koristiti paket Brojač iz modula zbirke. Brojač je podklasa rječnika koja radi na principu operacije ključ-vrijednost. To je neuređena zbirka u kojoj su elementi pohranjeni kao ključ rječnika, dok je broj njihova vrijednost.
- Uvezite nltk koji sadrži module za označavanje teksta.
- Napišite tekst čiji pos_tag želite prebrojati.
- Neke su riječi pisane velikim slovima, a neke malim slovima, pa je prikladno transformirati sve riječi malim slovima prije primjene tokenizacije.
- Proslijedite riječi kroz word_tokenize iz nltk.
- Izračunajte pos_tag svakog tokena
Output = [('guru99', 'NN'), ('is', 'VBZ'), ('one', 'CD'), ('of', 'IN'), ('the', 'DT'), ('best', 'JJS'), ('site', 'NN'), ('to', 'TO'), ('learn', 'VB'), ('web', 'NN'), (',', ','), ('sap', 'NN'), (',', ','), ('ethical', 'JJ'), ('hacking', 'NN'), ('and', 'CC'), ('much', 'RB'), ('more', 'JJR'), ('online', 'JJ')]
- Sada dolazi uloga brojača rječnika. Uvezli smo redak koda 1. Riječi su ključ, a oznake su vrijednost, a brojač će brojati svaku oznaku ukupni broj prisutan u tekstu.
Distribucija frekvencije
Frekvencijska distribucija se naziva koliko se puta pojavljuje ishod eksperimenta. Koristi se za pronalaženje učestalosti svake riječi koja se pojavljuje u dokumentu. Koristi se FreqDistclass i definiran od strane nltk.probabilty modul.
Distribucija učestalosti obično se stvara prebrojavanjem uzoraka uzastopnog izvođenja eksperimenta. Broj brojača se svaki put povećava za jedan. Npr
freq_dist = FreqDist()
za token u dokumentu:
freq_dist.inc(token.type())
Za svaku riječ možemo provjeriti koliko se puta pojavila u pojedinom dokumentu. Npr
- Metoda brojanja: freq_dist.count('and') Ovaj izraz vraća vrijednost broja pojavljivanja 'i'. To se zove metoda brojanja.
- Metoda učestalosti: freq_dist.freq('and') Ovaj izraz vraća frekvenciju danog uzorka.
Napisat ćemo mali program i detaljno objasniti njegov rad. Napisat ćemo tekst i izračunati distribuciju učestalosti svake riječi u tekstu.
import nltk a = "Guru99 is the site where you can find the best tutorials for Software Testing Tutorial, SAP Course for Beginners. Java Tutorial for Beginners and much more. Please visit the site guru99.com and much more." words = nltk.tokenize.word_tokenize(a) fd = nltk.FreqDist(words) fd.plot()
Objašnjenje koda:
- Uvezi nltk modul.
- Napiši tekst čiju rasprostranjenost riječi trebaš pronaći.
- Tokenizirajte svaku riječ u tekstu koji se služi kao ulaz u FreqDist modul nltk-a.
- Primijenite svaku riječ na nlk.FreqDist u obliku popisa
- Ucrtajte riječi u grafikon koristeći plot()
Molimo vizualizirajte grafikon radi boljeg razumijevanja napisanog teksta
NAPOMENA: Morate imati instaliran matplotlib da biste vidjeli gornji grafikon
Promatrajte gornji grafikon. Odgovara brojanju pojavljivanja svake riječi u tekstu. Pomaže u proučavanju teksta i dalje u provedbi sentimentalne analize temeljene na tekstu. Ukratko, može se zaključiti da nltk ima modul za brojanje pojavljivanja svake riječi u tekstu koji pomaže u pripremi statistike značajki prirodnog jezika. Ima značajnu ulogu u pronalaženju ključnih riječi u tekstu. Također možete izvući tekst iz pdf-a pomoću biblioteka kao što je ekstrakt, PyPDF2 i unijeti tekst u nlk.FreqDist.
Ključni pojam je "tokenizirati". Nakon tokenizacije, provjerava svaku riječ u određenom odlomku ili tekstualnom dokumentu kako bi odredio koliko se puta pojavila. Za to vam nije potreban NLTK alat. To možete učiniti i s vlastitim vještinama programiranja pythona. NLTK toolkit pruža samo kod spreman za korištenje za različite operacije.
Brojanje svake riječi možda neće biti od velike koristi. Umjesto toga treba se usredotočiti na kolokaciju i bigrame koji se bave velikim brojem riječi u paru. Ovi parovi identificiraju korisne ključne riječi za bolje značajke prirodnog jezika koje se mogu unijeti u stroj. U nastavku pogledajte njihove detalje.
Kolokacije: bigrami i trigrami
Što su kolokacije?
Kolokacije su parovi riječi koji se zajedno pojavljuju mnogo puta u dokumentu. Izračunava se brojem tih parova koji se pojavljuju zajedno u ukupnom broju riječi u dokumentu.
Razmotrite elektromagnetski spektar s riječima kao što su ultraljubičaste zrake, infracrvene zrake.
Riječi ultraljubičasto i zrake ne koriste se pojedinačno i stoga se mogu tretirati kao kolokacija. Drugi primjer je CT skeniranje. CT i skeniranje ne kažemo odvojeno, pa se stoga i oni tretiraju kao kolokacija.
Možemo reći da pronalaženje kolokacija zahtijeva izračunavanje učestalosti riječi i njihovo pojavljivanje u kontekstu drugih riječi. Ove specifične zbirke riječi zahtijevaju filtriranje kako bi se zadržali pojmovi korisnog sadržaja. Svaki gram riječi može se zatim ocijeniti prema nekoj mjeri asocijacije, kako bi se odredila relativna vjerojatnost da je svaki Ingram kolokacija.
Kolokacija se može kategorizirati u dvije vrste-
- Bigrami ckombinacija dviju riječi
- Trigramikombinacija tri riječi
Bigrami i trigrami pružaju značajnije i korisnije značajke za fazu izdvajanja značajki. Oni su posebno korisni u tekstualnoj sentimentalnoj analizi.
Primjer koda bigrama
import nltk text = "Guru99 is a totally new kind of learning experience." Tokens = nltk.word_tokenize(text) output = list(nltk.bigrams(Tokens)) print(output)
Izlaz:
[('Guru99', 'is'), ('is', 'totally'), ('totally', 'new'), ('new', 'kind'), ('kind', 'of'), ('of', 'learning'), ('learning', 'experience'), ('experience', '.')]
Trigrams Primjer koda
Ponekad postaje važno vidjeti par od tri riječi u rečenici za statističku analizu i brojanje učestalosti. Ovo opet igra presudnu ulogu u formiranju NLP (značajke obrade prirodnog jezika), kao i sentimentalno predviđanje temeljeno na tekstu.
Isti kod se izvodi za izračunavanje trigrama.
import nltk text = “Guru99 is a totally new kind of learning experience.” Tokens = nltk.word_tokenize(text) output = list(nltk.trigrams(Tokens)) print(output)
Izlaz:
[('Guru99', 'is', 'totally'), ('is', 'totally', 'new'), ('totally', 'new', 'kind'), ('new', 'kind', 'of'), ('kind', 'of', 'learning'), ('of', 'learning', 'experience'), ('learning', 'experience', '.')]
Označavanje rečenica
Označavanje rečenice u širem smislu odnosi se na dodavanje oznaka glagola, imenice itd. kontekstu rečenice. Identifikacija POS oznaka je kompliciran proces. Stoga generičko označavanje POS-a nije moguće ručno jer neke riječi mogu imati različita (dvosmislena) značenja u skladu sa strukturom rečenice. Pretvorba teksta u obliku popisa važan je korak prije označavanja jer se svaka riječ na popisu ponavlja i broji za određenu oznaku. Pogledajte kod u nastavku da biste ga bolje razumjeli
import nltk text = "Hello Guru99, You have to build a very good site, and I love visiting your site." sentence = nltk.sent_tokenize(text) for sent in sentence: print(nltk.pos_tag(nltk.word_tokenize(sent)))
Izlaz:
[('Zdravo', 'NNP'), ('Guru99', 'NNP'), (',', ','), ('Vi', 'PRP'), ('imate', 'VBP') , ('build', 'VBN'), ('a', 'DT'), ('vrlo', 'RB'), ('dobro', 'JJ'), ('site', 'NN') , ('i', 'CC'), ('ja', 'PRP'), ('ljubav', 'VBP'), ('u posjetu', 'VBG'), ('vaš', 'PRP$' ), ('site', 'NN'), ('.', '.')]
Objašnjenje koda:
- Kod za uvoz nltk-a (Komplet alata za prirodni jezik koji sadrži podmodule kao što su tokenize rečenica i tokenize riječi.)
- Tekst čije oznake treba ispisati.
- Tokenizacija rečenice
- For petlja je implementirana gdje se riječi tokeniziraju iz rečenice i oznaka svake riječi se ispisuje kao izlaz.
U Corpusu postoje dvije vrste POS oznaka:
- Na temelju pravila
- Stohastički POS označivači
1. POS oznaka temeljena na pravilima: Za riječi dvosmislenog značenja primjenjuje se pristup temeljen na pravilima na temelju kontekstualnih informacija. To se radi provjerom ili analizom značenja prethodne ili sljedeće riječi. Informacije se analiziraju iz okruženja riječi ili unutar nje same. Stoga su riječi označene gramatičkim pravilima određenog jezika kao što su velika i mala slova i interpunkcija. npr. Brillova oznaka.
2. Stohastički POS označivač: U okviru ove metode primjenjuju se različiti pristupi kao što su učestalost ili vjerojatnost. Ako je riječ uglavnom označena određenom oznakom u skupu za obuku, tada joj se u testnoj rečenici daje ta posebna oznaka. Oznaka riječi ne ovisi samo o vlastitoj oznaci, već io prethodnoj oznaci. Ova metoda nije uvijek točna. Drugi način je izračunati vjerojatnost pojavljivanja određene oznake u rečenici. Stoga se konačna oznaka izračunava provjerom najveće vjerojatnosti riječi s određenom oznakom.
POS označavanje sa skrivenim Markovljevim modelom
Problemi označavanja također se mogu modelirati pomoću HMM-a. Tretira ulazne tokene kao vidljivi niz dok se oznake smatraju skrivenim stanjima, a cilj je odrediti skriveni niz stanja. Na primjer x = x1,x2,…………,xn gdje je x niz tokena while y = y1,y2,y3,y4………gnje skriveni niz.
Kako funkcionira skriveni Markovljev model (HMM)?
HMM koristi distribuciju pridruživanja koja je P(x, y) gdje je x ulazni niz/slijed tokena, a y niz oznaka.
Niz oznaka za x bit će argmaxy1….ynp(x1,x2,….xn,y1,y2,y3,…..). Kategorizirali smo oznake iz teksta, ali statistika takvih oznaka je vitalna. Dakle, sljedeći dio je brojanje ovih oznaka za statističku studiju.
rezime
- POS označavanje u NLTK je postupak označavanja riječi u tekstualnom formatu za određeni dio govora na temelju njegove definicije i konteksta.
- Neki primjeri NLTK POS označavanja su: CC, CD, EX, JJ, MD, NNP, PDT, PRP$, TO, itd.
- POS tagger se koristi za dodjelu gramatičkih informacija svakoj riječi u rečenici. Instalacija, uvoz i preuzimanje svih paketa označavanja dijela govora s NLTK-om je dovršeno.
- Chunking u NLP-u je proces uzimanja malih dijelova informacija i njihovog grupiranja u velike jedinice.
- Ne postoje unaprijed definirana pravila, ali ih možete kombinirati prema potrebi i zahtjevu.
- Chunking se koristi za detekciju entiteta. Entitet je onaj dio rečenice pomoću kojeg stroj dobiva vrijednost za bilo koju namjeru.
- Chunking se koristi za kategorizaciju različitih tokena u isti chunk.