POS-tunnisteet NLTK:n avulla ja lohkominen NLP:ssä [ESIMERKKI]

POS-merkintä

POS-merkintä (Parts of Speech Tagging) on ​​prosessi, jolla merkitään sanat tekstimuodossa tiettyä puheen osaa varten sen määritelmän ja kontekstin perusteella. Se on vastuussa tekstin lukemisesta kielellä ja tietyn tunnuksen (puheenosien) määrittämisestä jokaiselle sanalle. Sitä kutsutaan myös kielioppitunnisteeksi.

Opitaan NLTK-puheosan esimerkillä:

input: Kaiken sen salliessamme.

lähtö: [('Kaikki', NN),('to', TO), ('lupa', VB), ('meitä', PRP)]

Vaiheet POS-koodausesimerkissä mukana

  • Tokenize teksti (word_tokenize)
  • käytä pos_tagia yllä olevaan vaiheeseen, joka on nltk.pos_tag(tokenize_text)

NLTK POS -tunnisteet ovat seuraavat:

Lyhenne Merkitys
CC rinnastuskonjunktio
CD kardinaalinumero
DT määrääjä
EX eksistentiaalista siellä
FW vieras sana
IN prepositio / alisteinen konjunktio
JJ Tämä NLTK POS -tunniste on adjektiivi (suuri)
JJR adjektiivi, vertaileva (isompi)
JJS adjektiivi, superlatiivi (suurin)
LS lista markkinoilla
MD modaalinen (voisi, tahtoo)
NN substantiivi, yksikkö (kissa, puu)
NNS substantiivi monikko (pöydät)
NNP oikea substantiivi, yksikkö (sarah)
NNPS oikea substantiivi, monikko (intiaanit tai amerikkalaiset)
PDT ennalta määrätty (kaikki, molemmat, puoli)
POS omistuskirjapääte (vanhemman)
PRP persoonapronomini (hänen, hän, hän, itse)
PRP $ omistuspronomini (hänen, hänen, minun, minun, meidän )
RB adverbi (satunnaisesti, nopeasti)
RBR adverbi, vertaileva (suurempi)
RBS adverbi, superlatiivi (suurin)
RP hiukkanen (noin)
TO ääretön merkki (to)
UH välihuomautus (näkemiin)
VB verbi (kysyä)
GBV verbi gerund (tuomitsee)
VBD verbi mennyt aika (annoi)
VBN verbin mennyt partisitiivi (yhdistetty)
VBP verbi, nykyinen aika ei yksikön 3. persoona(kääre)
VBZ verbi, nykyinen aika yksikön 3. persoonalla (pohjat)
wdt wh-määrittäjä (se, mikä)
WP wh- pronomini (kuka)
WRB mikä-adverbi (miten)

Yllä oleva NLTK POS -tunnisteluettelo sisältää kaikki NLTK POS -tunnisteet. NLTK POS -tunnistetta käytetään määrittämään kielioppitiedot lauseen jokaiselle sanalle. Kaikkien POS NLTK -pakettien asennus, tuonti ja lataaminen on valmis.

Mitä on chunking NLP:ssä?

tiivistämistä NLP:ssä on prosessi, jossa otetaan pieniä tietoja ja ryhmitellään ne suuriksi yksiköiksi. Chunkingin ensisijainen käyttötarkoitus on "substantiivilausekkeiden" ryhmien muodostaminen. Sitä käytetään lisäämään lauseeseen rakennetta seuraamalla POS-koodausta yhdistettynä säännöllisiin lausekkeisiin. Tuloksena olevaa sanaryhmää kutsutaan "paloiksi". Sitä kutsutaan myös matalaksi jäsennykseksi.

Matalassa jäsentämisessä juurien ja lehtien välissä on enintään yksi taso, kun taas syväjäsennys koostuu useammasta kuin yhdestä tasosta. Matalaa jäsentämistä kutsutaan myös kevyeksi jäsennykseksi tai paloiksi.

Purkamisen säännöt

Ennalta määriteltyjä sääntöjä ei ole, mutta voit yhdistää niitä tarpeen ja tarpeen mukaan.

Sinun täytyy esimerkiksi merkitä lauseesta substantiivi, verbi (menneisyys), adjektiivi ja koordinoiva risteys. Voit käyttää alla olevaa sääntöä

kimpale:{ * * * ?}

Seuraava taulukko näyttää, mitä eri symbolit tarkoittavat:

Symbolin nimi Tuotetiedot
. Mikä tahansa merkki paitsi uusi rivi
* Yhdistä 0 tai useampi toisto
? Ottelu 0 tai 1 toistoa

Kirjoita nyt koodi ymmärtääksemme säännön paremmin

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)

lähtö:

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

Päätelmä yllä olevasta Puhetunnisteen osasta Python esimerkki: "make" on verbi, joka ei sisälly sääntöön, joten sitä ei ole merkitty mychunkiksi

Käyttö Case of Chunking

Pakkauksia käytetään kokonaisuuden havaitsemiseen. Entiteetti on se osa lausetta, jonka avulla kone saa arvon mille tahansa tarkoitukselle.

Example: 
Temperature of New York. 
Here Temperature is the intention and New York is an entity. 

Toisin sanoen paloittelua käytetään merkkien osajoukkojen valitsemiseen. Noudata alla olevaa koodia ymmärtääksesi, kuinka paloja käytetään merkkien valitsemiseen. Tässä esimerkissä näet kaavion, joka vastaa substantiivilauseen osaa. Kirjoitamme koodin ja piirrämme kaavion ymmärtääksemme paremmin.

Koodi käyttötapauksen osoittamiseksi

 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 

lähtö:

['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

Kaavio

Substantiivi lause Chunking Graph
Substantiivi Fraasi chunking Graph

Kaaviosta voimme päätellä, että "learn" ja "guru99" ovat kaksi eri merkkiä, mutta ne luokitellaan substantiivilauseeksi, kun taas token "from" ei kuulu substantiivilauseeseen.

Chunkingia käytetään luokittelemaan eri merkit samaan palaan. Tulos riippuu valitusta kielioppista. Lisäksi Chunking NLTK:ta käytetään kuvioiden merkitsemiseen ja tekstikorpoihin tutkimiseen.

LASKE POS TAGSIA

Olemme keskustelleet erilaisista pos_tag edellisessä osiossa. Tässä opetusohjelmassa opit näiden tunnisteiden laskemista. Laskentatunnisteet ovat ratkaisevan tärkeitä tekstin luokittelussa sekä ominaisuuksien valmistelussa luonnollisen kielen toimintoihin. Aion keskustella kanssasi lähestymistavasta, jota guru99 noudatti valmistellessaan koodia, sekä keskustelun tuotosta. Toivottavasti tämä auttaa sinua.

Tunnisteiden laskeminen:

Tänne kirjoitamme ensin toimivan koodin ja sitten kirjoitamme erilaisia ​​vaiheita koodin selittämiseksi.

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)

lähtö:

Counter ({'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})

Koodin muokkaus

LASKE POS TAGSIA

  1. Tunnisteiden laskemiseen voit käyttää kokoelman moduulin Counter-pakettia. Laskuri on sanakirjan alaluokka, joka toimii avainarvotoiminnan periaatteella. Se on järjestämätön kokoelma, jossa elementit tallennetaan sanakirjan avaimeksi, kun taas lukumäärä on niiden arvo.
  2. Tuo nltk, joka sisältää moduuleja tekstin tokenointiin.
  3. Kirjoita teksti, jonka pos_tag haluat laskea.
  4. Jotkut sanat ovat isoilla kirjaimilla ja jotkut pienillä kirjaimilla, joten on tarkoituksenmukaista muuttaa kaikki sanat pienillä kirjaimilla ennen tokenisointia.
  5. Ohjaa sanat nltk:n word_tokenize kautta.
  6. Laske kunkin tunnuksen pos_tag
    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. Nyt tulee sanakirjalaskurin rooli. Olemme tuoneet koodiriville 1. Sanat ovat avain ja tagit ovat arvoja ja laskuri laskee jokaisen tekstissä olevan tagin kokonaismäärän.

Taajuuden jakelu

Taajuusjakaumaan viitataan kuinka monta kertaa kokeen tulos esiintyy. Sitä käytetään asiakirjassa esiintyvien kunkin sanan tiheyden etsimiseen. Se käyttää FreqDistclass ja sen määrittelee nltk.todennäköisyys moduuli.

Taajuusjakauma luodaan yleensä laskemalla kokeen toistuvan suorituksen näytteet. Lukumäärää kasvatetaan yhdellä joka kerta. Esim

freq_dist = FreqDist()

asiakirjassa olevalle tunnukselle:

freq_dist.inc(token.type())

Minkä tahansa sanan kohdalla voimme tarkistaa, kuinka monta kertaa se esiintyi tietyssä asiakirjassa. Esim

  1. Laskutapa: freq_dist.count('and') Tämä lauseke palauttaa arvon, kuinka monta kertaa "ja" esiintyi. Sitä kutsutaan laskentamenetelmäksi.
  2. Taajuusmenetelmä: freq_dist.freq('and')Tämä lauseke palauttaa tietyn näytteen taajuuden.

Kirjoitamme pienen ohjelman ja selitämme sen toimivuuden yksityiskohtaisesti. Kirjoitamme tekstiä ja laskemme jokaisen tekstin sanan frekvenssijakauman.

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

Taajuuden jakelu

Koodin selitys:

  1. Tuo nltk-moduuli.
  2. Kirjoita teksti, jonka sanajakauman haluat löytää.
  3. Tokenisoi jokainen sana tekstissä, joka toimii syötteenä nltk:n FreqDist-moduuliin.
  4. Käytä jokaista sanaa nlk.FreqDist luettelon muodossa
  5. Piirrä sanat kaaviossa käyttämällä plot()

Ole hyvä ja visualisoi kaavio ymmärtääksesi paremmin kirjoitetun tekstin

Kaavion jokaisen sanan tiheysjakauma

Kunkin kaavion sanan tiheysjakauma

HUOMAUTUS: Matplotlib on oltava asennettuna nähdäksesi yllä olevan kaavion

Tarkkaile yllä olevaa kaaviota. Se vastaa jokaisen tekstin sanan esiintymisen laskemista. Se auttaa tekstin tutkimisessa ja edelleen tekstipohjaisen tunneanalyysin toteuttamisessa. Pähkinänkuoressa voidaan päätellä, että nltk:ssä on moduuli tekstin jokaisen sanan esiintymisen laskemiseen, mikä auttaa laatimaan luonnollisen kielen ominaisuuksien tilastoja. Sillä on tärkeä rooli avainsanojen löytämisessä tekstistä. Voit myös poimia tekstin pdf-tiedostosta käyttämällä kirjastoja, kuten ote, PyPDF2 ja syöttää tekstin nlk.FreqDist-tiedostoon.

Avainsana on "tokenize". Tokenoinnin jälkeen se tarkistaa jokaisen sanan tietyssä kappaleessa tai tekstiasiakirjassa määrittääkseen, kuinka monta kertaa se esiintyi. Et tarvitse NLTK-työkalupakkia tähän. Voit tehdä sen myös omilla python-ohjelmointitaidoillasi. NLTK-työkalupakki tarjoaa vain käyttövalmiin koodin eri toimintoja varten.

Jokaisen sanan laskemisesta ei ehkä ole paljon hyötyä. Sen sijaan kannattaa keskittyä kollokaatioon ja bigrammeihin, jotka käsittelevät paljon sanoja parissa. Nämä parit tunnistavat hyödyllisiä avainsanoja parempiin luonnollisen kielen ominaisuuksiin, jotka voidaan syöttää koneeseen. Katso alta niiden tiedot.

Kolokaatiot: Biggramit ja trigrammit

Mikä on Collocations?

Kollokaatiot ovat sanapareja, jotka esiintyvät yhdessä monta kertaa asiakirjassa. Se lasketaan niiden parien lukumäärästä, jotka esiintyvät yhdessä asiakirjan sanamäärän perusteella.

Harkitse sähkömagneettista spektriä sanoilla, kuten ultraviolettisäteet, infrapunasäteet.

Sanoja ultravioletti ja säteet eivät käytetä erikseen, joten niitä voidaan käsitellä yhteissijoitteluna. Toinen esimerkki on CT-skannaus. Emme sano CT:tä ja skannausta erikseen, ja siksi niitä käsitellään myös kollokaatioina.

Voidaan sanoa, että kollokaatioiden löytäminen edellyttää sanojen esiintymistiheyden ja esiintymistiheyden laskemista muiden sanojen kontekstissa. Nämä tietyt sanakokoelmat vaativat suodatuksen hyödyllisten sisältötermien säilyttämiseksi. Jokainen gramma sanoja voidaan sitten pisteyttää jonkin assosiaatiomitan mukaan, jotta voidaan määrittää suhteellinen todennäköisyys, että jokainen Ingram on kollokaatio.

Kollokaatio voidaan luokitella kahteen tyyppiin:

  • Bigmat ckahden sanan yhdistelmä
  • trigrammitkolmen sanan yhdistelmä

Bigarit ja trigrammit tarjoavat merkityksellisempiä ja hyödyllisempiä ominaisuuksia ominaisuuspoimintavaiheeseen. Nämä ovat erityisen hyödyllisiä tekstipohjaisessa tunneanalyysissä.

Biggramsin esimerkkikoodi

import nltk

text = "Guru99 is a totally new kind of learning experience."
Tokens = nltk.word_tokenize(text)
output = list(nltk.bigrams(Tokens))
print(output)

lähtö:

[('Guru99', 'is'), ('is', 'totally'), ('totally', 'new'), ('new', 'kind'), ('kind', 'of'), ('of', 'learning'), ('learning', 'experience'), ('experience', '.')]

Trigrammien esimerkkikoodi

Joskus on tärkeää nähdä kolmen sanan pari lauseessa tilastollista analyysiä ja esiintymistiheysten laskemista varten. Tällä on jälleen ratkaiseva rooli muodostumisessa NLP (luonnolliset kielenkäsittelyominaisuudet) sekä tekstipohjainen tunteellinen ennustus.

Sama koodi suoritetaan trigrammien laskemiseen.

import nltk
text = “Guru99 is a totally new kind of learning experience.”
Tokens = nltk.word_tokenize(text)
output = list(nltk.trigrams(Tokens))
print(output)

lähtö:

[('Guru99', 'is', 'totally'), ('is', 'totally', 'new'), ('totally', 'new', 'kind'), ('new', 'kind', 'of'), ('kind', 'of', 'learning'), ('of', 'learning', 'experience'), ('learning', 'experience', '.')]   

Tunnisteiden merkitseminen

Lauseen merkitseminen laajemmassa merkityksessä viittaa verbin, substantiivin jne. nimikkeiden lisäämiseen lauseen kontekstin perusteella. POS-tunnisteiden tunnistaminen on monimutkainen prosessi. Näin ollen POS:n yleinen koodaus ei ole mahdollista manuaalisesti, koska joillakin sanoilla voi olla erilaisia ​​(epäselviä) merkityksiä lauseen rakenteen mukaan. Tekstin muuntaminen luettelon muotoon on tärkeä vaihe ennen koodaamista, koska jokainen luettelon sana silmukataan ja lasketaan tietylle tunnisteelle. Katso alla oleva koodi ymmärtääksesi sen paremmin

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

lähtö:

[('Hei', 'NNP'), ('Guru99', 'NNP'), (',', ','), ('Sinä', 'PRP'), ('on', 'VBP') , ('build', 'VBN'), ('a', 'DT'), ('erittäin', 'RB'), ('hyvä', 'JJ'), ('sivusto', 'NN') , ('ja', 'CC'), ('I', 'PRP'), ('love', 'VBP'), ('vierailu', 'VBG'), ('sinun', 'PRP$' ), ('sivusto', 'NN'), ('.', '.')]

Tunnisteiden merkitseminen

Koodin selitys:

  1. Koodi nltk:n tuontia varten (Luonnollisen kielen työkalupakki, joka sisältää alimoduuleita, kuten lauseen tokenize ja word tokenize.)
  2. Teksti, jonka tunnisteet tulostetaan.
  3. Lauseen tokenointi
  4. For-silmukka on toteutettu, jossa sanat erotetaan lauseesta ja jokaisen sanan tagi tulostetaan tulosteena.

Corpuksessa on kahden tyyppisiä POS-tunnisteita:

  • Sääntöön perustuva
  • Stokastiset POS-tunnistimet

1. Sääntöihin perustuva myyntipistetunnistin: Sanojen, joilla on moniselitteinen merkitys, sovelletaan kontekstitietoon perustuvaa sääntöpohjaista lähestymistapaa. Se tehdään tarkistamalla tai analysoimalla edellisen tai seuraavan sanan merkitys. Tietoa analysoidaan sanan ympäristöstä tai sen sisältä. Siksi sanat merkitään tietyn kielen kielioppisäännöillä, kuten isoilla kirjaimilla ja välimerkeillä. esim. Brillin tagger.

2.Stokastinen POS-tunnistin: Tässä menetelmässä käytetään erilaisia ​​lähestymistapoja, kuten frekvenssi tai todennäköisyys. Jos sana on enimmäkseen merkitty tietyllä tunnisteella harjoitusjoukossa, testilauseessa sille annetaan kyseinen tunniste. Sanatunniste ei ole riippuvainen vain omasta tunnisteestaan, vaan myös edellisestä tunnisteesta. Tämä menetelmä ei ole aina tarkka. Toinen tapa on laskea tietyn tunnisteen esiintymistodennäköisyys lauseessa. Siten lopullinen tunniste lasketaan tarkistamalla tietyn tunnisteen sisältävän sanan suurin todennäköisyys.

POS-koodaus piilotetulla Markov-mallilla

Merkintäongelmat voidaan mallintaa myös HMM:n avulla. Se käsittelee syöttötokeneja havaittavissa olevana sekvenssinä, kun taas tunnisteita pidetään piilotettuina tiloina ja tavoitteena on määrittää piilotettu tilasekvenssi. Esimerkiksi x = x1,x2,…………,xn missä x on merkkijono while y = y1,y2,y3,y4………ynon piilotettu sekvenssi.

Kuinka piilotettu Markovin malli (HMM) toimii?

HMM käyttää liitosjakaumaa, joka on P(x, y), jossa x on syötesekvenssi/merkkisekvenssi ja y on tagisekvenssi.

Tagisekvenssi x:lle on argmaxy1….ynp(x1,x2,….xn,y1,y2,y3,…..). Olemme luokitelleet tunnisteet tekstistä, mutta tällaisten tunnisteiden tilastot ovat tärkeitä. Joten seuraava osa on näiden tunnisteiden laskeminen tilastollista tutkimusta varten.

Yhteenveto

  • POS-merkintä sisään NLTK on prosessi, jolla merkitään sanat tekstimuodossa tiettyä puheen osaa varten sen määritelmän ja kontekstin perusteella.
  • Jotkut NLTK POS -merkintäesimerkit ovat: CC, CD, EX, JJ, MD, NNP, PDT, PRP$, TO jne.
  • POS-taggeria käytetään määrittämään kielioppitiedot lauseen jokaiselle sanalle. Kaikkien Osa of Speech -koodauspakettien asennus, tuonti ja lataaminen NLTK:lla on valmis.
  • NLP:n paloittelu on prosessi, jossa otetaan pieniä tietopaloja ja ryhmitellään ne suuriksi yksiköiksi.
  • Ennalta määriteltyjä sääntöjä ei ole, mutta voit yhdistää niitä tarpeen ja tarpeen mukaan.
  • Pakkauksia käytetään kokonaisuuden havaitsemiseen. Entiteetti on se osa lausetta, jonka avulla kone saa arvon mille tahansa tarkoitukselle.
  • Chunkingia käytetään luokittelemaan eri merkit samaan palaan.