OpenNLP - Trovare parti del discorso

Utilizzando OpenNLP, puoi anche rilevare le parti del discorso di una determinata frase e stamparle. Invece del nome completo delle parti del discorso, OpenNLP utilizza forme brevi di ciascuna parte del discorso. La tabella seguente indica le varie parti dei discorsi rilevati da OpenNLP e il loro significato.

Parti del discorso Significato delle parti del discorso
NN Sostantivo, singolare o massa
DT Determinatore
VB Verbo, forma base
VBD Verbo, passato
VBZ Verbo, terza persona singolare presente
IN Preposizione o congiunzione subordinata
NNP Nome proprio, singolare
PER per
JJ Aggettivo

Contrassegnare le parti del discorso

Per contrassegnare le parti del discorso di una frase, OpenNLP utilizza un modello, un file denominato en-posmaxent.bin. Questo è un modello predefinito addestrato per etichettare le parti del discorso del testo grezzo dato.

Il POSTaggerME classe di opennlp.tools.postagpacchetto viene utilizzato per caricare questo modello e contrassegnare le parti del discorso del testo non elaborato specificato utilizzando la libreria OpenNLP. Per fare ciò, devi:

  • Carica il file en-pos-maxent.bin modello utilizzando il POSModel classe.

  • Istanziare il file POSTaggerME classe.

  • Tokenizza la frase.

  • Genera i tag usando tag() metodo.

  • Stampa i token e i tag utilizzando POSSample classe.

Di seguito sono riportati i passaggi da seguire per scrivere un programma che contrassegna le parti del discorso nel testo grezzo dato utilizzando il POSTaggerME classe.

Passaggio 1: carica il modello

Il modello per il tagging POS è rappresentato dalla classe denominata POSModel, che appartiene al pacchetto opennlp.tools.postag.

Per caricare un modello di tokenizer:

  • Creare un InputStream oggetto del modello (creare un'istanza di FileInputStream e passare il percorso del modello in formato String al suo costruttore).

  • Istanziare il file POSModel class e passare il InputStream (oggetto) del modello come parametro del suo costruttore, come mostrato nel seguente blocco di codice:

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

Passaggio 2: creazione di un'istanza della classe POSTaggerME

Il POSTaggerME classe del pacchetto opennlp.tools.postagviene utilizzato per prevedere le parti del discorso del testo grezzo specificato. Usa la massima entropia per prendere le sue decisioni.

Crea un'istanza di questa classe e passa l'oggetto modello creato nel passaggio precedente, come mostrato di seguito:

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

Passaggio 3: tokenizzazione della frase

Il tokenize() metodo del whitespaceTokenizerclass è usata per tokenizzare il testo grezzo che gli è stato passato. Questo metodo accetta una variabile String come parametro e restituisce un array di stringhe (token).

Istanziare il file whitespaceTokenizer class e invocano questo metodo passando il formato String della frase a questo metodo.

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

Passaggio 4: generazione dei tag

Il tag() metodo del whitespaceTokenizerclass assegna i tag POS alla frase dei token. Questo metodo accetta un array di token (String) come parametro e restituisce tag (array).

Invoca il file tag() passandogli i token generati nel passaggio precedente.

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

Passaggio 5: stampa dei token e dei tag

Il POSSampleclass rappresenta la frase con tag POS. Per istanziare questa classe, avremmo bisogno di un array di token (del testo) e di un array di tag.

Il toString()Il metodo di questa classe restituisce la frase contrassegnata. Creare un'istanza di questa classe passando il token e gli array di tag creati nei passaggi precedenti e richiamarlitoString() metodo, come mostrato nel seguente blocco di codice.

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

Example

Di seguito è riportato il programma che contrassegna le parti del discorso in un dato testo grezzo. Salva questo programma in un file con il nomePosTaggerExample.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()); 
   
   } 
}

Compilare ed eseguire il file Java salvato dal prompt dei comandi utilizzando i seguenti comandi:

javac PosTaggerExample.java 
java PosTaggerExample

All'esecuzione, il programma di cui sopra legge il testo dato e rileva le parti del discorso di queste frasi e le visualizza, come mostrato di seguito.

Hi_NNP welcome_JJ to_TO Tutorialspoint_VB

POS Tagger Performance

Di seguito è riportato il programma che contrassegna le parti del discorso di un dato testo grezzo. Inoltre monitora le prestazioni e mostra le prestazioni del tagger. Salva questo programma in un file con il nomePosTagger_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();      
   } 
}

Compilare ed eseguire il file Java salvato dal prompt dei comandi utilizzando i seguenti comandi:

javac PosTaggerExample.java 
java PosTaggerExample

All'esecuzione, il programma precedente legge il testo specificato e contrassegna le parti del discorso di queste frasi e le visualizza. Inoltre, monitora anche le prestazioni del tagger POS e le visualizza.

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

Probabilità di tagger POS

Il probs() metodo del POSTaggerME class viene utilizzata per trovare le probabilità per ogni tag della frase contrassegnata di recente.

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

Di seguito è riportato il programma che mostra le probabilità per ogni tag dell'ultima frase contrassegnata. Salva questo programma in un file con il nomePosTaggerProbs.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]); 
   } 
}

Compilare ed eseguire il file Java salvato dal prompt dei comandi utilizzando i seguenti comandi:

javac TokenizerMEProbs.java 
java TokenizerMEProbs

All'esecuzione, il programma precedente legge il testo grezzo dato, contrassegna le parti del discorso di ciascun token in esso e le visualizza. Inoltre, mostra anche le probabilità per ciascuna parte del discorso nella frase data, come mostrato di seguito.

Hi_NNP welcome_JJ to_TO Tutorialspoint_VB    
0.6416834779738033 
0.42983612874819177 
0.8584513635863117 
0.4394784478206072