OpenNLP - Recherche de parties de la parole

En utilisant OpenNLP, vous pouvez également détecter les parties du discours d'une phrase donnée et les imprimer. Au lieu du nom complet des parties du discours, OpenNLP utilise des formes courtes de chaque partie du discours. Le tableau suivant indique les différentes parties de discours détectées par OpenNLP et leur signification.

Parties du discours Signification des parties du discours
NN Nom, singulier ou masse
DT Déterminant
VB Verbe, forme de base
VBD Verbe, passé
VBZ Verbe, troisième personne du singulier présent
DANS Préposition ou conjonction subordonnée
NNP Nom propre, singulier
À à
JJ Adjectif

Marquer les parties du discours

Pour marquer les parties de discours d'une phrase, OpenNLP utilise un modèle, un fichier nommé en-posmaxent.bin. Il s'agit d'un modèle prédéfini qui est formé pour étiqueter les parties de discours du texte brut donné.

le POSTaggerME classe de la opennlp.tools.postagpackage est utilisé pour charger ce modèle et étiqueter les parties de discours du texte brut donné à l'aide de la bibliothèque OpenNLP. Pour ce faire, vous devez -

  • Chargez le en-pos-maxent.bin modèle utilisant le POSModel classe.

  • Instancier le POSTaggerME classe.

  • Tokenize la phrase.

  • Générez les balises en utilisant tag() méthode.

  • Imprimez les jetons et les balises en utilisant POSSample classe.

Voici les étapes à suivre pour écrire un programme qui marque les parties du discours dans le texte brut donné en utilisant le POSTaggerME classe.

Étape 1: Chargez le modèle

Le modèle de marquage POS est représenté par la classe nommée POSModel, qui appartient au package opennlp.tools.postag.

Pour charger un modèle de tokenizer -

  • Créé un InputStream objet du modèle (instanciez le FileInputStream et passez le chemin du modèle au format String à son constructeur).

  • Instancier le POSModel classe et passer le InputStream (objet) du modèle en tant que paramètre de son constructeur, comme indiqué dans le bloc de code suivant -

//Loading Parts of speech-maxent model 
InputStream inputStream = new FileInputStream("C:/OpenNLP_models/en-pos-maxent.bin"); 
POSModel model = new POSModel(inputStream);

Étape 2: instanciation de la classe POSTaggerME

le POSTaggerME classe du package opennlp.tools.postagest utilisé pour prédire les parties du discours du texte brut donné. Il utilise l'Entropie maximale pour prendre ses décisions.

Instanciez cette classe et transmettez l'objet modèle créé à l'étape précédente, comme illustré ci-dessous -

//Instantiating POSTaggerME class 
POSTaggerME tagger = new POSTaggerME(model);

Étape 3: Tokeniser la phrase

le tokenize() méthode de la whitespaceTokenizerclass est utilisé pour tokeniser le texte brut qui lui est passé. Cette méthode accepte une variable String comme paramètre et renvoie un tableau de Strings (jetons).

Instancier le whitespaceTokenizer class et invoquez cette méthode en passant le format String de la phrase à cette méthode.

//Tokenizing the sentence using WhitespaceTokenizer class  
WhitespaceTokenizer whitespaceTokenizer= WhitespaceTokenizer.INSTANCE; 
String[] tokens = whitespaceTokenizer.tokenize(sentence);

Étape 4: Générer les balises

le tag() méthode de la whitespaceTokenizerLa classe attribue des balises POS à la phrase des jetons. Cette méthode accepte un tableau de jetons (String) comme paramètre et retourne une balise (tableau).

Invoquez le tag() méthode en lui passant les jetons générés à l'étape précédente.

//Generating tags 
String[] tags = tagger.tag(tokens);

Étape 5: Impression des jetons et des balises

le POSSampleclass représente la phrase étiquetée POS. Pour instancier cette classe, nous aurions besoin d'un tableau de jetons (du texte) et d'un tableau de balises.

le toString()La méthode de cette classe renvoie la phrase balisée. Instanciez cette classe en passant le jeton et les tableaux de balises créés lors des étapes précédentes et appelez sontoString() méthode, comme indiqué dans le bloc de code suivant.

//Instantiating the POSSample class 
POSSample sample = new POSSample(tokens, tags); 
System.out.println(sample.toString());

Example

Voici le programme qui marque les parties du discours dans un texte brut donné. Enregistrez ce programme dans un fichier avec le nomPosTaggerExample.java.

import java.io.FileInputStream; 
import java.io.InputStream;  

import opennlp.tools.postag.POSModel; 
import opennlp.tools.postag.POSSample; 
import opennlp.tools.postag.POSTaggerME; 
import opennlp.tools.tokenize.WhitespaceTokenizer;  

public class PosTaggerExample { 
  
   public static void main(String args[]) throws Exception{ 
    
      //Loading Parts of speech-maxent model       
      InputStream inputStream = new 
         FileInputStream("C:/OpenNLP_models/en-pos-maxent.bin"); 
      POSModel model = new POSModel(inputStream); 
       
      //Instantiating POSTaggerME class 
      POSTaggerME tagger = new POSTaggerME(model); 
       
      String sentence = "Hi welcome to Tutorialspoint"; 
       
      //Tokenizing the sentence using WhitespaceTokenizer class  
      WhitespaceTokenizer whitespaceTokenizer= WhitespaceTokenizer.INSTANCE; 
      String[] tokens = whitespaceTokenizer.tokenize(sentence); 
       
      //Generating tags 
      String[] tags = tagger.tag(tokens);
      
      //Instantiating the POSSample class 
      POSSample sample = new POSSample(tokens, tags); 
      System.out.println(sample.toString()); 
   
   } 
}

Compilez et exécutez le fichier Java enregistré à partir de l'invite de commande à l'aide des commandes suivantes -

javac PosTaggerExample.java 
java PosTaggerExample

Lors de l'exécution, le programme ci-dessus lit le texte donné et détecte les parties du discours de ces phrases et les affiche, comme indiqué ci-dessous.

Hi_NNP welcome_JJ to_TO Tutorialspoint_VB

Performances du baliseur de point de vente

Voici le programme qui balise les parties du discours d'un texte brut donné. Il surveille également les performances et affiche les performances du marqueur. Enregistrez ce programme dans un fichier avec le nomPosTagger_Performance.java.

import java.io.FileInputStream; 
import java.io.InputStream;  

import opennlp.tools.cmdline.PerformanceMonitor; 
import opennlp.tools.postag.POSModel; 
import opennlp.tools.postag.POSSample; 
import opennlp.tools.postag.POSTaggerME; 
import opennlp.tools.tokenize.WhitespaceTokenizer;  

public class PosTagger_Performance { 
   public static void main(String args[]) throws Exception{ 
      //Loading Parts of speech-maxent model       
      InputStream inputStream = new 
         FileInputStream("C:/OpenNLP_models/en-pos-maxent.bin"); 
      POSModel model = new POSModel(inputStream); 
       
      //Creating an object of WhitespaceTokenizer class  
      WhitespaceTokenizer whitespaceTokenizer= WhitespaceTokenizer.INSTANCE; 
      
      //Tokenizing the sentence 
      String sentence = "Hi welcome to Tutorialspoint"; 
      String[] tokens = whitespaceTokenizer.tokenize(sentence); 
       
      //Instantiating POSTaggerME class 
      POSTaggerME tagger = new POSTaggerME(model); 
       
      //Generating tags 
      String[] tags = tagger.tag(tokens); 
       
      //Instantiating POSSample class       
      POSSample sample = new POSSample(tokens, tags); 
      System.out.println(sample.toString()); 
       
      //Monitoring the performance of POS tagger 
      PerformanceMonitor perfMon = new PerformanceMonitor(System.err, "sent"); 
      perfMon.start(); 
      perfMon.incrementCounter(); 
      perfMon.stopAndPrintFinalResult();      
   } 
}

Compilez et exécutez le fichier Java enregistré à partir de l'invite de commande à l'aide des commandes suivantes -

javac PosTaggerExample.java 
java PosTaggerExample

Lors de l'exécution, le programme ci-dessus lit le texte donné et marque les parties de discours de ces phrases et les affiche. En outre, il surveille également les performances de l'étiqueteur de point de vente et l'affiche.

Hi_NNP welcome_JJ to_TO Tutorialspoint_VB  
Average: 0.0 sent/s  
Total: 1 sent 
Runtime: 0.0s

Probabilité des étiqueteurs POS

le probs() méthode de la POSTaggerME class est utilisé pour trouver les probabilités pour chaque balise de la phrase récemment balisée.

//Getting the probabilities of the recent calls to tokenizePos() method 
double[] probs = detector.getSentenceProbabilities();

Voici le programme qui affiche les probabilités pour chaque étiquette de la dernière phrase étiquetée. Enregistrez ce programme dans un fichier avec le nomPosTaggerProbs.java.

import java.io.FileInputStream; 
import java.io.InputStream;  

import opennlp.tools.postag.POSModel; 
import opennlp.tools.postag.POSSample; 
import opennlp.tools.postag.POSTaggerME; 
import opennlp.tools.tokenize.WhitespaceTokenizer;  

public class PosTaggerProbs { 
   
   public static void main(String args[]) throws Exception{ 
      
      //Loading Parts of speech-maxent model       
      InputStream inputStream = new FileInputStream("C:/OpenNLP_mdl/en-pos-maxent.bin"); 
      POSModel model = new POSModel(inputStream); 
       
      //Creating an object of WhitespaceTokenizer class  
      WhitespaceTokenizer whitespaceTokenizer= WhitespaceTokenizer.INSTANCE; 
       
      //Tokenizing the sentence 
      String sentence = "Hi welcome to Tutorialspoint"; 
      String[] tokens = whitespaceTokenizer.tokenize(sentence); 
       
      //Instantiating POSTaggerME class 
      POSTaggerME tagger = new POSTaggerME(model); 
             
      //Generating tags 
      String[] tags = tagger.tag(tokens);       
      
      //Instantiating the POSSample class 
      POSSample sample = new POSSample(tokens, tags);  
      System.out.println(sample.toString());
      
      //Probabilities for each tag of the last tagged sentence. 
      double [] probs = tagger.probs();       
      System.out.println("  ");       
      
      //Printing the probabilities  
      for(int i = 0; i<probs.length; i++) 
         System.out.println(probs[i]); 
   } 
}

Compilez et exécutez le fichier Java enregistré à partir de l'invite de commande à l'aide des commandes suivantes -

javac TokenizerMEProbs.java 
java TokenizerMEProbs

Lors de l'exécution, le programme ci-dessus lit le texte brut donné, balise les parties de discours de chaque jeton qu'il contient et les affiche. En outre, il affiche également les probabilités pour chaque partie du discours dans la phrase donnée, comme indiqué ci-dessous.

Hi_NNP welcome_JJ to_TO Tutorialspoint_VB    
0.6416834779738033 
0.42983612874819177 
0.8584513635863117 
0.4394784478206072