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

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
- 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.
- Tuo nltk, joka sisältää moduuleja tekstin tokenointiin.
- Kirjoita teksti, jonka pos_tag haluat laskea.
- Jotkut sanat ovat isoilla kirjaimilla ja jotkut pienillä kirjaimilla, joten on tarkoituksenmukaista muuttaa kaikki sanat pienillä kirjaimilla ennen tokenisointia.
- Ohjaa sanat nltk:n word_tokenize kautta.
- 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')]
- 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
- Laskutapa: freq_dist.count('and') Tämä lauseke palauttaa arvon, kuinka monta kertaa "ja" esiintyi. Sitä kutsutaan laskentamenetelmäksi.
- 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()
Koodin selitys:
- Tuo nltk-moduuli.
- Kirjoita teksti, jonka sanajakauman haluat löytää.
- Tokenisoi jokainen sana tekstissä, joka toimii syötteenä nltk:n FreqDist-moduuliin.
- Käytä jokaista sanaa nlk.FreqDist luettelon muodossa
- Piirrä sanat kaaviossa käyttämällä plot()
Ole hyvä ja visualisoi kaavio ymmärtääksesi paremmin kirjoitetun tekstin

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'), ('.', '.')]
Koodin selitys:
- Koodi nltk:n tuontia varten (Luonnollisen kielen työkalupakki, joka sisältää alimoduuleita, kuten lauseen tokenize ja word tokenize.)
- Teksti, jonka tunnisteet tulostetaan.
- Lauseen tokenointi
- 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.