POS-tagging med NLTK og Chunking i NLP [EKSEMPLER]
POS Tagging
POS Tagging (Parts of Speech Tagging) er en proces til at markere ordene i tekstformat for en bestemt del af en tale baseret på dens definition og kontekst. Det er ansvarligt for at læse tekst på et sprog og tildele et bestemt token (Parts of Speech) til hvert ord. Det kaldes også grammatisk tagging.
Lad os lære med et NLTK Part of Speech-eksempel:
Input: Alt for at tillade os.
Output: [('Alt', NN),('to', TO), ('permit', VB), ('os', PRP)]
Trin involveret i eksemplet med POS-mærkning
- Tokenize tekst (word_tokenize)
- anvend post_tag til ovenstående trin, der er nltk.pos_tag(tokenize_text)
Eksempler på NLTK POS-tags er som nedenfor:
Forkortelse | Betydning |
---|---|
CC | koordinerende konjunktion |
CD | kardinal ciffer |
DT | bestemmelse |
EX | eksistentiel der |
FW | fremmedord |
IN | præposition/underordnet ledsætning |
JJ | Dette NLTK POS-tag er et adjektiv (stort) |
JJR | adjektiv, komparativ (større) |
JJS | adjektiv, superlativ (størst) |
LS | listemarked |
MD | modal (kunne, vil) |
NN | navneord, ental (kat, træ) |
NNS | navneord flertal (skriveborde) |
NNP | egennavn, ental (sarah) |
NNPS | egennavn, flertal (indianere eller amerikanere) |
PDT | forudbestemmer (alle, begge, halvdelen) |
POS | besiddende endelse (forældres) |
PRP | personligt pronomen (hendes, hende selv, ham, sig selv) |
PRP$ | besiddende pronomen (hendes, hans, min, min, vores) |
RB | adverbium (lejlighedsvis, hurtigt) |
RBR forlængelse | adverbium, komparativ (større) |
RBS | adverbium, superlativ (størst) |
RP | partikel (ca.) |
TIL | uendelig markør (til) |
UH | interjektion (farvel) |
VB | verbum (spørg) |
GBV | verbum gerund (bedømme) |
VBD | udsagnsord datid (bønnede) |
VBN | verbum participium (genforenet) |
VBP | verbum, nutid ikke 3. person ental (ombryd) |
VBZ | verbum, nutid med 3. person ental (baser) |
wdt | wh-determiner (det, hvad) |
WP | wh- pronomen (hvem) |
WRB | wh- adverb (hvordan) |
Ovenstående NLTK POS-tag-liste indeholder alle NLTK POS-tags. NLTK POS-tagger bruges til at tildele grammatisk information for hvert ord i sætningen. Installation, import og download af alle POS NLTK-pakker er fuldført.
Hvad er Chunking i NLP?
chunking i NLP er en proces at tage små stykker information og gruppere dem i store enheder. Den primære brug af Chunking er at lave grupper af "navneordssætninger." Det bruges til at tilføje struktur til sætningen ved at følge POS-tagging kombineret med regulære udtryk. Den resulterende gruppe af ord kaldes "chunks". Det kaldes også overfladisk parsing.
Ved overfladisk parsing er der maksimalt ét niveau mellem rødder og blade, mens dyb parsing består af mere end ét niveau. Shallow parsing kaldes også let parsing eller chunking.
Regler for chunking
Der er ingen foruddefinerede regler, men du kan kombinere dem efter behov og krav.
For eksempel skal du mærke navneord, verbum (fortid), adjektiv og koordinerende kryds fra sætningen. Du kan bruge reglen som nedenfor
luns:{ * * * ?}
Følgende tabel viser, hvad de forskellige symboler betyder:
Navn på symbol | Tekniske beskrivelser |
---|---|
. | Ethvert tegn undtagen ny linje |
* | Match 0 eller flere gentagelser |
? | Match 0 eller 1 gentagelser |
Lad os nu skrive koden for at forstå reglerne bedre
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)
Output:
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))
Konklusionen fra ovenstående Part of Speech tagging Python eksempel: "make" er et verbum, som ikke er inkluderet i reglen, så det er ikke tagget som mychunk
Brug Case of Chunking
Chunking bruges til enhedsdetektion. En enhed er den del af sætningen, hvorved maskinen får værdien for enhver hensigt.
Example: Temperature of New York. Here Temperature is the intention and New York is an entity.
Med andre ord bruges chunking til at vælge undersæt af tokens. Følg venligst nedenstående kode for at forstå, hvordan chunking bruges til at vælge tokens. I dette eksempel vil du se grafen, som svarer til en del af en substantivsætning. Vi vil skrive koden og tegne grafen for bedre forståelse.
Kode til at demonstrere Use Case
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
Output:
['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
Graf
Fra grafen kan vi konkludere, at "lær" og "guru99" er to forskellige tokens, men er kategoriseret som navneord, mens token "fra" ikke hører til navneord.
Chunking bruges til at kategorisere forskellige tokens i samme chunk. Resultatet vil afhænge af den valgte grammatik. Yderligere Chunking NLTK bruges til at mærke mønstre og til at udforske tekstkorpus.
TÆLLE POS-TAGS
Vi har diskuteret forskellige pos_tag i forrige afsnit. I denne særlige tutorial vil du studere, hvordan du tæller disse tags. Tællemærker er afgørende for tekstklassificering samt forberedelse af funktionerne til de naturlige sprog-baserede operationer. Jeg vil diskutere med dig den tilgang, som guru99 fulgte, mens jeg udarbejdede kode sammen med en diskussion af output. Håber dette vil hjælpe dig.
Sådan tælles tags:
Her vil vi først skrive arbejdskode, og derefter vil vi skrive forskellige trin til at forklare koden.
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)
Output:
Tæller({'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})
Udarbejdelse af koden
- For at tælle mærkerne kan du bruge pakketælleren fra samlingens modul. En tæller er en ordbogsunderklasse, der fungerer efter princippet om nøgleværdi-drift. Det er en uordnet samling, hvor elementer gemmes som en ordbogsnøgle, mens antallet er deres værdi.
- Importer nltk som indeholder moduler til at tokenisere teksten.
- Skriv den tekst, hvis post_tag du vil tælle.
- Nogle ord er med store bogstaver og nogle med små bogstaver, så det er passende at transformere alle ord med små bogstaver, før du anvender tokenisering.
- Send ordene gennem word_tokenize fra nltk.
- Beregn post_tag for hvert token
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')]
- Nu kommer rollen som ordbogstæller. Vi har importeret i kodelinje 1. Ord er nøglen, og tags er værdien, og tælleren tæller hvert tags samlede antal i teksten.
Frekvensfordeling
Frekvensfordeling omtales som antallet af gange et udfald af et eksperiment opstår. Det bruges til at finde hyppigheden af hvert ord, der forekommer i et dokument. Det bruger FreqDistklasse og defineret af den nltk.sandsynlighed modul.
En frekvensfordeling skabes normalt ved at tælle prøverne af gentagne gange at køre eksperimentet. Antallet af optællinger øges med én hver gang. F.eks
freq_dist = FreqDist()
for tokenet i dokumentet:
freq_dist.inc(token.type())
For ethvert ord kan vi kontrollere, hvor mange gange det forekom i et bestemt dokument. F.eks
- Optællingsmetode: freq_dist.count('and') Dette udtryk returnerer værdien af det antal gange, 'og' forekom. Det kaldes tællemetoden.
- Frekvensmetode: freq_dist.freq('and') Dette udtryk returnerer frekvensen af en given prøve.
Vi vil skrive et lille program og forklare dets funktion i detaljer. Vi vil skrive noget tekst og vil beregne frekvensfordelingen af hvert ord i teksten.
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()
Forklaring af kode:
- Importer nltk-modul.
- Skriv den tekst, hvis ordfordeling du skal finde.
- Tokeniser hvert ord i teksten, der serveres som input til FreqDist-modulet i nltk.
- Anvend hvert ord på nlk.FreqDist i form af en liste
- Tegn ordene i grafen ved hjælp af plot()
Visualiser venligst grafen for en bedre forståelse af den skrevne tekst
BEMÆRK: Du skal have installeret matplotlib for at se ovenstående graf
Se grafen ovenfor. Det svarer til at tælle forekomsten af hvert ord i teksten. Det hjælper i studiet af tekst og videre med at implementere tekstbaseret sentimental analyse. I en nøddeskal kan det konkluderes, at nltk har et modul til at tælle forekomsten af hvert ord i teksten, hvilket hjælper med at forberede statistikken over naturlige sprogtræk. Det spiller en væsentlig rolle i at finde nøgleordene i teksten. Du kan også udtrække teksten fra pdf'en ved hjælp af biblioteker som extract, PyPDF2 og feed teksten til nlk.FreqDist.
Nøgleordet er "tokenize". Efter tokenisering tjekker den for hvert ord i et givet afsnit eller tekstdokument for at bestemme, hvor mange gange det forekom. Du behøver ikke NLTK-værktøjssættet til dette. Du kan også gøre det med dine egne python-programmeringsfærdigheder. NLTK-værktøjssættet giver kun en klar-til-brug-kode til de forskellige operationer.
Det er måske ikke meget nyttigt at tælle hvert ord. I stedet bør man fokusere på kollokation og bigrammer, som omhandler mange ord i et par. Disse par identificerer nyttige nøgleord til bedre naturlige sprogfunktioner, som kan tilføres maskinen. Se venligst nedenfor for deres detaljer.
Kollokationer: Bigrammer og Trigrammer
Hvad er Collocations?
Kollokationer er de ordpar, der forekommer sammen mange gange i et dokument. Det beregnes ved antallet af disse par, der forekommer sammen til dokumentets samlede ordantal.
Overvej elektromagnetisk spektrum med ord som ultraviolette stråler, infrarøde stråler.
Ordene ultraviolet og stråler bruges ikke individuelt og kan derfor behandles som samlokalisering. Et andet eksempel er CT-scanningen. Vi siger ikke CT og Scan hver for sig, og derfor behandles de også som kollokation.
Vi kan sige, at det at finde kollokationer kræver beregning af ords frekvenser og deres udseende i sammenhæng med andre ord. Disse specifikke samlinger af ord kræver filtrering for at bevare nyttige indholdstermer. Hvert gram ord kan derefter bedømmes i henhold til et tilknytningsmål for at bestemme den relative sandsynlighed for, at hvert Ingram er en samlokalisering.
Samlokalisering kan kategoriseres i to typer-
- Bigrammer ckombination af to ord
- trigrammerkombination af tre ord
Bigrammer og trigrammer giver mere meningsfulde og nyttige funktioner til udtrækningsfasen. Disse er især nyttige i tekstbaseret sentimental analyse.
Bigrams eksempelkode
import nltk text = "Guru99 is a totally new kind of learning experience." Tokens = nltk.word_tokenize(text) output = list(nltk.bigrams(Tokens)) print(output)
Output:
[('Guru99', 'is'), ('is', 'totally'), ('totally', 'new'), ('new', 'kind'), ('kind', 'of'), ('of', 'learning'), ('learning', 'experience'), ('experience', '.')]
Trigrams eksempelkode
Nogle gange bliver det vigtigt at se et par af tre ord i sætningen til statistisk analyse og frekvenstælling. Dette spiller igen en afgørende rolle i dannelsen NLP (naturlige sprogbehandlingsfunktioner) samt tekstbaseret sentimental forudsigelse.
Den samme kode køres til beregning af trigrammerne.
import nltk text = “Guru99 is a totally new kind of learning experience.” Tokens = nltk.word_tokenize(text) output = list(nltk.trigrams(Tokens)) print(output)
Output:
[('Guru99', 'is', 'totally'), ('is', 'totally', 'new'), ('totally', 'new', 'kind'), ('new', 'kind', 'of'), ('kind', 'of', 'learning'), ('of', 'learning', 'experience'), ('learning', 'experience', '.')]
Tagging af sætninger
Tagging Sætning i bredere forstand refererer til tilføjelsen af etiketter af verbet, substantivet osv., efter sætningens kontekst. Identifikation af POS-tags er en kompliceret proces. Generisk tagging af POS er således ikke muligt manuelt, da nogle ord kan have forskellige (tvetydige) betydninger i henhold til sætningens struktur. Konvertering af tekst i form af liste er et vigtigt trin før tagging, da hvert ord på listen er sløjfede og tælles for et bestemt tag. Se venligst nedenstående kode for at forstå det bedre
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)))
Output:
[('Hej', 'NNP'), ('Guru99', 'NNP'), (',', ','), ('Du', 'PRP'), ('har', 'VBP') , ('build', 'VBN'), ('a', 'DT'), ('meget', 'RB'), ('god', 'JJ'), ('site', 'NN') , ('og', 'CC'), ('jeg', 'PRP'), ('love', 'VBP'), ('besøger', 'VBG'), ('din', 'PRP$' ), ('site', 'NN'), ('.', '.')]
Kodeforklaring:
- Kode til at importere nltk (Natural language toolkit, som indeholder undermoduler såsom sætning tokenize og word tokenize.)
- Tekst, hvis tags skal udskrives.
- Sætningstokenisering
- For loop er implementeret, hvor ord er tokeniseret fra sætning og tag af hvert ord udskrives som output.
I Corpus er der to typer POS-taggere:
- Regelbaseret
- Stokastiske POS-taggere
1. Regelbaseret POS-tagger: For ord med tvetydig betydning anvendes regelbaseret tilgang på baggrund af kontekstuel information. Det gøres ved at kontrollere eller analysere betydningen af det foregående eller det følgende ord. Information analyseres fra ordets omgivelser eller i sig selv. Derfor er ord mærket af de grammatiske regler for et bestemt sprog, såsom store bogstaver og tegnsætning. f.eks. Brills tagger.
2. Stokastisk POS-tagger: Forskellige tilgange såsom frekvens eller sandsynlighed anvendes under denne metode. Hvis et ord for det meste er tagget med et bestemt tag i træningssættet, får det i testsætningen det pågældende tag. Ordet tag afhænger ikke kun af sit eget tag, men også af det forrige tag. Denne metode er ikke altid nøjagtig. En anden måde er at beregne sandsynligheden for forekomst af et specifikt tag i en sætning. Den endelige tag beregnes således ved at kontrollere den højeste sandsynlighed for et ord med et bestemt tag.
POS tagging med Hidden Markov Model
Mærkningsproblemer kan også modelleres ved hjælp af HMM. Det behandler input-tokens som en observerbar sekvens, mens tags betragtes som skjulte tilstande, og målet er at bestemme den skjulte tilstandssekvens. For eksempel x = x1,x2,…………,xn hvor x er en sekvens af tokens mens y = y1,y2,y3,y4………yner den skjulte sekvens.
Hvordan fungerer Hidden Markov Model (HMM)?
HMM bruger joinfordeling, som er P(x, y), hvor x er inputsekvensen/tokensekvensen, og y er tagsekvensen.
Tag-sekvens for x vil være argmaxy1….ynp(x1,x2,….xn,y1,y2,y3,…..). Vi har kategoriseret tags fra teksten, men statistik over sådanne tags er afgørende. Så den næste del er at tælle disse tags til statistisk undersøgelse.
Resumé
- POS tagging ind NLTK er en proces til at markere ordene i tekstformat for en bestemt del af en tale baseret på dens definition og kontekst.
- Nogle eksempler på NLTK POS-tagging er: CC, CD, EX, JJ, MD, NNP, PDT, PRP$, TO osv.
- POS-tagger bruges til at tildele grammatisk information for hvert ord i sætningen. Installation, import og download af alle pakker med Part of Speech-tagging med NLTK er fuldført.
- Chunking i NLP er en proces til at tage små stykker information og gruppere dem i store enheder.
- Der er ingen foruddefinerede regler, men du kan kombinere dem efter behov og krav.
- Chunking bruges til enhedsdetektion. En enhed er den del af sætningen, hvorved maskinen får værdien for enhver hensigt.
- Chunking bruges til at kategorisere forskellige tokens i samme chunk.