POS-tagging med NLTK og Chunking i NLP [EKSEMPLER]

POS-tagging

POS-tagging (Parts of Speech Tagging) er en prosess for å merke ordene i tekstformat for en bestemt del av en tale basert på dens definisjon og kontekst. Den er ansvarlig for å lese tekst på et språk og tildele et bestemt token (Parts of Speech) til hvert ord. Det kalles også grammatisk merking.

La oss lære med et NLTK Part of Speech-eksempel:

Inngang: Alt for å tillate oss.

Utgang: [('Alt', NN),('to', TO), ('permit', VB), ('oss', PRP)]

Trinn involvert i POS-tagging-eksemplet

  • Tokenize tekst (word_tokenize)
  • bruk pos_tag på trinnet ovenfor som er nltk.pos_tag(tokenize_text)

Eksempler på NLTK POS-tagger er som følger:

Forkortelse Betydning
CC koordinerende forbindelse
CD kardinalsiffer
DT bestemme
EX eksistensielt der
FW fremmedord
IN preposisjon/underordnet konjunksjon
JJ Denne NLTK POS-taggen er et adjektiv (stor)
JJR adjektiv, komparativ (større)
JJS adjektiv, superlativ (størst)
LS liste markedet
MD modal (kunne, vil)
NN substantiv, entall (katt, tre)
NNS substantiv flertall (pulter)
NNP eget substantiv, entall (sarah)
NNPS egennavn, flertall (indianere eller amerikanere)
PDT forhåndsbestemmer (alle, begge, halvparten)
POS besittende endelse (foreldres)
PRP personlig pronomen (hennes, seg selv, ham, seg selv)
PRP$ besittende pronomen (henne, hans, min, min, vår)
RB adverb (av og til, raskt)
RBR adverb, komparativ (større)
RBS adverb, superlativ (størst)
RP partikkel (ca.)
TIL uendelig markør (til)
UH interjeksjon (farvel)
VB verb (spør)
GBV verb gerund (dømmende)
VBD verb preteritum (bedt om)
VBN verb partisipp (gjenforenet)
VBP verb, presens ikke 3. person entall (omslag)
VBZ verb, presens med 3. person entall (baser)
wdt wh-determiner (det, hva)
WP wh- pronomen (hvem)
WRB hva- adverb (hvordan)

Ovennevnte NLTK POS-tag-liste inneholder alle NLTK POS-taggene. NLTK POS-tagger brukes til å tildele grammatisk informasjon for hvert ord i setningen. Installering, import og nedlasting av alle pakkene til POS NLTK er fullført.

Hva er Chunking i NLP?

chunking i NLP er en prosess for å ta små biter av informasjon og gruppere dem i store enheter. Den primære bruken av Chunking er å lage grupper av "substantivfraser." Den brukes til å legge til struktur i setningen ved å følge POS-tagging kombinert med regulære uttrykk. Den resulterende gruppen med ord kalles "biter". Det kalles også grunt parsing.

Ved grunn parsing er det maksimalt ett nivå mellom røtter og blader mens dyp parsing består av mer enn ett nivå. Grunn parsing kalles også lett parsing eller chunking.

Regler for Chunking

Det er ingen forhåndsdefinerte regler, men du kan kombinere dem etter behov og krav.

Du må for eksempel merke substantiv, verb (preteritum), adjektiv og koordinerende kryss fra setningen. Du kan bruke regelen som nedenfor

del:{ * * * ?}

Følgende tabell viser hva de ulike symbolene betyr:

Navn på symbol Description
. Ethvert tegn unntatt ny linje
* Match 0 eller flere repetisjoner
? Match 0 eller 1 repetisjoner

La oss nå skrive koden for å forstå regelen 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)

Utgang:

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

Konklusjonen fra ovennevnte Part of Speech-tagging Python eksempel: "lage" er et verb som ikke er inkludert i regelen, så det er ikke merket som mychunk

Bruk Case of Chunking

Chunking brukes til enhetsdeteksjon. En enhet er den delen av setningen som maskinen får verdien for enhver intensjon med.

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

Med andre ord brukes chunking som valg av undersett av tokens. Følg koden nedenfor for å forstå hvordan chunking brukes til å velge tokens. I dette eksemplet vil du se grafen som vil tilsvare en del av en substantivfrase. Vi skal skrive koden og tegne grafen for bedre forståelse.

Kode for å demonstrere brukstilfelle

 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 

Utgang:

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

Graph

Substantiv frase Chunking Graph
Substantiv frase chunking Graph

Fra grafen kan vi konkludere med at "lær" og "guru99" er to forskjellige symboler, men er kategorisert som substantivfrase, mens symbolet "fra" ikke tilhører substantivfrase.

Chunking brukes til å kategorisere forskjellige tokens i samme del. Resultatet vil avhenge av grammatikk som er valgt. Videre Chunking NLTK brukes til å merke mønstre og utforske tekstkorpus.

TELLE POS TAGS

Vi har diskutert ulike post_tag i forrige avsnitt. I denne spesielle opplæringen vil du studere hvordan du teller disse kodene. Tellekoder er avgjørende for tekstklassifisering samt forberedelse av funksjonene for de naturlige språkbaserte operasjonene. Jeg vil diskutere med deg tilnærmingen som guru99 fulgte mens jeg utarbeidet kode sammen med en diskusjon om utdata. Håper dette vil hjelpe deg.

Slik teller du tagger:

Her skal vi først skrive arbeidskode og deretter skrive ulike trinn for å 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)

Utgang:

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

Utarbeidelse av koden

TELLE POS TAGS

  1. For å telle merkelappene kan du bruke pakketelleren fra samlingens modul. En teller er en ordbokunderklasse som fungerer etter prinsippet om nøkkelverdi-operasjon. Det er en uordnet samling der elementer lagres som en ordboknøkkel mens antallet er verdien deres.
  2. Importer nltk som inneholder moduler for å tokenisere teksten.
  3. Skriv teksten hvis post_tag du vil telle.
  4. Noen ord er med store bokstaver og noen med små bokstaver, så det er hensiktsmessig å transformere alle ordene med små bokstaver før du bruker tokenisering.
  5. Send ordene gjennom word_tokenize fra nltk.
  6. 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')]
  7. Nå kommer rollen som ordbokteller. Vi har importert i kodelinje 1. Ord er nøkkelen og tagger er verdien og telleren vil telle hver tagg totalt antall som finnes i teksten.

Frekvensdistribusjon

Frekvensfordeling er referert til som antall ganger et utfall av et eksperiment oppstår. Det brukes til å finne frekvensen av hvert ord som forekommer i et dokument. Den bruker FreqDistclass og definert av nltk.sannsynligheten modul.

En frekvensfordeling opprettes vanligvis ved å telle prøvene av gjentatte gangers kjøring av eksperimentet. Antall tellinger økes med én, hver gang. F.eks

freq_dist = FreqDist()

for tokenet i dokumentet:

freq_dist.inc(token.type())

For et hvilket som helst ord kan vi sjekke hvor mange ganger det forekom i et bestemt dokument. F.eks

  1. Tellemetode: freq_dist.count('and') Dette uttrykket returnerer verdien av antall ganger 'and' oppstod. Det kalles tellemetoden.
  2. Frekvensmetode: freq_dist.freq('and') Dette uttrykket returnerer frekvensen til en gitt prøve.

Vi vil skrive et lite program og forklare hvordan det fungerer i detalj. Vi skal skrive litt tekst og regne ut frekvensfordelingen til 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()

Frekvensdistribusjon

Forklaring av kode:

  1. Importer nltk-modul.
  2. Skriv teksten hvis ordfordeling du trenger å finne.
  3. Tokeniser hvert ord i teksten som serveres som input til FreqDist-modulen til nltk.
  4. Bruk hvert ord på nlk.FreqDist i form av en liste
  5. Tegn ordene i grafen ved å bruke plot()

Visualiser grafen for en bedre forståelse av teksten som er skrevet

Frekvensfordeling av hvert ord i grafen

Frekvensfordeling av hvert ord i grafen

MERK: Du må ha installert matplotlib for å se grafen ovenfor

Se grafen ovenfor. Det tilsvarer å telle forekomsten av hvert ord i teksten. Det hjelper i studiet av tekst og videre med å implementere tekstbasert sentimental analyse. I et nøtteskall kan det konkluderes med at nltk har en modul for å telle forekomsten av hvert ord i teksten som hjelper til med å utarbeide statistikken over naturlige språkfunksjoner. Det spiller en betydelig rolle for å finne nøkkelordene i teksten. Du kan også trekke ut teksten fra pdf-en ved å bruke biblioteker som extract, PyPDF2 og mate teksten til nlk.FreqDist.

Nøkkelbegrepet er "tokenize". Etter tokenisering sjekker den for hvert ord i et gitt avsnitt eller tekstdokument for å finne ut hvor mange ganger det oppstod. Du trenger ikke NLTK-verktøysettet for dette. Du kan også gjøre det med dine egne python-programmeringsferdigheter. NLTK-verktøysettet gir kun en klar-til-bruk-kode for de ulike operasjonene.

Det er kanskje lite nyttig å telle hvert ord. I stedet bør man fokusere på kollokasjon og bigrammer som omhandler mange ord i et par. Disse parene identifiserer nyttige nøkkelord for å bedre naturlige språkfunksjoner som kan mates til maskinen. Vennligst se nedenfor for deres detaljer.

Kollokasjoner: Bigrams og Trigrams

Hva er Kollokasjoner?

Kollokasjoner er ordparene som forekommer sammen mange ganger i et dokument. Det beregnes av antall par som forekommer sammen til det totale ordantallet i dokumentet.

Tenk på elektromagnetisk spektrum med ord som ultrafiolette stråler, infrarøde stråler.

Ordene ultrafiolett og stråler brukes ikke individuelt og kan derfor behandles som samlokalisering. Et annet eksempel er CT-skanning. Vi sier ikke CT og Scan separat, og derfor blir de også behandlet som kollokasjon.

Vi kan si at det å finne kollokasjoner krever beregning av frekvensene til ord og deres utseende i sammenheng med andre ord. Disse spesifikke samlingene av ord krever filtrering for å beholde nyttige innholdsord. Hvert gram med ord kan deretter scores i henhold til et assosiasjonsmål, for å bestemme den relative sannsynligheten for at hvert Ingram er en samlokalisering.

Samlokalisering kan kategoriseres i to typer-

  • Bigrams ckombinasjon av to ord
  • trigramskombinasjon av tre ord

Bigrams og Trigrams gir mer meningsfylte og nyttige funksjoner for funksjonsutvinningsstadiet. Disse er spesielt nyttige i tekstbasert 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)

Utgang:

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

Trigram eksempelkode

Noen ganger blir det viktig å se et par på tre ord i setningen for statistisk analyse og frekvenstelling. Dette spiller igjen en avgjørende rolle i formingen NLP (naturlige språkbehandlingsfunksjoner) samt tekstbasert sentimental prediksjon.

Den samme koden kjøres for å beregne trigrammene.

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

Utgang:

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

Merking av setninger

Merking av setning i en bredere forstand refererer til tillegg av etiketter for verbet, substantivet, etc., etter konteksten til setningen. Identifikasjon av POS-brikker er en komplisert prosess. Generisk merking av POS er derfor ikke mulig manuelt, da noen ord kan ha forskjellige (tvetydige) betydninger i henhold til setningens struktur. Konvertering av tekst i form av liste er et viktig skritt før tagging, da hvert ord i listen sløyfes og telles for en bestemt kode. Vennligst se koden nedenfor for å forstå den 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)))

Utgang:

[('Hei', 'NNP'), ('Guru99', 'NNP'), (',', ','), ('Du', 'PRP'), ('har', 'VBP') , ('build', 'VBN'), ('a', 'DT'), ('veldig', 'RB'), ('bra', 'JJ'), ('site', 'NN') , ('og', 'CC'), ('jeg', 'PRP'), ('kjærlighet', 'VBP'), ('besøker', 'VBG'), ('din', 'PRP$' ), ('site', 'NN'), ('.', '.')]

Merking av setninger

Kodeforklaring:

  1. Kode for å importere nltk (verktøysett for naturlig språk som inneholder undermoduler som setningstokenize og ordtokenize.)
  2. Tekst hvis tagger skal skrives ut.
  3. Setningstokenisering
  4. For loop er implementert der ordene er tokenisert fra setningen og taggen til hvert ord skrives ut som utdata.

I Corpus er det to typer POS-taggere:

  • Regelbasert
  • Stokastiske POS-taggere

1. Regelbasert POS-tagger: For ord som har tvetydig betydning, brukes regelbasert tilnærming basert på kontekstuell informasjon. Det gjøres ved å sjekke eller analysere betydningen av det foregående eller det følgende ordet. Informasjon analyseres fra omgivelsene til ordet eller i seg selv. Derfor er ord merket av de grammatiske reglene for et bestemt språk, for eksempel store bokstaver og tegnsetting. f.eks. Brills tagger.

2. Stokastisk POS-tagger: Ulike tilnærminger som frekvens eller sannsynlighet brukes under denne metoden. Hvis et ord for det meste er merket med en bestemt kode i treningssettet, blir det gitt den spesielle taggen i testsetningen. Ordet tag er ikke bare avhengig av sin egen tag, men også av den forrige taggen. Denne metoden er ikke alltid nøyaktig. En annen måte er å beregne sannsynligheten for forekomst av en spesifikk kode i en setning. Dermed beregnes den endelige taggen ved å sjekke den høyeste sannsynligheten for et ord med en bestemt kode.

POS-tagging med Hidden Markov Model

Merkeproblemer kan også modelleres ved hjelp av HMM. Den behandler input-tokens for å være observerbar sekvens mens tagger betraktes som skjulte tilstander og målet er å bestemme den skjulte tilstandssekvensen. For eksempel x = x1,x2,………,xn hvor x er en sekvens av tokens mens y = y1,y2,y3,y4………yner den skjulte sekvensen.

Hvordan fungerer Hidden Markov Model (HMM)?

HMM bruker sammenføyningsdistribusjon som er P(x, y) der x er inngangssekvensen/tokensekvensen og y er tagsekvensen.

Tag-sekvens for x vil være argmaxy1….ynp(x1,x2,….xn,y1,y2,y3,…..). Vi har kategorisert tagger fra teksten, men statistikk for slike tagger er avgjørende. Så neste del er å telle disse kodene for statistisk studie.

Oppsummering

  • POS-merking NLTK er en prosess for å merke ordene i tekstformat for en bestemt del av en tale basert på dens definisjon og kontekst.
  • Noen eksempler på NLTK POS-tagging er: CC, CD, EX, JJ, MD, NNP, PDT, PRP$, TO, etc.
  • POS-tagger brukes til å tildele grammatisk informasjon for hvert ord i setningen. Installering, import og nedlasting av alle pakkene med Part of Speech-tagging med NLTK er fullført.
  • Chunking i NLP er en prosess for å ta små biter av informasjon og gruppere dem i store enheter.
  • Det er ingen forhåndsdefinerte regler, men du kan kombinere dem etter behov og krav.
  • Chunking brukes til enhetsdeteksjon. En enhet er den delen av setningen som maskinen får verdien for enhver intensjon med.
  • Chunking brukes til å kategorisere forskjellige tokens i samme del.