Marquage POS avec NLTK et Chunking en NLP [EXEMPLES]

Balisage PDV

Balisage PDV (Parts of Speech Tagging) est un processus permettant de baliser les mots au format texte pour une partie particulière d'un discours en fonction de sa définition et de son contexte. Il est responsable de la lecture du texte dans une langue et de l'attribution d'un jeton spécifique (parties du discours) à chaque mot. On l’appelle aussi marquage grammatical.

Apprenons avec un exemple de partie du discours NLTK :

Entrées : Tout pour nous permettre.

Sortie : [('Tout', NN),('à', TO), ('permis', VB), ('nous', PRP)]

Étapes impliquées dans l'exemple de marquage POS

  • Tokeniser le texte (word_tokenize)
  • appliquer pos_tag à l'étape ci-dessus qui est nltk.pos_tag(tokenize_text)

Les exemples de balises NLTK POS sont les suivants :

Abréviation Sens
CC conjonction de coordination
CD chiffre cardinal
DT déterminant
EX existentiel là-bas
FW mot étranger
IN préposition/conjonction de subordination
JJ Cette balise NLTK POS est un adjectif (grand)
JJR adjectif, comparatif (plus grand)
JJS adjectif, superlatif (le plus grand)
LS marché de liste
MD modal (pourrait, voudra)
NN nom, singulier (chat, arbre)
NNS nom pluriel (bureaux)
PNN nom propre singulier (sarah)
NNPS nom propre, pluriel (indiens ou américains)
GMT prédéterminant (tous, les deux, la moitié)
POS terminaison possessive (parents)
PRP pronom personnel (elle, elle, lui, lui-même)
$PRP pronom possessif (elle, son, le mien, mon, notre)
RB adverbe (occasionnellement, rapidement)
RBR adverbe, comparatif (plus grand)
RBS adverbe, superlatif (le plus grand)
RP particule (environ)
À marqueur infini (vers)
UH interjection (au revoir)
VB verbe (demander)
VBG verbe gérondif (juger)
VDB verbe au passé (plaidé)
VBN participe passé du verbe (réunifié)
VBP verbe, au présent pas à la 3ème personne du singulier (wrap)
VBZ verbe, présent à la 3ème personne du singulier (bases)
WDT wh-déterminateur (ça, quoi)
WP quoi- pronom (qui)
WRB quoi- adverbe (comment)

La liste de balises NLTK POS ci-dessus contient toutes les balises NLTK POS. Le tagger NLTK POS est utilisé pour attribuer des informations grammaticales à chaque mot de la phrase. L'installation, l'importation et le téléchargement de tous les packages de POS NLTK sont terminés.

Qu’est-ce que le chunking en PNL ?

Regrouper en PNL, c'est un processus qui consiste à prendre de petites informations et à les regrouper en grandes unités. La principale utilisation du Chunking consiste à créer des groupes de « phrases nominales ». Il est utilisé pour ajouter de la structure à la phrase en suivant le balisage POS combiné à des expressions régulières. Le groupe de mots résultant est appelé « morceaux ». C'est ce qu'on appelle également l'analyse superficielle.

Dans l'analyse superficielle, il y a au maximum un niveau entre les racines et les feuilles, tandis que l'analyse profonde comprend plusieurs niveaux. L'analyse superficielle est également appelée analyse légère ou segmentation.

Règles de découpage

Il n’y a pas de règles prédéfinies, mais vous pouvez les combiner selon vos besoins et vos exigences.

Par exemple, vous devez étiqueter le nom, le verbe (passé), l'adjectif et la jonction de coordination de la phrase. Vous pouvez utiliser la règle comme ci-dessous

tronçon:{ * * * ?}

Le tableau suivant montre la signification des différents symboles :

Nom du symbole Description
. N'importe quel caractère sauf nouvelle ligne
* Faites correspondre 0 ou plusieurs répétitions
? Faites correspondre 0 ou 1 répétitions

Maintenant, écrivons le code pour mieux comprendre la règle

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)

Sortie :

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 conclusion du marquage de la partie du discours ci-dessus Python exemple : "make" est un verbe qui n'est pas inclus dans la règle, il n'est donc pas étiqueté comme mychunk

Cas d'utilisation du découpage

Le chunking est utilisé pour la détection d’entités. Une entité est la partie de la phrase par laquelle la machine obtient la valeur d'une intention.

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

En d’autres termes, le chunking est utilisé pour sélectionner les sous-ensembles de jetons. Veuillez suivre le code ci-dessous pour comprendre comment le chunking est utilisé pour sélectionner les jetons. Dans cet exemple, vous verrez le graphique qui correspondra à un morceau d’une phrase nominale. Nous allons écrire le code et dessiner le graphique pour une meilleure compréhension.

Code pour démontrer le cas d'utilisation

 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 

Sortie :

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

Graphique

Graphique de fragmentation des expressions nominales
Graphique de segmentation des phrases nominales

À partir du graphique, nous pouvons conclure que « learn » et « guru99 » sont deux jetons différents mais sont classés comme expression nominale alors que le jeton « from » n'appartient pas à l'expression nominale.

Le regroupement est utilisé pour classer différents jetons dans le même bloc. Le résultat dépendra de la grammaire choisie. En outre, le Chunking NLTK est utilisé pour baliser des modèles et explorer des corpus de texte.

COMPTAGE DES ÉTIQUETTES PLV

Nous avons discuté de divers pos_tag dans la section précédente. Dans ce didacticiel particulier, vous étudierez comment compter ces balises. Le comptage des balises est crucial pour la classification du texte ainsi que pour la préparation des fonctionnalités pour les opérations basées sur le langage naturel. Je discuterai avec vous de l'approche suivie par guru99 lors de la préparation du code ainsi que d'une discussion sur le résultat. J'espère que ceci vous aidera.

Comment compter les balises :

Ici, nous allons d’abord écrire du code fonctionnel, puis nous écrirons différentes étapes pour expliquer le code.

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)

Sortie :

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

Élaboration du code

COMPTAGE DES ÉTIQUETTES PLV

  1. Pour compter les tags, vous pouvez utiliser le package Counter du module de la collection. Un compteur est une sous-classe de dictionnaire qui fonctionne sur le principe du fonctionnement clé-valeur. Il s'agit d'une collection non ordonnée où les éléments sont stockés sous forme de clé de dictionnaire tandis que le nombre est leur valeur.
  2. Importez nltk qui contient des modules pour tokeniser le texte.
  3. Écrivez le texte dont vous souhaitez compter le pos_tag.
  4. Certains mots sont en majuscules et d'autres en minuscules, il convient donc de transformer tous les mots en minuscules avant d'appliquer la tokenisation.
  5. Passez les mots via word_tokenize depuis nltk.
  6. Calculer le pos_tag de chaque jeton
    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. Vient maintenant le rôle de compteur de dictionnaire. Nous avons importé dans la ligne de code 1. Les mots sont la clé et les balises sont la valeur et le compteur comptera le nombre total de chaque balise présente dans le texte.

Distribution de fréquence

La distribution de fréquence fait référence au nombre de fois où un résultat d'une expérience se produit. Il est utilisé pour trouver la fréquence de chaque mot apparaissant dans un document. Il utilise Classe FreqDist et défini par la nltk.probabilité module.

Une distribution de fréquence est généralement créée en comptant les échantillons issus de l'exécution répétée de l'expérience. Le nombre de comptes est incrémenté de un à chaque fois. Par exemple

freq_dist = FreqDist()

pour le jeton dans le document :

freq_dist.inc(token.type())

Pour n’importe quel mot, nous pouvons vérifier combien de fois il est apparu dans un document particulier. Par exemple

  1. Méthode de comptage : freq_dist.count('and')Cette expression renvoie la valeur du nombre de fois « et » s'est produit. C'est ce qu'on appelle la méthode du comptage.
  2. Méthode de fréquence : freq_dist.freq('and')Cette expression renvoie la fréquence d'un échantillon donné.

Nous allons écrire un petit programme et expliquer son fonctionnement en détail. Nous allons écrire du texte et calculer la distribution de fréquence de chaque mot dans le texte.

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

Distribution de fréquence

Explication du code:

  1. Importez le module nltk.
  2. Écrivez le texte dont vous devez trouver la répartition des mots.
  3. Tokenisez chaque mot du texte qui sert d'entrée au module FreqDist de nltk.
  4. Appliquer chaque mot à nlk.FreqDist sous forme de liste
  5. Tracez les mots dans le graphique en utilisant plot()

Veuillez visualiser le graphique pour une meilleure compréhension du texte écrit

Distribution de fréquence de chaque mot dans le graphique

Distribution de fréquence de chaque mot dans le graphique

REMARQUE : Vous devez avoir installé matplotlib pour voir le graphique ci-dessus

Observez le graphique ci-dessus. Cela correspond à compter l’occurrence de chaque mot dans le texte. Il aide à l'étude du texte et à la mise en œuvre d'une analyse sentimentale basée sur le texte. En un mot, on peut conclure que nltk dispose d'un module pour compter l'occurrence de chaque mot dans le texte, ce qui aide à préparer les statistiques des caractéristiques du langage naturel. Il joue un rôle important dans la recherche des mots-clés dans le texte. Vous pouvez également extraire le texte du pdf à l'aide de bibliothèques telles que extract, PyPDF2 et transmettre le texte à nlk.FreqDist.

Le terme clé est « tokeniser ». Après la tokenisation, il vérifie chaque mot dans un paragraphe ou un document texte donné pour déterminer le nombre de fois où il s'est produit. Vous n'avez pas besoin de la boîte à outils NLTK pour cela. Vous pouvez également le faire avec vos propres compétences en programmation Python. La boîte à outils NLTK fournit uniquement un code prêt à l'emploi pour les différentes opérations.

Compter chaque mot n’est peut-être pas très utile. Au lieu de cela, il faut se concentrer sur la collocation et les bigrammes qui traitent de nombreux mots par paire. Ces paires identifient des mots-clés utiles pour de meilleures fonctionnalités de langage naturel qui peuvent être transmises à la machine. Veuillez consulter ci-dessous leurs détails.

Collocations : bigrammes et trigrammes

Qu’est-ce que les collocations ?

Les collocations sont des paires de mots apparaissant ensemble plusieurs fois dans un document. Il est calculé en fonction du nombre de ces paires apparaissant ensemble par rapport au nombre total de mots du document.

Considérez le spectre électromagnétique avec des mots comme rayons ultraviolets, rayons infrarouges.

Les mots ultraviolet et rayons ne sont pas utilisés individuellement et peuvent donc être traités comme une colocalisation. Un autre exemple est le CT Scan. Nous ne disons pas CT et Scan séparément, et ils sont donc également traités comme une colocalisation.

On peut dire que trouver des collocations nécessite de calculer les fréquences des mots et leur apparition dans le contexte d'autres mots. Ces collections spécifiques de mots nécessitent un filtrage pour conserver les termes de contenu utiles. Chaque gramme de mots peut ensuite être noté selon une mesure d'association, pour déterminer la probabilité relative que chaque Ingram soit une collocation.

La colocalisation peut être classée en deux types :

  • Bigrammes ccombinaison de deux mots
  • Trigrammescombinaison de trois mots

Les bigrammes et les trigrammes fournissent des fonctionnalités plus significatives et utiles pour l'étape d'extraction de fonctionnalités. Ceux-ci sont particulièrement utiles dans l’analyse sentimentale basée sur du texte.

Exemple de code de bigrammes

import nltk

text = "Guru99 is a totally new kind of learning experience."
Tokens = nltk.word_tokenize(text)
output = list(nltk.bigrams(Tokens))
print(output)

Sortie :

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

Exemple de code de trigrammes

Parfois, il devient important de voir une paire de trois mots dans la phrase à des fins d'analyse statistique et de comptage de fréquence. Cela joue encore une fois un rôle crucial dans la formation PNL (fonctionnalités de traitement du langage naturel) ainsi que la prédiction sentimentale basée sur du texte.

Le même code est exécuté pour calculer les trigrammes.

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

Sortie :

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

Marquage des phrases

Le marquage de la phrase dans un sens plus large fait référence à l'ajout d'étiquettes du verbe, du nom, etc., en fonction du contexte de la phrase. L'identification des étiquettes POS est un processus compliqué. Ainsi, le marquage générique des POS n'est pas possible manuellement car certains mots peuvent avoir des significations différentes (ambiguës) selon la structure de la phrase. La conversion du texte sous forme de liste est une étape importante avant le balisage car chaque mot de la liste est bouclé et compté pour une balise particulière. Veuillez consulter le code ci-dessous pour mieux le comprendre

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

Sortie :

[('Bonjour', 'NNP'), ('Guru99', 'NNP'), (',', ','), ('Vous', 'PRP'), ('avez', 'VBP') , ('build', 'VBN'), ('a', 'DT'), ('très', 'RB'), ('bon', 'JJ'), ('site', 'NN') , ('et', 'CC'), ('Je', 'PRP'), ('amour', 'VBP'), ('visite', 'VBG'), ('votre', 'PRP$' ), ('site', 'NN'), ('.', '.')]

Marquage des phrases

Explication du code :

  1. Code pour importer nltk (boîte à outils en langage naturel qui contient des sous-modules tels que la tokenisation de phrases et la tokenisation de mots.)
  2. Texte dont les balises doivent être imprimées.
  3. Tokénisation des phrases
  4. La boucle For est implémentée où les mots sont tokenisés à partir de la phrase et la balise de chaque mot est imprimée en sortie.

Dans Corpus, il existe deux types de tagueurs POS :

  • Basé sur des règles
  • Étiqueteurs stochastiques POS

1. Étiqueteur de point de vente basé sur des règles : Pour les mots ayant une signification ambiguë, une approche basée sur des règles basées sur des informations contextuelles est appliquée. Cela se fait en vérifiant ou en analysant le sens du mot précédent ou suivant. L'information est analysée à partir de l'environnement du mot ou à l'intérieur de lui-même. Par conséquent, les mots sont marqués par les règles grammaticales d’une langue particulière, telles que les majuscules et la ponctuation. par exemple, le tagueur de Brill.

2. Étiqueteur stochastique de point de vente : Différentes approches telles que la fréquence ou la probabilité sont appliquées dans le cadre de cette méthode. Si un mot est principalement étiqueté avec une balise particulière dans l'ensemble d'apprentissage, alors dans la phrase de test, cette balise particulière lui est attribuée. La balise de mot dépend non seulement de sa propre balise mais également de la balise précédente. Cette méthode n'est pas toujours précise. Une autre façon consiste à calculer la probabilité d’apparition d’une balise spécifique dans une phrase. Ainsi, la balise finale est calculée en vérifiant la probabilité la plus élevée d'un mot avec une balise particulière.

Étiquetage POS avec le modèle de Markov caché

Les problèmes de marquage peuvent également être modélisés à l’aide de HMM. Il traite les jetons d'entrée comme une séquence observable tandis que les balises sont considérées comme des états cachés et l'objectif est de déterminer la séquence d'états cachés. Par exemple x = x1,x2,…………,Xn où x est une séquence de jetons tandis que y = y1,y2,y3,y4………ouinest la séquence cachée.

Comment fonctionne le modèle de Markov caché (HMM) ?

HMM utilise la distribution de jointure qui est P(x, y) où x est la séquence d'entrée/séquence de jetons et y est la séquence de balises.

La séquence de balises pour x sera argmaxy1….ynp(x1,x2,….xn,y1,y2,y3,…..). Nous avons catégorisé les balises du texte, mais les statistiques de ces balises sont vitales. La partie suivante consiste donc à compter ces balises pour une étude statistique.

Résumé

  • Marquage POS NLTK est un processus permettant de baliser les mots au format texte pour une partie particulière d'un discours en fonction de sa définition et de son contexte.
  • Voici quelques exemples de balisage NLTK POS : CC, CD, EX, JJ, MD, NNP, PDT, PRP$, TO, etc.
  • Le tagger POS est utilisé pour attribuer des informations grammaticales à chaque mot de la phrase. L'installation, l'importation et le téléchargement de tous les packages de marquage Part of Speech avec NLTK sont terminés.
  • Le découpage en PNL est un processus permettant de prendre de petites informations et de les regrouper en grandes unités.
  • Il n’y a pas de règles prédéfinies, mais vous pouvez les combiner selon vos besoins et vos exigences.
  • Le chunking est utilisé pour la détection d’entités. Une entité est la partie de la phrase par laquelle la machine obtient la valeur d'une intention.
  • Le regroupement est utilisé pour classer différents jetons dans le même bloc.