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

Imenski izraz Chunking Graph
Noun Phrase chunking Graph

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

BROJENJE POS OZNAKA

  1. 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.
  2. Uvezite nltk koji sadrži module za označavanje teksta.
  3. Napišite tekst čiji pos_tag želite prebrojati.
  4. Neke su riječi pisane velikim slovima, a neke malim slovima, pa je prikladno transformirati sve riječi malim slovima prije primjene tokenizacije.
  5. Proslijedite riječi kroz word_tokenize iz nltk.
  6. 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')]
  7. 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

  1. Metoda brojanja: freq_dist.count('and') Ovaj izraz vraća vrijednost broja pojavljivanja 'i'. To se zove metoda brojanja.
  2. 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()

Distribucija frekvencije

Objašnjenje koda:

  1. Uvezi nltk modul.
  2. Napiši tekst čiju rasprostranjenost riječi trebaš pronaći.
  3. Tokenizirajte svaku riječ u tekstu koji se služi kao ulaz u FreqDist modul nltk-a.
  4. Primijenite svaku riječ na nlk.FreqDist u obliku popisa
  5. Ucrtajte riječi u grafikon koristeći plot()

Molimo vizualizirajte grafikon radi boljeg razumijevanja napisanog teksta

Distribucija učestalosti svake riječi u grafikonu

Distribucija učestalosti svake riječi u grafikonu

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'), ('.', '.')]

Označavanje rečenica

Objašnjenje koda:

  1. Kod za uvoz nltk-a (Komplet alata za prirodni jezik koji sadrži podmodule kao što su tokenize rečenica i tokenize riječi.)
  2. Tekst čije oznake treba ispisati.
  3. Tokenizacija rečenice
  4. 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.