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

Navneordssætning Chunking Graph
Navneordssætning chunking Graph

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

TÆLLE POS-TAGS

  1. 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.
  2. Importer nltk som indeholder moduler til at tokenisere teksten.
  3. Skriv den tekst, hvis post_tag du vil tælle.
  4. 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.
  5. Send ordene gennem 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. 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

  1. Optællingsmetode: freq_dist.count('and') Dette udtryk returnerer værdien af ​​det antal gange, 'og' forekom. Det kaldes tællemetoden.
  2. 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()

Frekvensfordeling

Forklaring af kode:

  1. Importer nltk-modul.
  2. Skriv den tekst, hvis ordfordeling du skal finde.
  3. Tokeniser hvert ord i teksten, der serveres som input til FreqDist-modulet i nltk.
  4. Anvend hvert ord på nlk.FreqDist i form af en liste
  5. Tegn ordene i grafen ved hjælp af plot()

Visualiser venligst grafen for en bedre forståelse af den skrevne tekst

Frekvensfordeling af hvert ord i grafen

Frekvensfordeling af hvert ord i grafen

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'), ('.', '.')]

Tagging af sætninger

Kodeforklaring:

  1. Kode til at importere nltk (Natural language toolkit, som indeholder undermoduler såsom sætning tokenize og word tokenize.)
  2. Tekst, hvis tags skal udskrives.
  3. Sætningstokenisering
  4. 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.