OpenNLP - Tokenização
O processo de cortar a frase dada em partes menores (tokens) é conhecido como tokenization. Em geral, o texto bruto fornecido é marcado com base em um conjunto de delimitadores (principalmente espaços em branco).
A tokenização é usada em tarefas como verificação ortográfica, processamento de pesquisas, identificação de classes gramaticais, detecção de frases, classificação de documentos, etc.
Tokenização usando OpenNLP
o opennlp.tools.tokenize pacote contém as classes e interfaces que são usadas para realizar a tokenização.
Para tokenizar as frases fornecidas em fragmentos mais simples, a biblioteca OpenNLP oferece três classes diferentes -
SimpleTokenizer - Esta classe simboliza o texto bruto fornecido usando classes de caracteres.
WhitespaceTokenizer - Esta classe usa espaços em branco para tokenizar o texto fornecido.
TokenizerME- Esta classe converte texto bruto em tokens separados. Ele usa Entropia Máxima para tomar suas decisões.
SimpleTokenizer
Para tokenizar uma frase usando o SimpleTokenizer classe, você precisa -
Crie um objeto da respectiva classe.
Tokenize a frase usando o tokenize() método.
Imprima os tokens.
A seguir estão os passos a serem seguidos para escrever um programa que tokenize o texto bruto fornecido.
Step 1 - Instanciando a respectiva classe
Em ambas as classes, não há construtores disponíveis para instanciá-los. Portanto, precisamos criar objetos dessas classes usando a variável estáticaINSTANCE.
SimpleTokenizer tokenizer = SimpleTokenizer.INSTANCE;
Step 2 - Tokenizar as frases
Ambas as classes contêm um método chamado tokenize(). Este método aceita um texto bruto no formato String. Ao invocar, ele simboliza a String fornecida e retorna uma matriz de Strings (tokens).
Tokenize a frase usando o tokenizer() método conforme mostrado abaixo.
//Tokenizing the given sentence
String tokens[] = tokenizer.tokenize(sentence);
Step 3 - Imprima os tokens
Depois de tokenizar a frase, você pode imprimir os tokens usando for loop, como mostrado abaixo.
//Printing the tokens
for(String token : tokens)
System.out.println(token);
Example
A seguir está o programa que simboliza a frase fornecida usando a classe SimpleTokenizer. Salve este programa em um arquivo com o nomeSimpleTokenizerExample.java.
import opennlp.tools.tokenize.SimpleTokenizer;
public class SimpleTokenizerExample {
public static void main(String args[]){
String sentence = "Hi. How are you? Welcome to Tutorialspoint. "
+ "We provide free tutorials on various technologies";
//Instantiating SimpleTokenizer class
SimpleTokenizer simpleTokenizer = SimpleTokenizer.INSTANCE;
//Tokenizing the given sentence
String tokens[] = simpleTokenizer.tokenize(sentence);
//Printing the tokens
for(String token : tokens) {
System.out.println(token);
}
}
}
Compile e execute o arquivo Java salvo no prompt de comando usando os seguintes comandos -
javac SimpleTokenizerExample.java
java SimpleTokenizerExample
Ao ser executado, o programa acima lê a string fornecida (texto bruto), transforma-a em token e exibe a seguinte saída -
Hi
.
How
are
you
?
Welcome
to
Tutorialspoint
.
We
provide
free
tutorials
on
various
technologies
WhitespaceTokenizer
Para tokenizar uma frase usando o WhitespaceTokenizer classe, você precisa -
Crie um objeto da respectiva classe.
Tokenize a frase usando o tokenize() método.
Imprima os tokens.
A seguir estão os passos a serem seguidos para escrever um programa que tokenize o texto bruto fornecido.
Step 1 - Instanciando a respectiva classe
Em ambas as classes, não há construtores disponíveis para instanciá-los. Portanto, precisamos criar objetos dessas classes usando a variável estáticaINSTANCE.
WhitespaceTokenizer tokenizer = WhitespaceTokenizer.INSTANCE;
Step 2 - Tokenizar as frases
Ambas as classes contêm um método chamado tokenize(). Este método aceita um texto bruto no formato String. Ao invocar, ele simboliza a String fornecida e retorna uma matriz de Strings (tokens).
Tokenize a frase usando o tokenizer() método conforme mostrado abaixo.
//Tokenizing the given sentence
String tokens[] = tokenizer.tokenize(sentence);
Step 3 - Imprima os tokens
Depois de tokenizar a frase, você pode imprimir os tokens usando for loop, como mostrado abaixo.
//Printing the tokens
for(String token : tokens)
System.out.println(token);
Example
A seguir está o programa que simboliza a frase dada usando o WhitespaceTokenizerclasse. Salve este programa em um arquivo com o nomeWhitespaceTokenizerExample.java.
import opennlp.tools.tokenize.WhitespaceTokenizer;
public class WhitespaceTokenizerExample {
public static void main(String args[]){
String sentence = "Hi. How are you? Welcome to Tutorialspoint. "
+ "We provide free tutorials on various technologies";
//Instantiating whitespaceTokenizer class
WhitespaceTokenizer whitespaceTokenizer = WhitespaceTokenizer.INSTANCE;
//Tokenizing the given paragraph
String tokens[] = whitespaceTokenizer.tokenize(sentence);
//Printing the tokens
for(String token : tokens)
System.out.println(token);
}
}
Compile e execute o arquivo Java salvo no prompt de comando usando os seguintes comandos -
javac WhitespaceTokenizerExample.java
java WhitespaceTokenizerExample
Ao ser executado, o programa acima lê a string fornecida (texto bruto), transforma-a em token e exibe a seguinte saída.
Hi.
How
are
you?
Welcome
to
Tutorialspoint.
We
provide
free
tutorials
on
various
technologies
Classe TokenizerME
O OpenNLP também usa um modelo predefinido, um arquivo denominado de-token.bin, para tokenizar as frases. Ele é treinado para tokenizar as sentenças em um determinado texto bruto.
o TokenizerME classe do opennlp.tools.tokenizerpacote é usado para carregar este modelo e tokenizar o texto bruto fornecido usando a biblioteca OpenNLP. Para fazer isso, você precisa -
Carregue o en-token.bin modelo usando o TokenizerModel classe.
Instancie o TokenizerME classe.
Tokenize as frases usando o tokenize() método desta classe.
A seguir estão os passos a serem seguidos para escrever um programa que tokenizar as sentenças do texto bruto fornecido usando o TokenizerME classe.
Step 1 - Carregando o modelo
O modelo de tokenização é representado pela classe chamada TokenizerModel, que pertence ao pacote opennlp.tools.tokenize.
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 TokenizerModel classe e passar no InputStream (objeto) do modelo como um parâmetro para seu construtor, conforme mostrado no bloco de código a seguir.
//Loading the Tokenizer model
InputStream inputStream = new FileInputStream("C:/OpenNLP_models/en-token.bin");
TokenizerModel tokenModel = new TokenizerModel(inputStream);
Step 2 - Instanciando a classe TokenizerME
o TokenizerME classe do pacote opennlp.tools.tokenizecontém métodos para dividir o texto bruto em partes menores (tokens). 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 the TokenizerME class
TokenizerME tokenizer = new TokenizerME(tokenModel);
Step 3 - Tokenização da frase
o tokenize() método do TokenizerMEclasse é 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).
Chame este método passando o formato String da frase para este método, como segue.
//Tokenizing the given raw text
String tokens[] = tokenizer.tokenize(paragraph);
Example
A seguir está o programa que simboliza o texto bruto fornecido. Salve este programa em um arquivo com o nomeTokenizerMEExample.java.
import java.io.FileInputStream;
import java.io.InputStream;
import opennlp.tools.tokenize.TokenizerME;
import opennlp.tools.tokenize.TokenizerModel;
public class TokenizerMEExample {
public static void main(String args[]) throws Exception{
String sentence = "Hi. How are you? Welcome to Tutorialspoint. "
+ "We provide free tutorials on various technologies";
//Loading the Tokenizer model
InputStream inputStream = new FileInputStream("C:/OpenNLP_models/en-token.bin");
TokenizerModel tokenModel = new TokenizerModel(inputStream);
//Instantiating the TokenizerME class
TokenizerME tokenizer = new TokenizerME(tokenModel);
//Tokenizing the given raw text
String tokens[] = tokenizer.tokenize(sentence);
//Printing the tokens
for (String a : tokens)
System.out.println(a);
}
}
Compile e execute o arquivo Java salvo no prompt de comando usando os seguintes comandos -
javac TokenizerMEExample.java
java TokenizerMEExample
Ao ser executado, o programa acima lê a string fornecida e detecta as sentenças nela e exibe a seguinte saída -
Hi
.
How
are
you
?
Welcome
to
Tutorialspoint
.
We
provide
free
tutorials
on
various
technologie
Recuperando as posições dos tokens
Também podemos obter as posições ou spans dos tokens usando o tokenizePos()método. Este é o método da interface Tokenizer do pacoteopennlp.tools.tokenize. Uma vez que todas as (três) classes de Tokenizer implementam essa interface, você pode encontrar esse método em todas elas.
Este método aceita a frase ou texto bruto na forma de uma string e retorna uma matriz de objetos do tipo Span.
Você pode obter as posições dos tokens usando o tokenizePos() método, como segue -
//Retrieving the tokens
tokenizer.tokenizePos(sentence);
Imprimindo as posições (spans)
A classe chamada Span do opennlp.tools.util pacote é usado para armazenar o inteiro inicial e final dos conjuntos.
Você pode armazenar os vãos retornados pelo tokenizePos() na matriz Span e imprima-os, conforme mostrado no bloco de código a seguir.
//Retrieving the tokens
Span[] tokens = tokenizer.tokenizePos(sentence);
//Printing the spans of tokens
for( Span token : tokens)
System.out.println(token);
Imprimir tokens e suas posições juntos
o substring() método da classe String aceita o begin e a enddesloca e retorna a respectiva string. Podemos usar esse método para imprimir os tokens e seus intervalos (posições) juntos, conforme mostrado no bloco de código a seguir.
//Printing the spans of tokens
for(Span token : tokens)
System.out.println(token +" "+sent.substring(token.getStart(), token.getEnd()));
Example(SimpleTokenizer)
A seguir está o programa que recupera as extensões de token do texto bruto usando o SimpleTokenizerclasse. Ele também imprime os tokens junto com suas posições. Salve este programa em um arquivo com o nomeSimpleTokenizerSpans.java.
import opennlp.tools.tokenize.SimpleTokenizer;
import opennlp.tools.util.Span;
public class SimpleTokenizerSpans {
public static void main(String args[]){
String sent = "Hi. How are you? Welcome to Tutorialspoint. "
+ "We provide free tutorials on various technologies";
//Instantiating SimpleTokenizer class
SimpleTokenizer simpleTokenizer = SimpleTokenizer.INSTANCE;
//Retrieving the boundaries of the tokens
Span[] tokens = simpleTokenizer.tokenizePos(sent);
//Printing the spans of tokens
for( Span token : tokens)
System.out.println(token +" "+sent.substring(token.getStart(), token.getEnd()));
}
}
Compile e execute o arquivo Java salvo no prompt de comando usando os seguintes comandos -
javac SimpleTokenizerSpans.java
java SimpleTokenizerSpans
Ao ser executado, o programa acima lê a string fornecida (texto bruto), transforma-a em token e exibe a seguinte saída -
[0..2) Hi
[2..3) .
[4..7) How
[8..11) are
[12..15) you
[15..16) ?
[17..24) Welcome
[25..27) to
[28..42) Tutorialspoint
[42..43) .
[44..46) We
[47..54) provide
[55..59) free
[60..69) tutorials
[70..72) on
[73..80) various
[81..93) technologies
Example (WhitespaceTokenizer)
A seguir está o programa que recupera as extensões de token do texto bruto usando o WhitespaceTokenizerclasse. Ele também imprime os tokens junto com suas posições. Salve este programa em um arquivo com o nomeWhitespaceTokenizerSpans.java.
import opennlp.tools.tokenize.WhitespaceTokenizer;
import opennlp.tools.util.Span;
public class WhitespaceTokenizerSpans {
public static void main(String args[]){
String sent = "Hi. How are you? Welcome to Tutorialspoint. "
+ "We provide free tutorials on various technologies";
//Instantiating SimpleTokenizer class
WhitespaceTokenizer whitespaceTokenizer = WhitespaceTokenizer.INSTANCE;
//Retrieving the tokens
Span[] tokens = whitespaceTokenizer.tokenizePos(sent);
//Printing the spans of tokens
for( Span token : tokens)
System.out.println(token +"
"+sent.substring(token.getStart(), token.getEnd()));
}
}
Compile e execute o arquivo java salvo a partir do prompt de comando usando os seguintes comandos
javac WhitespaceTokenizerSpans.java
java WhitespaceTokenizerSpans
Ao ser executado, o programa acima lê a string fornecida (texto bruto), transforma-a em token e exibe a seguinte saída.
[0..3) Hi.
[4..7) How
[8..11) are
[12..16) you?
[17..24) Welcome
[25..27) to
[28..43) Tutorialspoint.
[44..46) We
[47..54) provide
[55..59) free
[60..69) tutorials
[70..72) on
[73..80) various
[81..93) technologies
Example (TokenizerME)
A seguir está o programa que recupera as extensões de token do texto bruto usando o TokenizerMEclasse. Ele também imprime os tokens junto com suas posições. Salve este programa em um arquivo com o nomeTokenizerMESpans.java.
import java.io.FileInputStream;
import java.io.InputStream;
import opennlp.tools.tokenize.TokenizerME;
import opennlp.tools.tokenize.TokenizerModel;
import opennlp.tools.util.Span;
public class TokenizerMESpans {
public static void main(String args[]) throws Exception{
String sent = "Hello John how are you welcome to Tutorialspoint";
//Loading the Tokenizer model
InputStream inputStream = new FileInputStream("C:/OpenNLP_models/en-token.bin");
TokenizerModel tokenModel = new TokenizerModel(inputStream);
//Instantiating the TokenizerME class
TokenizerME tokenizer = new TokenizerME(tokenModel);
//Retrieving the positions of the tokens
Span tokens[] = tokenizer.tokenizePos(sent);
//Printing the spans of tokens
for(Span token : tokens)
System.out.println(token +" "+sent.substring(token.getStart(), token.getEnd()));
}
}
Compile e execute o arquivo Java salvo no prompt de comando usando os seguintes comandos -
javac TokenizerMESpans.java
java TokenizerMESpans
Ao ser executado, o programa acima lê a string fornecida (texto bruto), transforma-a em token e exibe a seguinte saída -
[0..5) Hello
[6..10) John
[11..14) how
[15..18) are
[19..22) you
[23..30) welcome
[31..33) to
[34..48) Tutorialspoint
Probabilidade de Tokenizer
O método getTokenProbabilities () da classe TokenizerME é usado para obter as probabilidades associadas às chamadas mais recentes para o método tokenizePos ().
//Getting the probabilities of the recent calls to tokenizePos() method
double[] probs = detector.getSentenceProbabilities();
A seguir está o programa para imprimir as probabilidades associadas às chamadas para o método tokenizePos (). Salve este programa em um arquivo com o nomeTokenizerMEProbs.java.
import java.io.FileInputStream;
import java.io.InputStream;
import opennlp.tools.tokenize.TokenizerME;
import opennlp.tools.tokenize.TokenizerModel;
import opennlp.tools.util.Span;
public class TokenizerMEProbs {
public static void main(String args[]) throws Exception{
String sent = "Hello John how are you welcome to Tutorialspoint";
//Loading the Tokenizer model
InputStream inputStream = new FileInputStream("C:/OpenNLP_models/en-token.bin");
TokenizerModel tokenModel = new TokenizerModel(inputStream);
//Instantiating the TokenizerME class
TokenizerME tokenizer = new TokenizerME(tokenModel);
//Retrieving the positions of the tokens
Span tokens[] = tokenizer.tokenizePos(sent);
//Getting the probabilities of the recent calls to tokenizePos() method
double[] probs = tokenizer.getTokenProbabilities();
//Printing the spans of tokens
for(Span token : tokens)
System.out.println(token +" "+sent.substring(token.getStart(), token.getEnd()));
System.out.println(" ");
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ê a String fornecida, transforma as frases em token e as imprime. Além disso, ele também retorna as probabilidades associadas às chamadas mais recentes para o método tokenizerPos ().
[0..5) Hello
[6..10) John
[11..14) how
[15..18) are
[19..22) you
[23..30) welcome
[31..33) to
[34..48) Tutorialspoint
1.0
1.0
1.0
1.0
1.0
1.0
1.0
1.0