Tagging POS con NLTK e Chunking in NLP [ESEMPI]
Etichettatura POS
Etichettatura POS (Parts of Speech Tagging) è un processo per contrassegnare le parole in formato testo per una parte particolare di un discorso in base alla sua definizione e al contesto. È responsabile della lettura del testo in una lingua e dell'assegnazione di alcuni simboli specifici (parti del discorso) a ciascuna parola. Si chiama anche etichettatura grammaticale.
Impariamo con un esempio di parte del discorso NLTK:
Ingresso: Tutto per permettercelo.
Produzione: [('Tutto', NN),('a', TO), ('permesso', VB), ('noi', PRP)]
Passaggi coinvolti nell'esempio di etichettatura POS
- Tokenizza il testo (word_tokenize)
- applica pos_tag al passaggio precedente che è nltk.pos_tag(tokenize_text)
Gli esempi di tag POS NLTK sono i seguenti:
Abbreviazione | Significato |
---|---|
CC | congiunzione coordinativa |
CD | cifra cardinale |
DT | determinante |
EX | esistenziale lì |
FW | parola straniera |
IN | preposizione/congiunzione subordinante |
JJ | Questo tag POS NLTK è un aggettivo (grande) |
JJR | aggettivo, comparativo (più grande) |
JJS | aggettivo, superlativo (più grande) |
LS | mercato di listino |
MD | modale (potrebbe, volontà) |
NN | sostantivo, singolare (gatto, albero) |
NNS | sostantivo plurale (scrivanie) |
PNN | nome proprio, singolare (sarah) |
NNPS | nome proprio, plurale (indiani o americani) |
PDT | predeterminante (tutto, entrambi, metà) |
POS | desinenza possessiva (genitore) |
PRP | pronome personale (lei, se stessa, lui, se stesso) |
Prezzo consigliato | pronome possessivo (lei, suo, mio, mio, nostro) |
RB | avverbio (occasionalmente, rapidamente) |
RBR | avverbio, comparativo (maggiore) |
RBS | avverbio, superlativo (il più grande) |
RP | particella (circa) |
A | marcatore infinito (a) |
UH | interiezione (arrivederci) |
VB | verbo (chiedere) |
GBV | gerundio verbale (giudicare) |
VBD | verbo passato (supplicare) |
VBN | participio passato del verbo (riunificato) |
VBP | verbo, presente, non terza persona singolare (avvolgente) |
VBZ | verbo, presente con 3a persona singolare (basi) |
wdt | wh-determinatore (quello, cosa) |
WP | wh- pronome (chi) |
WRB | wh-avverbio (come) |
L'elenco dei tag POS NLTK riportato sopra contiene tutti i tag POS NLTK. Il tagger POS NLTK viene utilizzato per assegnare informazioni grammaticali a ciascuna parola della frase. L'installazione, l'importazione e il download di tutti i pacchetti di POS NLTK sono completi.
Cos'è il Chunking nella PNL?
chunking in NLP è un processo per prendere piccoli pezzi di informazioni e raggrupparli in grandi unità. L'uso principale di Chunking è la creazione di gruppi di "sintagmi nominali". Viene utilizzato per aggiungere struttura alla frase seguendo il tagging POS combinato con espressioni regolari. Il gruppo di parole risultante è chiamato "chunk". È anche chiamato parsing superficiale.
Nell'analisi superficiale, c'è al massimo un livello tra radici e foglie mentre l'analisi profonda comprende più di un livello. L'analisi superficiale è anche chiamata analisi leggera o suddivisione in blocchi.
Regole per il Chunking
Non esistono regole predefinite, ma è possibile combinarle a seconda delle necessità e delle necessità.
Ad esempio, devi taggare il sostantivo, il verbo (passato), l'aggettivo e la giunzione coordinativa della frase. Puoi utilizzare la regola come di seguito
pezzo:{ * * * ?}
La tabella seguente mostra il significato dei vari simboli:
Nome del simbolo | Descrizione |
---|---|
. | Qualsiasi carattere tranne la nuova riga |
* | Abbina 0 o più ripetizioni |
? | Abbina 0 o 1 ripetizioni |
Ora scriviamo il codice per comprendere meglio la regola
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)
Produzione:
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))
La conclusione della parte precedente del tagging del discorso Python esempio: “make” è un verbo che non è incluso nella regola, quindi non è etichettato come mychunk
Caso d'uso del Chunking
La suddivisione in blocchi viene utilizzata per il rilevamento delle entità. Un'entità è quella parte della frase mediante la quale la macchina ottiene il valore per qualsiasi intenzione.
Example: Temperature of New York. Here Temperature is the intention and New York is an entity.
In altre parole, il Chunking viene utilizzato per selezionare i sottoinsiemi di token. Segui il codice seguente per capire come viene utilizzato il Chunking per selezionare i token. In questo esempio, vedrai il grafico che corrisponderà a un pezzo di una frase nominale. Scriveremo il codice e disegneremo il grafico per una migliore comprensione.
Codice per dimostrare il caso d'uso
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
Produzione:
['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
Grafico

Dal grafico, possiamo concludere che "learn" e "guru99" sono due token diversi ma sono classificati come Noun Phrase mentre il token "from" non appartiene a Noun Phrase.
Il Chunking viene utilizzato per classificare diversi token nello stesso blocco. Il risultato dipenderà dalla grammatica selezionata. Ulteriore Chunking NLTK viene utilizzato per taggare modelli ed esplorare corpora di testo.
CONTEGGIO TAG POS
Ne abbiamo discusso vari pos_tag nella sezione precedente. In questo particolare tutorial, studierai come contare questi tag. I tag di conteggio sono fondamentali per la classificazione del testo e per preparare le funzionalità per le operazioni basate sul linguaggio naturale. Discuterò con te dell'approccio seguito da guru99 durante la preparazione del codice insieme a una discussione sull'output. Spero che questo ti possa aiutare.
Come contare i tag:
Qui prima scriveremo il codice funzionante e poi scriveremo diversi passaggi per spiegare il codice.
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)
Produzione:
Contatore({'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})
Elaborazione del codice
- Per contare i tag, puoi utilizzare il pacchetto Counter dal modulo della raccolta. Un contatore è una sottoclasse del dizionario che funziona secondo il principio dell'operazione chiave-valore. È una raccolta non ordinata in cui gli elementi vengono archiviati come chiave del dizionario mentre il conteggio è il loro valore.
- Importa nltk che contiene i moduli per tokenizzare il testo.
- Scrivi il testo di cui vuoi contare il pos_tag.
- Alcune parole sono in maiuscolo ed altre in minuscolo, quindi è opportuno trasformare tutte le parole in minuscolo prima di applicare la tokenizzazione.
- Passa le parole tramite word_tokenize da nltk.
- Calcola il pos_tag di ciascun 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')]
- Ora arriva il ruolo del contatore del dizionario. Abbiamo importato nella riga di codice 1. Le parole sono la chiave e i tag sono il valore e il contatore conterà il conteggio totale di ogni tag presente nel testo.
Distribuzione di frequenza
La distribuzione della frequenza è definita come il numero di volte in cui si verifica il risultato di un esperimento. Viene utilizzato per trovare la frequenza di ogni parola che ricorre in un documento. Utilizza FreqDisclass e definito da la probabilità nltk modulo.
Una distribuzione di frequenza viene solitamente creata contando i campioni dell'esecuzione ripetuta dell'esperimento. Il numero di conteggi viene incrementato di uno ogni volta. Per esempio
frequenza_dist = frequenza_dist()
per il token nel documento:
freq_dist.inc(token.tipo())
Per ogni parola, possiamo verificare quante volte è apparsa in un particolare documento. Per esempio
- Metodo di conteggio: freq_dist.count('and')Questa espressione restituisce il valore del numero di volte in cui si è verificato 'e'. Si chiama metodo di conteggio.
- Metodo di frequenza: freq_dist.freq('and')L'espressione restituisce la frequenza di un dato campione.
Scriveremo un piccolo programma e ne spiegheremo il funzionamento in dettaglio. Scriveremo del testo e calcoleremo la distribuzione di frequenza di ciascuna parola nel testo.
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()
Spiegazione del codice:
- Importa il modulo nltk.
- Scrivi il testo di cui devi trovare la distribuzione delle parole.
- Tokenizza ogni parola nel testo che viene utilizzata come input per il modulo FreqDist di nltk.
- Applica ogni parola a nlk.FreqDist sotto forma di elenco
- Traccia le parole nel grafico usando plot()
Si prega di visualizzare il grafico per una migliore comprensione del testo scritto

NOTA: è necessario che matplotlib sia installato per vedere il grafico sopra
Osservare il grafico qui sopra. Corrisponde al conteggio delle occorrenze di ogni parola nel testo. Aiuta nello studio del testo e nell'implementazione dell'analisi sentimentale basata sul testo. In poche parole, si può concludere che nltk ha un modulo per contare le occorrenze di ogni parola nel testo che aiuta a preparare le statistiche delle caratteristiche del linguaggio naturale. Svolge un ruolo significativo nel trovare le parole chiave nel testo. Puoi anche estrarre il testo dal PDF utilizzando librerie come extract, PyPDF2 e alimentare il testo in nlk.FreqDist.
Il termine chiave è “tokenizzare”. Dopo la tokenizzazione, controlla ogni parola in un determinato paragrafo o documento di testo per determinare il numero di volte in cui è stata ripetuta. Per questo non è necessario il toolkit NLTK. Puoi anche farlo con le tue capacità di programmazione Python. Il toolkit NLTK fornisce solo un codice pronto all'uso per le varie operazioni.
Contare ogni parola potrebbe non essere molto utile. Invece, ci si dovrebbe concentrare sulla collocazione e sui bigrammi, che hanno a che fare con molte parole in una coppia. Queste coppie identificano parole chiave utili per migliorare le caratteristiche del linguaggio naturale che possono essere fornite alla macchina. Si prega di guardare sotto per i loro dettagli.
Collocazioni: bigram e trigrammi
Cos'è la collocazione?
Le collocazioni sono coppie di parole che ricorrono insieme più volte in un documento. Viene calcolato in base al numero di coppie che si verificano insieme rispetto al conteggio complessivo delle parole del documento.
Considera lo spettro elettromagnetico con parole come raggi ultravioletti, raggi infrarossi.
Le parole ultravioletto e raggi non sono usate individualmente e quindi possono essere trattate come collocazione. Un altro esempio è la TAC. Non diciamo TC e Scansione separatamente, e quindi sono anche trattate come collocazione.
Possiamo dire che per trovare le collocazioni è necessario calcolare le frequenze delle parole e il loro aspetto nel contesto di altre parole. Queste raccolte specifiche di parole richiedono un filtraggio per conservare termini di contenuto utili. A ogni grammo di parole può quindi essere assegnato un punteggio secondo qualche misura di associazione, per determinare la probabilità relativa che ciascun Ingram sia una collocazione.
La collocazione può essere classificata in due tipi:
- Bigram ccombinazione di due parole
- trigrammicombinazione di tre parole
Bigram e Trigram forniscono funzionalità più significative e utili per la fase di estrazione delle funzionalità. Questi sono particolarmente utili nell'analisi sentimentale basata sul testo.
Codice di esempio di Bigram
import nltk text = "Guru99 is a totally new kind of learning experience." Tokens = nltk.word_tokenize(text) output = list(nltk.bigrams(Tokens)) print(output)
Produzione:
[('Guru99', 'is'), ('is', 'totally'), ('totally', 'new'), ('new', 'kind'), ('kind', 'of'), ('of', 'learning'), ('learning', 'experience'), ('experience', '.')]
Codice di esempio dei trigrammi
A volte diventa importante vedere una coppia di tre parole nella frase per l'analisi statistica e il conteggio della frequenza. Anche questo gioca un ruolo cruciale nella formazione NLP (funzionalità di elaborazione del linguaggio naturale) nonché previsioni sentimentali basate su testo.
Lo stesso codice viene eseguito per il calcolo dei trigrammi.
import nltk text = “Guru99 is a totally new kind of learning experience.” Tokens = nltk.word_tokenize(text) output = list(nltk.trigrams(Tokens)) print(output)
Produzione:
[('Guru99', 'is', 'totally'), ('is', 'totally', 'new'), ('totally', 'new', 'kind'), ('new', 'kind', 'of'), ('kind', 'of', 'learning'), ('of', 'learning', 'experience'), ('learning', 'experience', '.')]
Taggare le frasi
L'etichettatura della frase in senso più ampio si riferisce all'aggiunta di etichette del verbo, del sostantivo, ecc., in base al contesto della frase. L'identificazione dei tag POS è un processo complicato. Pertanto l'etichettatura generica dei POS non è possibile manualmente poiché alcune parole potrebbero avere significati diversi (ambigui) a seconda della struttura della frase. La conversione del testo sotto forma di elenco è un passaggio importante prima dell'inserimento dei tag poiché ogni parola nell'elenco viene ripetuta in loop e conteggiata per un tag particolare. Si prega di consultare il codice seguente per capirlo meglio
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)))
Produzione:
[('Ciao', 'NNP'), ('Guru99', 'NNP'), (',', ','), ('Tu', 'PRP'), ('hai', 'VBP') , ('build', 'VBN'), ('a', 'DT'), ('molto', 'RB'), ('buono', 'JJ'), ('site', 'NN') , ('e', 'CC'), ('io', 'PRP'), ('amore', 'VBP'), ('visita', 'VBG'), ('tuo', 'PRP$' ), ('sito', 'NN'), ('.', '.')]
Spiegazione del codice:
- Codice per importare nltk (kit di strumenti per il linguaggio naturale che contiene sottomoduli come tokenize frase e tokenize parola).
- Testo i cui tag devono essere stampati.
- Tokenizzazione delle frasi
- Il ciclo For è implementato in cui le parole vengono tokenizzate dalla frase e il tag di ogni parola viene stampato come output.
In Corpus esistono due tipi di tagger POS:
- Basato su regole
- Tagger POS stocastici
1. Tagger POS basato su regole: Per le parole con significato ambiguo, si applica un approccio basato su regole basate sulle informazioni contestuali. Ciò avviene controllando o analizzando il significato della parola precedente o successiva. Le informazioni vengono analizzate dall'ambiente circostante la parola o al suo interno. Pertanto, le parole vengono contrassegnate dalle regole grammaticali di una lingua particolare, come l'uso delle maiuscole e la punteggiatura. Ad esempio, il tagger di Brill.
2. Tagger POS stocastico: Con questo metodo vengono applicati diversi approcci come la frequenza o la probabilità. Se una parola è per lo più contrassegnata con un particolare tag nel training set, nella frase di prova le verrà assegnato quel particolare tag. Il tag di parola dipende non solo dal proprio tag ma anche dal tag precedente. Questo metodo non è sempre accurato. Un altro modo è calcolare la probabilità che si verifichi un tag specifico in una frase. Pertanto il tag finale viene calcolato controllando la probabilità più alta di una parola con un particolare tag.
Etichettatura POS con modello Markov nascosto
I problemi di tagging possono anche essere modellati utilizzando HMM. Tratta i token di input come sequenze osservabili mentre i tag sono considerati come stati nascosti e l'obiettivo è determinare la sequenza degli stati nascosti. Per esempio x = x1,x2,…………,Xn dove x è una sequenza di token while y = y1,y2,y3,y4………sìnè la sequenza nascosta.
Come funziona il modello di Markov nascosto (HMM)?
HMM utilizza la distribuzione di join che è P(x, y) dove x è la sequenza di input/sequenza token e y è la sequenza di tag.
La sequenza di tag per x sarà argmaxy1….ynp(x1,x2,….xn,y1,y2,y3,…..). Abbiamo classificato i tag dal testo, ma le statistiche di tali tag sono vitali. Quindi la parte successiva consiste nel contare questi tag per lo studio statistico.
Sommario
- Tag POS NLTK è un processo per contrassegnare le parole in formato testo per una parte particolare di un discorso in base alla sua definizione e al contesto.
- Alcuni esempi di tag POS NLTK sono: CC, CD, EX, JJ, MD, NNP, PDT, PRP$, TO, ecc.
- Il tagger POS viene utilizzato per assegnare informazioni grammaticali a ciascuna parola della frase. L'installazione, l'importazione e il download di tutti i pacchetti di tagging di Part of Speech con NLTK sono completi.
- Il Chunking nella PNL è un processo per prendere piccoli pezzi di informazione e raggrupparli in grandi unità.
- Non esistono regole predefinite, ma è possibile combinarle a seconda delle necessità e delle necessità.
- La suddivisione in blocchi viene utilizzata per il rilevamento delle entità. Un'entità è quella parte della frase mediante la quale la macchina ottiene il valore per qualsiasi intenzione.
- Il Chunking viene utilizzato per classificare diversi token nello stesso blocco.