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