OpenNLP - Encontrar partes del habla

Con OpenNLP, también puede detectar las partes del habla de una oración determinada e imprimirlas. En lugar del nombre completo de las partes del discurso, OpenNLP usa formas cortas de cada parte del discurso. La siguiente tabla indica las distintas partes de los discursos detectados por OpenNLP y sus significados.

Partes de la oración Significado de las partes del discurso
NN Sustantivo, singular o masa
DT Determinante
VB Verbo, forma base
VBD Verbo, pasado
VBZ Verbo, presente en tercera persona del singular
EN Preposición o conjunción subordinante
NNP Nombre propio, singular
A a
JJ Adjetivo

Etiquetar las partes del habla

Para etiquetar las partes del discurso de una oración, OpenNLP usa un modelo, un archivo llamado en-posmaxent.bin. Este es un modelo predefinido que está entrenado para etiquetar las partes de la oración del texto sin formato dado.

los POSTaggerME clase de la opennlp.tools.postagEl paquete se utiliza para cargar este modelo y etiquetar las partes de la oración del texto sin formato dado utilizando la biblioteca OpenNLP. Para hacerlo, necesita:

  • Carga el en-pos-maxent.bin modelo usando el POSModel clase.

  • Instancia del POSTaggerME clase.

  • Tokeniza la oración.

  • Genere las etiquetas usando tag() método.

  • Imprima los tokens y etiquetas usando POSSample clase.

A continuación se muestran los pasos que se deben seguir para escribir un programa que etiquete las partes del discurso en el texto sin procesar dado usando el POSTaggerME clase.

Paso 1: carga el modelo

El modelo de etiquetado POS está representado por la clase denominada POSModel, que pertenece al paquete opennlp.tools.postag.

Para cargar un modelo de tokenizador:

  • Crear un InputStream objeto del modelo (Cree una instancia de FileInputStream y pase la ruta del modelo en formato String a su constructor).

  • Instancia del POSModel clase y pasar el InputStream (objeto) del modelo como un parámetro para su constructor, como se muestra en el siguiente bloque de código:

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

Paso 2: instanciar la clase POSTaggerME

los POSTaggerME clase del paquete opennlp.tools.postagse utiliza para predecir las partes gramaticales de un texto sin formato dado. Utiliza la máxima entropía para tomar sus decisiones.

Cree una instancia de esta clase y pase el objeto modelo creado en el paso anterior, como se muestra a continuación:

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

Paso 3: Tokenizar la oración

los tokenize() método del whitespaceTokenizerLa clase se usa para tokenizar el texto sin procesar que se le pasa. Este método acepta una variable de cadena como parámetro y devuelve una matriz de cadenas (tokens).

Instancia del whitespaceTokenizer class e invocar este método pasando el formato String de la oración a este método.

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

Paso 4: generar las etiquetas

los tag() método del whitespaceTokenizerclass asigna etiquetas POS a la oración de tokens. Este método acepta una matriz de tokens (String) como parámetro y devuelve una etiqueta (matriz).

Invocar el tag() método pasándole los tokens generados en el paso anterior.

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

Paso 5: imprimir los tokens y las etiquetas

los POSSampleclass representa la oración con etiqueta POS. Para instanciar esta clase, necesitaríamos una matriz de tokens (del texto) y una matriz de etiquetas.

los toString()El método de esta clase devuelve la oración etiquetada. Cree una instancia de esta clase pasando el token y las matrices de etiquetas creadas en los pasos anteriores e invoque sutoString() método, como se muestra en el siguiente bloque de código.

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

Example

A continuación se muestra el programa que etiqueta las partes del discurso en un texto en bruto determinado. Guarde este programa en un archivo con el nombrePosTaggerExample.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()); 
   
   } 
}

Compile y ejecute el archivo Java guardado desde el símbolo del sistema utilizando los siguientes comandos:

javac PosTaggerExample.java 
java PosTaggerExample

Al ejecutarse, el programa anterior lee el texto dado y detecta las partes del habla de estas oraciones y las muestra, como se muestra a continuación.

Hi_NNP welcome_JJ to_TO Tutorialspoint_VB

Rendimiento del etiquetador POS

A continuación se muestra el programa que etiqueta las partes del discurso de un texto en bruto determinado. También monitorea el desempeño y muestra el desempeño del etiquetador. Guarde este programa en un archivo con el nombrePosTagger_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();      
   } 
}

Compile y ejecute el archivo Java guardado desde el símbolo del sistema utilizando los siguientes comandos:

javac PosTaggerExample.java 
java PosTaggerExample

Al ejecutarse, el programa anterior lee el texto dado, etiqueta las partes del discurso de estas oraciones y las muestra. Además, también supervisa el rendimiento del etiquetador POS y lo muestra.

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

Probabilidad de etiquetado POS

los probs() método del POSTaggerME class se usa para encontrar las probabilidades de cada etiqueta de la oración etiquetada recientemente.

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

A continuación se muestra el programa que muestra las probabilidades de cada etiqueta de la última oración etiquetada. Guarde este programa en un archivo con el nombrePosTaggerProbs.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]); 
   } 
}

Compile y ejecute el archivo Java guardado desde el símbolo del sistema utilizando los siguientes comandos:

javac TokenizerMEProbs.java 
java TokenizerMEProbs

Al ejecutarse, el programa anterior lee el texto en bruto dado, etiqueta las partes del habla de cada token que contiene y las muestra. Además, también muestra las probabilidades para cada parte del discurso en la oración dada, como se muestra a continuación.

Hi_NNP welcome_JJ to_TO Tutorialspoint_VB    
0.6416834779738033 
0.42983612874819177 
0.8584513635863117 
0.4394784478206072