OpenNLP - Tokenización
El proceso de dividir la oración dada en partes más pequeñas (fichas) se conoce como tokenization. En general, el texto sin formato proporcionado se tokeniza en función de un conjunto de delimitadores (principalmente espacios en blanco).
La tokenización se utiliza en tareas como revisión ortográfica, procesamiento de búsquedas, identificación de partes del discurso, detección de oraciones, clasificación de documentos, etc.
Tokenización usando OpenNLP
los opennlp.tools.tokenize El paquete contiene las clases y las interfaces que se utilizan para realizar la tokenización.
Para convertir las oraciones dadas en fragmentos más simples, la biblioteca OpenNLP proporciona tres clases diferentes:
SimpleTokenizer - Esta clase tokeniza el texto sin formato dado usando clases de caracteres.
WhitespaceTokenizer - Esta clase usa espacios en blanco para tokenizar el texto dado.
TokenizerME- Esta clase convierte el texto sin formato en tokens separados. Utiliza la máxima entropía para tomar sus decisiones.
SimpleTokenizer
Para tokenizar una oración usando el SimpleTokenizer clase, necesitas -
Crea un objeto de la clase respectiva.
Tokeniza la oración usando el tokenize() método.
Imprime las fichas.
A continuación se muestran los pasos a seguir para escribir un programa que tokenice el texto sin formato dado.
Step 1 - Instanciar la clase respectiva
En ambas clases, no hay constructores disponibles para instanciarlos. Por lo tanto, necesitamos crear objetos de estas clases usando la variable estáticaINSTANCE.
SimpleTokenizer tokenizer = SimpleTokenizer.INSTANCE;
Step 2 - Tokenizar las oraciones
Ambas clases contienen un método llamado tokenize(). Este método acepta un texto sin formato en formato String. Al invocar, tokeniza la cadena dada y devuelve una matriz de cadenas (tokens).
Tokeniza la oración usando el tokenizer() método como se muestra a continuación.
//Tokenizing the given sentence
String tokens[] = tokenizer.tokenize(sentence);
Step 3 - Imprime las fichas
Después de tokenizar la oración, puede imprimir los tokens usando for loop, Como se muestra abajo.
//Printing the tokens
for(String token : tokens)
System.out.println(token);
Example
A continuación se muestra el programa que tokeniza la oración dada usando la clase SimpleTokenizer. Guarde este programa en un archivo con el nombreSimpleTokenizerExample.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 y ejecute el archivo Java guardado desde el símbolo del sistema utilizando los siguientes comandos:
javac SimpleTokenizerExample.java
java SimpleTokenizerExample
Al ejecutarse, el programa anterior lee la cadena dada (texto sin formato), la tokeniza y muestra la siguiente salida:
Hi
.
How
are
you
?
Welcome
to
Tutorialspoint
.
We
provide
free
tutorials
on
various
technologies
WhitespaceTokenizer
Para tokenizar una oración usando el WhitespaceTokenizer clase, necesitas -
Crea un objeto de la clase respectiva.
Tokeniza la oración usando el tokenize() método.
Imprime las fichas.
A continuación se muestran los pasos a seguir para escribir un programa que tokenice el texto sin formato dado.
Step 1 - Instanciar la clase respectiva
En ambas clases, no hay constructores disponibles para instanciarlos. Por lo tanto, necesitamos crear objetos de estas clases usando la variable estáticaINSTANCE.
WhitespaceTokenizer tokenizer = WhitespaceTokenizer.INSTANCE;
Step 2 - Tokenizar las oraciones
Ambas clases contienen un método llamado tokenize(). Este método acepta un texto sin formato en formato String. Al invocar, tokeniza la cadena dada y devuelve una matriz de cadenas (tokens).
Tokeniza la oración usando el tokenizer() método como se muestra a continuación.
//Tokenizing the given sentence
String tokens[] = tokenizer.tokenize(sentence);
Step 3 - Imprime las fichas
Después de tokenizar la oración, puede imprimir los tokens usando for loop, Como se muestra abajo.
//Printing the tokens
for(String token : tokens)
System.out.println(token);
Example
A continuación se muestra el programa que tokeniza la oración dada usando el WhitespaceTokenizerclase. Guarde este programa en un archivo con el nombreWhitespaceTokenizerExample.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 y ejecute el archivo Java guardado desde el símbolo del sistema utilizando los siguientes comandos:
javac WhitespaceTokenizerExample.java
java WhitespaceTokenizerExample
Al ejecutarse, el programa anterior lee la cadena dada (texto sin formato), la tokeniza y muestra la siguiente salida.
Hi.
How
are
you?
Welcome
to
Tutorialspoint.
We
provide
free
tutorials
on
various
technologies
Clase TokenizerME
OpenNLP también usa un modelo predefinido, un archivo llamado de-token.bin, para tokenizar las oraciones. Está entrenado para convertir las oraciones en un texto sin formato determinado.
los TokenizerME clase de la opennlp.tools.tokenizerEl paquete se usa para cargar este modelo y tokenizar el texto sin procesar dado usando la biblioteca OpenNLP. Para hacerlo, necesita:
Carga el en-token.bin modelo usando el TokenizerModel clase.
Instancia del TokenizerME clase.
Tokenize las oraciones usando el tokenize() método de esta clase.
A continuación se muestran los pasos a seguir para escribir un programa que tokenice las oraciones del texto en bruto dado utilizando TokenizerME clase.
Step 1 - Cargando el modelo
El modelo de tokenización está representado por la clase denominada TokenizerModel, que pertenece al paquete opennlp.tools.tokenize.
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 TokenizerModel clase y pasar el InputStream (objeto) del modelo como parámetro para su constructor, como se muestra en el siguiente bloque de código.
//Loading the Tokenizer model
InputStream inputStream = new FileInputStream("C:/OpenNLP_models/en-token.bin");
TokenizerModel tokenModel = new TokenizerModel(inputStream);
Step 2 - Creación de instancias de la clase TokenizerME
los TokenizerME clase del paquete opennlp.tools.tokenizecontiene métodos para cortar el texto sin procesar en partes más pequeñas (tokens). 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 the TokenizerME class
TokenizerME tokenizer = new TokenizerME(tokenModel);
Step 3 - Tokenizando la sentencia
los tokenize() método del TokenizerMELa 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).
Invoque este método pasando el formato String de la oración a este método, de la siguiente manera.
//Tokenizing the given raw text
String tokens[] = tokenizer.tokenize(paragraph);
Example
A continuación se muestra el programa que tokeniza el texto sin formato dado. Guarde este programa en un archivo con el nombreTokenizerMEExample.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 y ejecute el archivo Java guardado desde el símbolo del sistema utilizando los siguientes comandos:
javac TokenizerMEExample.java
java TokenizerMEExample
Al ejecutarse, el programa anterior lee la cadena dada y detecta las oraciones en ella y muestra la siguiente salida:
Hi
.
How
are
you
?
Welcome
to
Tutorialspoint
.
We
provide
free
tutorials
on
various
technologie
Recuperando las posiciones de los tokens
También podemos conseguir las posiciones o spans de los tokens usando el tokenizePos()método. Este es el método de la interfaz Tokenizer del paquete.opennlp.tools.tokenize. Dado que las (tres) clases de Tokenizer implementan esta interfaz, puede encontrar este método en todas ellas.
Este método acepta la oración o el texto sin formato en forma de cadena y devuelve una matriz de objetos del tipo Span.
Puede obtener las posiciones de los tokens usando el tokenizePos() método, como sigue -
//Retrieving the tokens
tokenizer.tokenizePos(sentence);
Imprimir las posiciones (tramos)
La clase nombrada Span del opennlp.tools.util paquete se utiliza para almacenar el número entero inicial y final de conjuntos.
Puede almacenar los intervalos devueltos por el tokenizePos() en la matriz Span e imprímalos, como se muestra en el siguiente bloque de código.
//Retrieving the tokens
Span[] tokens = tokenizer.tokenizePos(sentence);
//Printing the spans of tokens
for( Span token : tokens)
System.out.println(token);
Imprimir fichas y sus posiciones juntas
los substring() El método de la clase String acepta el begin y el endcompensa y devuelve la cadena respectiva. Podemos usar este método para imprimir los tokens y sus intervalos (posiciones) juntos, como se muestra en el siguiente bloque de código.
//Printing the spans of tokens
for(Span token : tokens)
System.out.println(token +" "+sent.substring(token.getStart(), token.getEnd()));
Example(SimpleTokenizer)
A continuación se muestra el programa que recupera los tramos de token del texto sin formato utilizando el SimpleTokenizerclase. También imprime las fichas junto con sus posiciones. Guarde este programa en un archivo con nombreSimpleTokenizerSpans.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 y ejecute el archivo Java guardado desde el símbolo del sistema utilizando los siguientes comandos:
javac SimpleTokenizerSpans.java
java SimpleTokenizerSpans
Al ejecutarse, el programa anterior lee la cadena dada (texto sin formato), la tokeniza y muestra la siguiente salida:
[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 continuación se muestra el programa que recupera los tramos de token del texto sin formato utilizando el WhitespaceTokenizerclase. También imprime las fichas junto con sus posiciones. Guarde este programa en un archivo con el nombreWhitespaceTokenizerSpans.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 y ejecute el archivo java guardado desde el símbolo del sistema usando los siguientes comandos
javac WhitespaceTokenizerSpans.java
java WhitespaceTokenizerSpans
Al ejecutarse, el programa anterior lee la cadena dada (texto sin formato), la tokeniza y muestra la siguiente salida.
[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 continuación se muestra el programa que recupera los tramos de token del texto sin formato utilizando el TokenizerMEclase. También imprime las fichas junto con sus posiciones. Guarde este programa en un archivo con el nombreTokenizerMESpans.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 y ejecute el archivo Java guardado desde el símbolo del sistema utilizando los siguientes comandos:
javac TokenizerMESpans.java
java TokenizerMESpans
Al ejecutarse, el programa anterior lee la cadena dada (texto sin formato), la tokeniza y muestra la siguiente salida:
[0..5) Hello
[6..10) John
[11..14) how
[15..18) are
[19..22) you
[23..30) welcome
[31..33) to
[34..48) Tutorialspoint
Probabilidad de Tokenizer
El método getTokenProbabilities () de la clase TokenizerME se usa para obtener las probabilidades asociadas con las llamadas más recientes al método tokenizePos ().
//Getting the probabilities of the recent calls to tokenizePos() method
double[] probs = detector.getSentenceProbabilities();
A continuación se muestra el programa para imprimir las probabilidades asociadas con las llamadas al método tokenizePos (). Guarde este programa en un archivo con el nombreTokenizerMEProbs.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 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 la cadena dada, tokeniza las oraciones y las imprime. Además, también devuelve las probabilidades asociadas con las llamadas más recientes al 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