POS-taggning med NLTK och chunking i NLP [EXEMPEL]
POS-taggning
POS-taggning (Parts of Speech Tagging) är en process för att markera orden i textformat för en viss del av ett tal baserat på dess definition och sammanhang. Det är ansvarigt för att läsa text på ett språk och tilldela någon specifik token (Parts of Speech) till varje ord. Det kallas också för grammatisk taggning.
Låt oss lära oss med ett NLTK Part of Speech-exempel:
Ingång: Allt för att tillåta oss.
Produktion: [('Allt', NN),('till', TO), ('permit', VB), ('oss', PRP)]
Steg involverade i exemplet med POS-taggning
- Tokenisera text (word_tokenize)
- tillämpa pos_tag på steget ovan som är nltk.pos_tag(tokenize_text)
Exempel på NLTK POS-taggar är följande:
Förkortning | Betydelse |
---|---|
CC | koordinerande konjunktion |
CD | kardinalsiffra |
DT | bestämning |
EX | existentiell där |
FW | främmande ord |
IN | preposition/underordnande konjunktion |
JJ | Denna NLTK POS-tagg är ett adjektiv (stor) |
JJR | adjektiv, komparativ (större) |
JJS | adjektiv, superlativ (störst) |
LS | listmarknad |
MD | modal (kunde, kommer) |
NN | substantiv, singular (katt, träd) |
NNS | substantiv plural (skrivbord) |
NNP | egennamn, singular (sarah) |
NNPS | egennamn, plural (indianer eller amerikaner) |
PDT | förutbestämare (alla, båda, hälften) |
POS | possessiv ändelse (förälders) |
PRP | personligt pronomen (hennes, sig själv, honom, sig själv) |
PRP$ | possessiva pronomen (henne, hans, min, min, vår) |
RB | adverb (ibland, snabbt) |
RBR | adverb, jämförande (större) |
RBS | adverb, superlativ (störst) |
RP | partikel (ungefär) |
ATT | oändlig markör (till) |
UH | interjektion (adjö) |
VB | verb (fråga) |
GBV | verb gerund (döma) |
VBD | verb dåtid (vädjade) |
VBN | verb particip (återförenat) |
VBP | verb, presens inte 3:e person singular (wrap) |
VBZ | verb, presens med 3:e person singular (baser) |
WDT | wh-determiner (det, vad) |
WP | wh- pronomen (vem) |
WRB | wh- adverb (hur) |
Ovanstående NLTK POS-tagglista innehåller alla NLTK POS-taggar. NLTK POS-taggare används för att tilldela grammatisk information för varje ord i meningen. Installation, import och nedladdning av alla paket av POS NLTK är klar.
Vad är Chunking i NLP?
Chunking i NLP är en process att ta små bitar av information och gruppera dem i stora enheter. Den primära användningen av Chunking är att skapa grupper av "substantivfraser." Den används för att lägga till struktur i meningen genom att följa POS-taggning i kombination med reguljära uttryck. Den resulterande gruppen av ord kallas "bitar". Det kallas också ytlig analys.
Vid grund analys finns det högst en nivå mellan rötter och blad medan djupanalys består av mer än en nivå. Shallow parsing kallas också lätt parsing eller chunking.
Regler för chunking
Det finns inga fördefinierade regler, men du kan kombinera dem efter behov och krav.
Till exempel måste du tagga substantiv, verb (pretenitum), adjektiv och koordinerande korsning från meningen. Du kan använda regeln enligt nedan
bit:{ * * * ?}
Följande tabell visar vad de olika symbolerna betyder:
Namn på symbol | BESKRIVNING |
---|---|
. | Vilket tecken som helst utom ny rad |
* | Matcha 0 eller fler repetitioner |
? | Matcha 0 eller 1 repetitioner |
Låt oss nu skriva koden för att förstå regeln bättre
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)
Produktion:
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))
Slutsatsen från ovanstående Part of Speech-taggning Python exempel: "göra" är ett verb som inte ingår i regeln, så det är inte taggat som mychunk
Använd Case of Chunking
Chunking används för enhetsdetektering. En entitet är den del av meningen genom vilken maskinen får värdet för någon avsikt.
Example: Temperature of New York. Here Temperature is the intention and New York is an entity.
Med andra ord, chunking används för att välja delmängder av tokens. Vänligen följ koden nedan för att förstå hur chunking används för att välja tokens. I det här exemplet kommer du att se grafen som motsvarar en bit av en substantivfras. Vi kommer att skriva koden och rita grafen för bättre förståelse.
Kod för att demonstrera användningsfall
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
Produktion:
['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
Diagrammet
Från grafen kan vi dra slutsatsen att "lär dig" och "guru99" är två olika tokens men är kategoriserade som substantivfras medan symbolen "från" inte tillhör substantivfras.
Chunking används för att kategorisera olika tokens i samma chunk. Resultatet kommer att bero på grammatik som har valts. Ytterligare Chunking NLTK används för att tagga mönster och utforska textkorpus.
RÄKNA POS-TAGGAR
Vi har diskuterat olika pos_tag i föregående avsnitt. I denna speciella handledning kommer du att studera hur du räknar dessa taggar. Räknetaggar är avgörande för textklassificering såväl som för att förbereda funktionerna för de naturliga språkbaserade operationerna. Jag kommer att diskutera med dig tillvägagångssättet som guru99 följde när jag förberedde kod tillsammans med en diskussion om utdata. Hoppas detta hjälper dig.
Så här räknar du taggar:
Här kommer vi först att skriva arbetskod och sedan kommer vi att skriva olika steg för att förklara 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)
Produktion:
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})
Utarbetande av koden
- För att räkna taggarna kan du använda paketräknaren från samlingens modul. En räknare är en ordboksunderklass som fungerar enligt principen om nyckel-värde operation. Det är en oordnad samling där element lagras som en ordboksnyckel medan antalet är deras värde.
- Importera nltk som innehåller moduler för att tokenisera texten.
- Skriv texten vars post_tag du vill räkna.
- Vissa ord är med stora bokstäver och några med gemener, så det är lämpligt att omvandla alla ord med gemener innan du använder tokenisering.
- Skicka orden genom word_tokenize från nltk.
- Beräkna post_tag för varje 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 ordboksräknare. Vi har importerat i kodraden 1. Ord är nyckeln och taggar är värdet och räknaren kommer att räkna varje tagg totalt antal som finns i texten.
Frekvensfördelning
Frekvensfördelning kallas antalet gånger ett resultat av ett experiment inträffar. Den används för att hitta frekvensen av varje ord som förekommer i ett dokument. Det använder FreqDistclass och definieras av nltk.sannolikheten modul.
En frekvensfördelning skapas vanligtvis genom att man räknar proverna vid upprepad körning av experimentet. Antalet räkningar ökas med ett varje gång. T.ex
freq_dist = FreqDist()
för token i dokumentet:
freq_dist.inc(token.type())
För vilket ord som helst kan vi kontrollera hur många gånger det förekom i ett visst dokument. T.ex
- Räknemetod: freq_dist.count('and') Detta uttryck returnerar värdet av antalet gånger 'and' inträffade. Det kallas räknemetoden.
- Frekvensmetod: freq_dist.freq('and') Detta uttryck returnerar frekvensen för ett givet sampel.
Vi kommer att skriva ett litet program och förklara hur det fungerar i detalj. Vi kommer att skriva lite text och kommer att räkna ut frekvensfördelningen för varje ord i texten.
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()
Förklaring av kod:
- Importera nltk-modul.
- Skriv texten vars ordfördelning du behöver hitta.
- Tokenisera varje ord i texten som serveras som indata till FreqDist-modulen i nltk.
- Använd varje ord på nlk.FreqDist i form av en lista
- Rita orden i grafen med plot()
Vänligen visualisera grafen för en bättre förståelse av texten
OBS: Du måste ha matplotlib installerat för att se grafen ovan
Observera grafen ovan. Det motsvarar att räkna förekomsten av varje ord i texten. Det hjälper till att studera text och vidare vid implementering av textbaserad sentimental analys. I ett nötskal kan man dra slutsatsen att nltk har en modul för att räkna förekomsten av varje ord i texten som hjälper till att förbereda statistiken för naturliga språkegenskaper. Det spelar en betydande roll för att hitta nyckelorden i texten. Du kan också extrahera texten från pdf:en med hjälp av bibliotek som extrakt, PyPDF2 och mata texten till nlk.FreqDist.
Nyckelordet är "tokenize". Efter tokenisering kontrollerar den för varje ord i ett visst stycke eller ett visst textdokument för att avgöra hur många gånger det förekom. Du behöver inte NLTK-verktygslådan för detta. Du kan också göra det med dina egna färdigheter i pythonprogrammering. NLTK-verktygssatsen tillhandahåller endast en kod som är färdig att använda för de olika operationerna.
Att räkna varje ord kanske inte är särskilt användbart. Istället bör man fokusera på samlokalisering och bigram som handlar om många ord i ett par. Dessa par identifierar användbara nyckelord för bättre naturliga språkfunktioner som kan matas till maskinen. Vänligen titta nedan för deras detaljer.
Kollokationer: Bigram och Trigram
Vad är samlokaliseringar?
Kollokationer är de ordpar som förekommer tillsammans många gånger i ett dokument. Det beräknas av antalet av dessa par som förekommer tillsammans till dokumentets totala ordantal.
Tänk på elektromagnetiskt spektrum med ord som ultravioletta strålar, infraröda strålar.
Orden ultraviolett och strålar används inte individuellt och kan därför behandlas som samlokalisering. Ett annat exempel är CT-skanningen. Vi säger inte CT och Scan separat, och därför behandlas de också som kollokation.
Vi kan säga att för att hitta kollokationer krävs beräkning av ords frekvens och deras utseende i sammanhang med andra ord. Dessa specifika samlingar av ord kräver filtrering för att behålla användbara innehållstermer. Varje gram av ord kan sedan poängsättas enligt något associationsmått, för att bestämma den relativa sannolikheten för att varje Ingram är en samlokalisering.
Samlokalisering kan delas in i två typer-
- Bigrams ckombination av två ord
- trigramskombination av tre ord
Bigram och trigram ger mer meningsfulla och användbara funktioner för utvinningssteget. Dessa är särskilt användbara i textbaserad sentimental analys.
Bigrams exempelkod
import nltk text = "Guru99 is a totally new kind of learning experience." Tokens = nltk.word_tokenize(text) output = list(nltk.bigrams(Tokens)) print(output)
Produktion:
[('Guru99', 'is'), ('is', 'totally'), ('totally', 'new'), ('new', 'kind'), ('kind', 'of'), ('of', 'learning'), ('learning', 'experience'), ('experience', '.')]
Trigram exempelkod
Ibland blir det viktigt att se ett par med tre ord i meningen för statistisk analys och frekvensräkning. Detta spelar återigen en avgörande roll i formningen NLP (naturliga språkbehandlingsfunktioner) samt textbaserad sentimental förutsägelse.
Samma kod körs för att beräkna trigrammen.
import nltk text = “Guru99 is a totally new kind of learning experience.” Tokens = nltk.word_tokenize(text) output = list(nltk.trigrams(Tokens)) print(output)
Produktion:
[('Guru99', 'is', 'totally'), ('is', 'totally', 'new'), ('totally', 'new', 'kind'), ('new', 'kind', 'of'), ('kind', 'of', 'learning'), ('of', 'learning', 'experience'), ('learning', 'experience', '.')]
Tagga meningar
Märkning Mening i en bredare mening hänvisar till tillägg av etiketter för verbet, substantivet, etc., utifrån meningens sammanhang. Identifiering av POS-taggar är en komplicerad process. Generisk taggning av POS är alltså inte möjlig manuellt eftersom vissa ord kan ha olika (tvetydiga) betydelser beroende på meningens struktur. Konvertering av text i form av lista är ett viktigt steg innan taggning eftersom varje ord i listan loopas och räknas för en viss tagg. Se koden nedan för att förstå det bättre
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)))
Produktion:
[('Hej', 'NNP'), ('Guru99', 'NNP'), (',', ','), ('Du', 'PRP'), ('har', 'VBP') , ('bygga', 'VBN'), ('a', 'DT'), ('mycket', 'RB'), ('bra', 'JJ'), ('site', 'NN') , ('och', 'CC'), ('jag', 'PRP'), ('love', 'VBP'), ('besöker', 'VBG'), ('din', 'PRP$' ), ('site', 'NN'), ('.', '.')]
Kodförklaring:
- Kod för att importera nltk (Natural language toolkit som innehåller undermoduler som meningen tokenize och word tokenize.)
- Text vars taggar ska skrivas ut.
- Meningstokenisering
- For loop implementeras där ord tokeniseras från meningen och taggen för varje ord skrivs ut som utdata.
I Corpus finns det två typer av POS-taggare:
- Regelbaserad
- Stokastiska POS-taggare
1. Regelbaserad POS-taggare: För ord som har en tvetydig betydelse tillämpas ett regelbaserat tillvägagångssätt på grundval av kontextuell information. Det görs genom att kontrollera eller analysera innebörden av föregående eller följande ord. Information analyseras från ordets omgivning eller inom sig själv. Därför är ord taggade av de grammatiska reglerna för ett visst språk, såsom versaler och skiljetecken. t.ex. Brills taggare.
2. Stokastisk POS-taggare: Olika tillvägagångssätt som frekvens eller sannolikhet används under denna metod. Om ett ord mestadels är taggat med en viss tagg i träningsuppsättningen så får det i testmeningen just den taggen. Ordet tag är inte bara beroende av sin egen tagg utan också av den föregående taggen. Denna metod är inte alltid korrekt. Ett annat sätt är att beräkna sannolikheten för förekomsten av en specifik tagg i en mening. Således beräknas den slutliga taggen genom att kontrollera den högsta sannolikheten för ett ord med en viss tagg.
POS-taggning med Hidden Markov Model
Taggningsproblem kan också modelleras med HMM. Den behandlar inmatningstokens som en observerbar sekvens medan taggar betraktas som dolda tillstånd och målet är att bestämma den dolda tillståndssekvensen. Till exempel x = x1,x2,…………,xn där x är en sekvens av tokens medan y = y1,y2,y3,y4………ynär den dolda sekvensen.
Hur fungerar Hidden Markov Model (HMM)?
HMM använder joindistribution som är P(x, y) där x är indatasekvensen/tokensekvensen och y är taggsekvensen.
Taggsekvens för x kommer att vara argmaxy1….ynp(x1,x2,….xn,y1,y2,y3,…..). Vi har kategoriserat taggar från texten, men statistik för sådana taggar är avgörande. Så nästa del är att räkna dessa taggar för statistisk studie.
Sammanfattning
- POS Taggar in Nltk är en process för att markera orden i textformat för en viss del av ett tal baserat på dess definition och sammanhang.
- Några exempel på NLTK POS-taggning är: CC, CD, EX, JJ, MD, NNP, PDT, PRP$, TO, etc.
- POS-taggaren används för att tilldela grammatisk information för varje ord i meningen. Installation, import och nedladdning av alla paket av Part of Speech-taggning med NLTK är klar.
- Chunking i NLP är en process för att ta små bitar av information och gruppera dem i stora enheter.
- Det finns inga fördefinierade regler, men du kan kombinera dem efter behov och krav.
- Chunking används för enhetsdetektering. En entitet är den del av meningen genom vilken maskinen får värdet för någon avsikt.
- Chunking används för att kategorisera olika tokens i samma chunk.