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