OpenNLP - Encontrando partes da fala
Usando o OpenNLP, você também pode detectar as partes da fala de uma determinada frase e imprimi-las. Em vez do nome completo das classes gramaticais, o OpenNLP usa formas curtas de cada classe gramatical. A tabela a seguir indica as diversas partes dos discursos detectados pelo OpenNLP e seus significados.
Partes do discurso | Significado da classe gramatical |
---|---|
NN | Substantivo, singular ou massa |
DT | Determinante |
VB | Verbo, forma básica |
VBD | Verbo, pretérito |
VBZ | Verbo, terceira pessoa do singular presente |
DENTRO | Preposição ou conjunção subordinada |
NNP | Nome próprio, singular |
PARA | para |
JJ | Adjetivo |
Marcando as partes da fala
Para marcar a classe gramatical de uma frase, o OpenNLP usa um modelo, um arquivo chamado en-posmaxent.bin. Este é um modelo predefinido que é treinado para marcar as classes gramaticais de um determinado texto bruto.
o POSTaggerME classe do opennlp.tools.postagpacote é usado para carregar este modelo e marcar a classe gramatical do texto bruto fornecido usando a biblioteca OpenNLP. Para fazer isso, você precisa -
Carregue o en-pos-maxent.bin modelo usando o POSModel classe.
Instancie o POSTaggerME classe.
Tokenize a frase.
Gere as tags usando tag() método.
Imprima os tokens e tags usando POSSample classe.
A seguir estão os passos a serem seguidos para escrever um programa que marca as partes do discurso no texto bruto fornecido usando o POSTaggerME classe.
Etapa 1: carregar o modelo
O modelo para marcação de POS é representado pela classe chamada POSModel, que pertence ao pacote opennlp.tools.postag.
Para carregar um modelo de tokenizer -
Criar um InputStream objeto do modelo (instancie o FileInputStream e passe o caminho do modelo no formato String para seu construtor).
Instancie o POSModel classe e passar no InputStream (objeto) do modelo como um parâmetro para seu construtor, conforme mostrado no seguinte bloco 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);
Etapa 2: instanciando a classe POSTaggerME
o POSTaggerME classe do pacote opennlp.tools.postagé usado para prever as classes gramaticais de um determinado texto bruto. Ele usa Entropia Máxima para tomar suas decisões.
Instancie esta classe e passe o objeto modelo criado na etapa anterior, conforme mostrado abaixo -
//Instantiating POSTaggerME class
POSTaggerME tagger = new POSTaggerME(model);
Etapa 3: tokenização da frase
o tokenize() método do whitespaceTokenizerclasse é usada para tokenizar o texto bruto passado a ela. Este método aceita uma variável String como parâmetro e retorna uma matriz de Strings (tokens).
Instancie o whitespaceTokenizer classe e invocar este método passando o formato String da frase para este método.
//Tokenizing the sentence using WhitespaceTokenizer class
WhitespaceTokenizer whitespaceTokenizer= WhitespaceTokenizer.INSTANCE;
String[] tokens = whitespaceTokenizer.tokenize(sentence);
Etapa 4: Gerando as tags
o tag() método do whitespaceTokenizerclasse atribui tags POS para a frase de tokens. Este método aceita um array de tokens (String) como parâmetro e retorna a tag (array).
Invoque o tag() método passando os tokens gerados na etapa anterior para ele.
//Generating tags
String[] tags = tagger.tag(tokens);
Etapa 5: imprimir os tokens e as tags
o POSSampleclasse representa a frase marcada com POS. Para instanciar essa classe, exigiríamos um array de tokens (do texto) e um array de tags.
o toString()método desta classe retorna a frase marcada. Instancie essa classe passando o token e as matrizes de tag criadas nas etapas anteriores e invoque seutoString() método, conforme mostrado no seguinte bloco de código.
//Instantiating the POSSample class
POSSample sample = new POSSample(tokens, tags);
System.out.println(sample.toString());
Example
A seguir está o programa que marca as classes gramaticais em um determinado texto bruto. Salve este programa em um arquivo com o 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());
}
}
Compile e execute o arquivo Java salvo no prompt de comando usando os seguintes comandos -
javac PosTaggerExample.java
java PosTaggerExample
Ao ser executado, o programa acima lê o texto fornecido e detecta as classes gramaticais dessas frases e as exibe, conforme mostrado abaixo.
Hi_NNP welcome_JJ to_TO Tutorialspoint_VB
Desempenho do POS Tagger
A seguir está o programa que marca as classes gramaticais de um determinado texto bruto. Ele também monitora o desempenho e exibe o desempenho do tagger. Salve este programa em um arquivo com o 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();
}
}
Compile e execute o arquivo Java salvo no prompt de comando usando os seguintes comandos -
javac PosTaggerExample.java
java PosTaggerExample
Na execução, o programa acima lê o texto fornecido, marca as classes gramaticais dessas frases e as exibe. Além disso, ele também monitora o desempenho do tagger POS e o exibe.
Hi_NNP welcome_JJ to_TO Tutorialspoint_VB
Average: 0.0 sent/s
Total: 1 sent
Runtime: 0.0s
Probabilidade POS Tagger
o probs() método do POSTaggerME classe é usada para encontrar as probabilidades para cada tag da frase recentemente marcada.
//Getting the probabilities of the recent calls to tokenizePos() method
double[] probs = detector.getSentenceProbabilities();
A seguir está o programa que exibe as probabilidades para cada tag da última frase marcada. Salve este programa em um arquivo com o 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]);
}
}
Compile e execute o arquivo Java salvo no prompt de comando usando os seguintes comandos -
javac TokenizerMEProbs.java
java TokenizerMEProbs
Ao ser executado, o programa acima lê o texto bruto fornecido, marca as classes gramaticais de cada token nele e os exibe. Além disso, ele também exibe as probabilidades para cada classe de palavras na frase dada, conforme mostrado abaixo.
Hi_NNP welcome_JJ to_TO Tutorialspoint_VB
0.6416834779738033
0.42983612874819177
0.8584513635863117
0.4394784478206072