POS-i märgistamine NLTK-ga ja tükeldamine NLP-s [NÄITED]

POS märgistamine

POS märgistamine (Parts of Speech Tagging) on ​​protsess, mille abil märgitakse sõnad tekstivormingus konkreetse kõneosa jaoks selle määratluse ja konteksti alusel. See vastutab keeles teksti lugemise ja igale sõnale konkreetse märgi (kõneosade) määramise eest. Seda nimetatakse ka grammatiliseks märgistamiseks.

Õpime NLTK kõneosa näitega:

sisend: Kõik, mis meile lubab.

Väljund: [('Kõik', NN),('kuni', TO), ('luba', VB), ('meie', PRP)]

POS-i märgistamise näites osalevad sammud

  • Teksti märgistamine (word_tokenize)
  • rakenda pos_tag ülaltoodud sammule, mis on nltk.pos_tag(tokenize_text)

NLTK POS-i siltide näited on järgmised:

lühend Tähendus
CC koordineeriv side
CD kardinaalnumber
DT määraja
EX seal eksistentsiaalne
FW võõrsõna
IN eessõna/allutav sidesõna
JJ See NLTK POS-i silt on omadussõna (suur)
JJR omadussõna, võrdlev (suurem)
JJS omadussõna, ülivõrde (suurim)
LS nimekirja turg
MD modaalne (võiks, tahe)
NN nimisõna, ainsus (kass, puu)
NNS nimisõna mitmus (lauad)
NNP pärisnimi, ainsus (sarah)
NNPS pärisnimi, mitmus (indiaanlased või ameeriklased)
PDT ettemääraja (kõik, mõlemad, pooled)
POS omastav lõpp (vanema oma)
PRP isiklik asesõna (tema, tema, tema, tema)
PRP $ omastav asesõna (tema, tema, minu, minu, meie )
RB määrsõna (aeg-ajalt, kiiresti)
RBR määrsõna, võrdlev (suurem)
RBS määrsõna, ülivõrde (suurim)
RP osake (umbes)
TO lõpmatu marker (kuni)
UH vahelehüüe (hüvasti)
VB tegusõna (küsi)
GBV verb gerund (otsustama)
VBD tegusõna minevikuvorm (paluv)
VBN tegusõna minevik (taasühendatud)
VBP tegusõna, olevikuvorm, mitte ainsuse 3. isik (ümbris)
VBZ verb, olevikuvorm ainsuse 3. isikuga (alused)
wdt wh-määraja (see, mis)
WP wh- asesõna (kes)
WRB mis- määrsõna (kuidas)

Ülaltoodud NLTK POS-i siltide loend sisaldab kõiki NLTK POS-i silte. NLTK POS sildist kasutatakse lause iga sõna grammatilise teabe määramiseks. Kõigi POS NLTK pakettide installimine, importimine ja allalaadimine on lõpetatud.

Mis on NLP-s tükeldamine?

Raiumine NLP-s on protsess, mille käigus võetakse väikesed teabekillud ja rühmitatakse need suurteks üksusteks. Chunkingi peamine kasutusala on "nimisõnafraaside" rühmade moodustamine. Seda kasutatakse lausele struktuuri lisamiseks, järgides POS-i märgistamist koos regulaaravaldistega. Saadud sõnarühma nimetatakse "tükkideks". Seda nimetatakse ka madalaks sõelumiseks.

Madala parsimise korral on juurte ja lehtede vahel maksimaalselt üks tase, samas kui sügav sõelumine hõlmab rohkem kui ühte taset. Madalast sõelumist nimetatakse ka kergeks parsimiseks või tükkideks.

Tükeldamise reeglid

Eelnevalt määratletud reegleid ei ole, kuid saate neid vastavalt vajadusele ja nõudele kombineerida.

Näiteks peate lausest märkima nimisõna, tegusõna (minevik), omadussõna ja koordineeriva ristmiku. Võite kasutada allolevat reeglit

tükk:{ * * * ?}

Järgmine tabel näitab, mida erinevad sümbolid tähendavad:

Sümboli nimi Kirjeldus
. Kõik märgid, välja arvatud uus rida
* Sobitage 0 või enam kordust
? Tehke 0 või 1 kordust

Nüüd kirjutame koodi, et reeglit paremini mõista

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)

Väljund:

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

Järeldus ülaltoodud kõne sildistamise osast Python näide: "make" on tegusõna, mis ei sisaldu reeglis, seega ei märgita seda kui mychunk

Tükeldamise kasutusjuht

Tükeldamist kasutatakse olemi tuvastamiseks. Üksus on see osa lausest, mille abil masin saab mis tahes kavatsuse väärtuse.

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

Teisisõnu kasutatakse tükeldamist märkide alamhulkade valimiseks. Järgige allolevat koodi, et mõista, kuidas žetoonide valimiseks tükeldamist kasutatakse. Selles näites näete graafikut, mis vastab nimisõna fraasi tükile. Parema mõistmise huvides kirjutame koodi ja joonistame graafiku.

Kood kasutusjuhtumi demonstreerimiseks

 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 

Väljund:

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

Graafik

Nimisõnafraasi tükeldamise graafik
Nimisõna Fraas chunking Graph

Graafiku põhjal võime järeldada, et "õppida" ja "guru99" on kaks erinevat märki, kuid need liigitatakse nimisõnafraasiks, samas kui märk "from" ei kuulu nimisõnafraasi.

Tükeldamist kasutatakse erinevate märkide kategoriseerimiseks samasse tükki. Tulemus sõltub valitud grammatikast. Edasist Chunking NLTK-d kasutatakse mustrite märgistamiseks ja tekstikorpuste uurimiseks.

POSIMILTE LOENDAMINE

Oleme arutanud erinevaid pos_tag eelmises jaotises. Selles konkreetses õpetuses uurite, kuidas neid silte lugeda. Loendussildid on üliolulised teksti klassifitseerimisel ja funktsioonide ettevalmistamisel loomuliku keelepõhiste toimingute jaoks. Arutan teiega lähenemisviisi, mida guru99 järgis koodi ettevalmistamisel, koos väljundi aruteluga. Loodetavasti aitab see teid.

Kuidas silte lugeda:

Siin kirjutame kõigepealt töötava koodi ja seejärel kirjutame koodi selgitamiseks erinevad sammud.

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)

Väljund:

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

Koodi väljatöötamine

POSIMILTE LOENDAMINE

  1. Siltide loendamiseks saad kasutada kollektsiooni mooduli paketti Counter. Loendur on sõnastiku alamklass, mis töötab võtme-väärtuse toimimise põhimõttel. See on järjestamata kogu, kus elemendid salvestatakse sõnastiku võtmena, samal ajal kui nende väärtus on arv.
  2. Importige nltk, mis sisaldab mooduleid teksti märgistamiseks.
  3. Kirjutage tekst, mille pos_tag'i soovite lugeda.
  4. Mõned sõnad on suure ja mõned väikese algustähega, seega on enne märgistamise rakendamist asjakohane kõik sõnad väikese tähega teisendada.
  5. Edastage sõnad läbi word_tokenize saidilt nltk.
  6. Arvutage iga märgi 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. Nüüd tuleb sõnaraamatuloenduri roll. Oleme importinud koodireale 1. Võtmeks on sõnad ja väärtuseks sildid ning loendur loeb iga tekstis oleva sildi koguarvu.

Sageduse jaotumine

Sagedusjaotust nimetatakse katse tulemuse ilmnemise kordade arvuks. Seda kasutatakse iga dokumendis esineva sõna sageduse leidmiseks. See kasutab FreqDistclass ja määratletud nltk.tõenäosus moodul.

Sagedusjaotus luuakse tavaliselt katse korduva käitamise proovide loendamisega. Loendite arvu suurendatakse iga kord ühe võrra. Nt

freq_dist = FreqDist()

dokumendis oleva märgi jaoks:

freq_dist.inc(token.type())

Iga sõna puhul saame kontrollida, mitu korda see konkreetses dokumendis esines. Nt

  1. Arvestusmeetod: freq_dist.count('and')See avaldis tagastab 'ja' esinemiskordade arvu. Seda nimetatakse loendusmeetodiks.
  2. Sagedusmeetod: freq_dist.freq('ja')See avaldis tagastab antud valimi sageduse.

Kirjutame väikese programmi ja selgitame üksikasjalikult selle toimimist. Kirjutame teksti ja arvutame iga sõna sagedusjaotuse tekstis.

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

Sageduse jaotumine

Koodi selgitus:

  1. Impordi nltk moodul.
  2. Kirjutage tekst, mille sõnade levikut peate leidma.
  3. Märgistage iga sõna tekstis, mida kasutatakse nltk mooduli FreqDist sisendiks.
  4. Rakendage iga sõna nlk.FreqDist loendi kujul
  5. Joonistage sõnad graafikule kasutades plot()

Kirjutatud teksti paremaks mõistmiseks kujutage graafikut ette

Graafiku iga sõna sagedusjaotus

Graafiku iga sõna sagedusjaotus

MÄRKUS. Ülaltoodud graafiku nägemiseks peab teil olema installitud matplotlib

Jälgige ülaltoodud graafikut. See vastab iga sõna esinemise loendamisele tekstis. See aitab teksti uurimisel ja edasisel tekstipõhise sentimentaalse analüüsi rakendamisel. Lühidalt võib järeldada, et nltk-l on tekstis iga sõna esinemise loendamise moodul, mis aitab koostada loomuliku keele tunnuste statistikat. See mängib olulist rolli tekstist märksõnade leidmisel. Samuti saate pdf-failist teksti ekstraheerida, kasutades selliseid teeke nagu ekstrakt, PyPDF2 ja edastada teksti nlk.FreqDist.

Võtmetermin on "märkimine". Pärast märgistamist kontrollib see antud lõigus või tekstidokumendis iga sõna, et teha kindlaks, mitu korda see esines. Te ei vaja selleks NLTK tööriistakomplekti. Saate seda teha ka oma Pythoni programmeerimisoskustega. NLTK tööriistakomplekt pakub erinevate toimingute jaoks ainult kasutusvalmis koodi.

Iga sõna loendamine ei pruugi olla eriti kasulik. Selle asemel tuleks keskenduda kollokatsioonile ja biggrammidele, mis käsitlevad paljusid sõnu paaris. Need paarid tuvastavad kasulikud märksõnad paremate loomuliku keele funktsioonide jaoks, mida saab masinale edastada. Vaadake nende üksikasju allpool.

Kollokatsioonid: Bigamid ja trigrammid

Mis on kollokatsioonid?

Kollokatsioonid on sõnapaarid, mis esinevad dokumendis mitu korda koos. See arvutatakse nende paaride arvu järgi, mis esinevad koos dokumendi üldise sõnade arvuga.

Mõelge elektromagnetilisele spektrile sõnadega nagu ultraviolettkiired, infrapunakiired.

Sõnu ultraviolett ja kiired ei kasutata eraldi ja seetõttu võib neid käsitleda kollokatsioonina. Teine näide on CT-skaneerimine. Me ei ütle CT-d ja skaneerimist eraldi ja seetõttu käsitletakse neid ka kollokatsioonina.

Võib öelda, et kollokatsioonide leidmine eeldab sõnade sageduste ja nende esinemise arvutamist teiste sõnade kontekstis. Need konkreetsed sõnakogud nõuavad kasulike sisuterminite säilitamiseks filtreerimist. Seejärel võib iga grammi sõnu hinnata mõne assotsiatsioonimõõdu järgi, et määrata iga Ingrammi suhteline tõenäosus, et need on kollokatsioonid.

Kollokatsiooni võib jagada kahte tüüpi:

  • Bigamid ckahe sõna kombinatsioon
  • Trigrammidkolme sõna kombinatsioon

Bigamid ja trigrammid pakuvad funktsioonide ekstraheerimisetapi jaoks sisukamaid ja kasulikke funktsioone. Need on eriti kasulikud tekstipõhises sentimentaalses analüüsis.

Biggramsi näidiskood

import nltk

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

Väljund:

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

Trigrammi näidiskood

Mõnikord on statistilise analüüsi ja sageduste loendamise jaoks oluline näha lauses kolme sõna paari. See mängib taas moodustamisel otsustavat rolli NLP (loomuliku keele töötlemise funktsioonid) kui ka tekstipõhine sentimentaalne ennustamine.

Trigrammide arvutamiseks käivitatakse sama kood.

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

Väljund:

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

Lausete märgistamine

Märgistamine Lause laiemas tähenduses viitab tegusõna, nimisõna jne siltide lisamisele lause konteksti järgi. POS-siltide tuvastamine on keeruline protsess. Seega ei ole POS-i üldine sildistamine käsitsi võimalik, kuna mõnel sõnal võib vastavalt lause struktuurile olla erinev (mitmetähenduslik) tähendus. Teksti teisendamine loendi kujul on oluline samm enne sildi lisamist, kuna loendis olevad kõik sõnad on silmused ja loendatakse konkreetse sildi jaoks. Selle paremaks mõistmiseks vaadake allolevat koodi

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

Väljund:

[('Tere', 'NNP'), ('Guru99', 'NNP'), (',', ','), ('Sina', 'PRP'), ('on', 'VBP') , ('ehitamine', 'VBN'), ('a', 'DT'), ('väga', 'RB'), ('hea', 'JJ'), ('sait', 'NN') , ('ja', 'CC'), ('I', 'PRP'), ('love', 'VBP'), ('visiting', 'VBG'), ('teie', 'PRP$' ), ('sait', 'NN'), ('.', '.')]

Lausete märgistamine

Koodi selgitus:

  1. Kood nltk importimiseks (loomuliku keele tööriistakomplekt, mis sisaldab alammooduleid, nagu lause märgistamine ja sõna märgistamine.)
  2. Tekst, mille sildid tuleb printida.
  3. Lause märgistamine
  4. For loop on rakendatud, kus sõnad märgistatakse lausest ja iga sõna silt trükitakse väljundina.

Korpuses on kahte tüüpi müügikohtade siltereid:

  • Reeglipõhine
  • Stohhastilised POS-märgistajad

1. Reeglipõhine müügikohtade sildistaja: Mitmetähendusliku tähendusega sõnade puhul rakendatakse reeglipõhist lähenemist kontekstuaalse info alusel. Selleks kontrollitakse või analüüsitakse eelneva või järgneva sõna tähendust. Infot analüüsitakse sõna ümbritsevast või enda seest. Seetõttu märgistatakse sõnad konkreetse keele grammatiliste reeglite, näiteks suurtähtede ja kirjavahemärkide järgi. nt Brilli sildistaja.

2. Stohhastiline müügikohtade sildistaja: Selle meetodi puhul kasutatakse erinevaid lähenemisviise, nagu sagedus või tõenäosus. Kui sõnale on koolituskomplektis enamasti märgitud teatud silt, siis testlauses antakse sellele see konkreetne silt. Sõnamärgend ei sõltu ainult oma sildist, vaid ka eelmisest sildist. See meetod ei ole alati täpne. Teine võimalus on arvutada konkreetse sildi esinemise tõenäosus lauses. Seega arvutatakse lõplik silt, kontrollides konkreetse sildiga sõna suurimat tõenäosust.

POS-i märgistamine varjatud Markovi mudeliga

Märgistamisprobleeme saab modelleerida ka HMM-i abil. See käsitleb sisendmärke vaadeldava jadana, silte aga peidetud olekutena ja eesmärk on määrata peidetud olekujada. Näiteks x = x1,x2,…………,xn kus x on märkide jada while y = y1,y2,y3,y4………ynon varjatud järjestus.

Kuidas Markovi varjatud mudel (HMM) töötab?

HMM kasutab liitumisjaotust, mis on P(x, y), kus x on sisendjada/märgijada ja y on märgijada.

Märgendi jada x jaoks on argmaxy1….ynp(x1,x2,….xn,y1,y2,y3,…). Oleme teksti järgi kategoriseerinud sildid, kuid selliste siltide statistika on ülioluline. Nii et järgmine osa on nende siltide loendamine statistilise uuringu jaoks.

kokkuvõte

  • POS-i märgistamine NLTK on protsess sõnade märgistamiseks tekstivormingus konkreetse kõneosa jaoks selle määratluse ja konteksti alusel.
  • Mõned NLTK POS-i märgistamise näited on: CC, CD, EX, JJ, MD, NNP, PDT, PRP$, TO jne.
  • POS-sildistajat kasutatakse lause iga sõna grammatilise teabe määramiseks. Kõigi kõneosa märgistamise pakettide installimine, importimine ja allalaadimine NLTK-ga on lõpetatud.
  • NLP-s tükeldamine on protsess, mille käigus võetakse väikesed teabekillud ja rühmitatakse need suurteks üksusteks.
  • Eelnevalt määratletud reegleid ei ole, kuid saate neid vastavalt vajadusele ja nõudele kombineerida.
  • Tükeldamist kasutatakse olemi tuvastamiseks. Üksus on see osa lausest, mille abil masin saab mis tahes kavatsuse väärtuse.
  • Tükeldamist kasutatakse erinevate märkide kategoriseerimiseks samasse tükki.