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
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
- 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.
- Importige nltk, mis sisaldab mooduleid teksti märgistamiseks.
- Kirjutage tekst, mille pos_tag'i soovite lugeda.
- 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.
- Edastage sõnad läbi word_tokenize saidilt nltk.
- 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')]
- 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
- Arvestusmeetod: freq_dist.count('and')See avaldis tagastab 'ja' esinemiskordade arvu. Seda nimetatakse loendusmeetodiks.
- 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()
Koodi selgitus:
- Impordi nltk moodul.
- Kirjutage tekst, mille sõnade levikut peate leidma.
- Märgistage iga sõna tekstis, mida kasutatakse nltk mooduli FreqDist sisendiks.
- Rakendage iga sõna nlk.FreqDist loendi kujul
- Joonistage sõnad graafikule kasutades plot()
Kirjutatud teksti paremaks mõistmiseks kujutage graafikut ette
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'), ('.', '.')]
Koodi selgitus:
- Kood nltk importimiseks (loomuliku keele tööriistakomplekt, mis sisaldab alammooduleid, nagu lause märgistamine ja sõna märgistamine.)
- Tekst, mille sildid tuleb printida.
- Lause märgistamine
- 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.