OpenNLP - Tokenizzazione
Il processo di sminuzzare la frase data in parti più piccole (gettoni) è noto come tokenization. In generale, il testo non elaborato fornito è tokenizzato in base a un insieme di delimitatori (principalmente spazi bianchi).
La tokenizzazione viene utilizzata in attività come il controllo ortografico, l'elaborazione di ricerche, l'identificazione di parti del discorso, il rilevamento di frasi, la classificazione dei documenti, ecc.
Tokenizzazione utilizzando OpenNLP
Il opennlp.tools.tokenize pacchetto contiene le classi e le interfacce utilizzate per eseguire la tokenizzazione.
Per tokenizzare le frasi date in frammenti più semplici, la libreria OpenNLP fornisce tre classi differenti:
SimpleTokenizer - Questa classe tokenizza il testo grezzo dato usando classi di caratteri.
WhitespaceTokenizer - Questa classe utilizza gli spazi bianchi per tokenizzare il testo specificato.
TokenizerME- Questa classe converte il testo grezzo in token separati. Usa la massima entropia per prendere le sue decisioni.
SimpleTokenizer
Per tokenizzare una frase usando il SimpleTokenizer classe, devi -
Crea un oggetto della rispettiva classe.
Tokenizza la frase usando il tokenize() metodo.
Stampa i gettoni.
Di seguito sono riportati i passaggi da seguire per scrivere un programma che tokenizza il testo grezzo dato.
Step 1 - Istanziare la rispettiva classe
In entrambe le classi non sono disponibili costruttori per istanziarle. Pertanto, dobbiamo creare oggetti di queste classi utilizzando la variabile staticaINSTANCE.
SimpleTokenizer tokenizer = SimpleTokenizer.INSTANCE;
Step 2 - Tokenizza le frasi
Entrambe queste classi contengono un metodo chiamato tokenize(). Questo metodo accetta un testo non elaborato in formato String. All'invocazione, tokenizza la stringa data e restituisce un array di stringhe (token).
Tokenizza la frase usando il tokenizer() metodo come mostrato di seguito.
//Tokenizing the given sentence
String tokens[] = tokenizer.tokenize(sentence);
Step 3 - Stampa i gettoni
Dopo aver tokenizzato la frase, puoi stampare i token usando for loop, come mostrato di seguito.
//Printing the tokens
for(String token : tokens)
System.out.println(token);
Example
Di seguito è riportato il programma che tokenizza la frase data utilizzando la classe SimpleTokenizer. Salva questo programma in un file con il 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);
}
}
}
Compilare ed eseguire il file Java salvato dal prompt dei comandi utilizzando i seguenti comandi:
javac SimpleTokenizerExample.java
java SimpleTokenizerExample
All'esecuzione, il programma precedente legge la stringa data (testo grezzo), la tokenizza e visualizza il seguente output:
Hi
.
How
are
you
?
Welcome
to
Tutorialspoint
.
We
provide
free
tutorials
on
various
technologies
WhitespaceTokenizer
Per tokenizzare una frase usando il WhitespaceTokenizer classe, devi -
Crea un oggetto della rispettiva classe.
Tokenizza la frase usando il tokenize() metodo.
Stampa i gettoni.
Di seguito sono riportati i passaggi da seguire per scrivere un programma che tokenizza il testo grezzo dato.
Step 1 - Istanziare la rispettiva classe
In entrambe le classi non sono disponibili costruttori per istanziarle. Pertanto, dobbiamo creare oggetti di queste classi utilizzando la variabile staticaINSTANCE.
WhitespaceTokenizer tokenizer = WhitespaceTokenizer.INSTANCE;
Step 2 - Tokenizza le frasi
Entrambe queste classi contengono un metodo chiamato tokenize(). Questo metodo accetta un testo non elaborato in formato String. All'invocazione, tokenizza la stringa data e restituisce un array di stringhe (token).
Tokenizza la frase usando il tokenizer() metodo come mostrato di seguito.
//Tokenizing the given sentence
String tokens[] = tokenizer.tokenize(sentence);
Step 3 - Stampa i gettoni
Dopo aver tokenizzato la frase, puoi stampare i token usando for loop, come mostrato di seguito.
//Printing the tokens
for(String token : tokens)
System.out.println(token);
Example
Di seguito è riportato il programma che tokenizza la frase data utilizzando il WhitespaceTokenizerclasse. Salva questo programma in un file con il 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);
}
}
Compilare ed eseguire il file Java salvato dal prompt dei comandi utilizzando i seguenti comandi:
javac WhitespaceTokenizerExample.java
java WhitespaceTokenizerExample
Durante l'esecuzione, il programma precedente legge la stringa data (testo grezzo), la tokenizza e visualizza il seguente output.
Hi.
How
are
you?
Welcome
to
Tutorialspoint.
We
provide
free
tutorials
on
various
technologies
TokenizerME classe
OpenNLP utilizza anche un modello predefinito, un file denominato de-token.bin, per tokenizzare le frasi. È addestrato per tokenizzare le frasi in un dato testo grezzo.
Il TokenizerME classe di opennlp.tools.tokenizerpacchetto viene utilizzato per caricare questo modello e tokenizzare il testo non elaborato specificato utilizzando la libreria OpenNLP. Per fare ciò, devi:
Carica il file en-token.bin modello utilizzando il TokenizerModel classe.
Istanziare il file TokenizerME classe.
Tokenizza le frasi usando il tokenize() metodo di questa classe.
Di seguito sono riportati i passaggi da seguire per scrivere un programma che tokenizza le frasi dal testo grezzo dato utilizzando il TokenizerME classe.
Step 1 - Caricamento del modello
Il modello per la tokenizzazione è rappresentato dalla classe denominata TokenizerModel, che appartiene al pacchetto opennlp.tools.tokenize.
Per caricare un modello di tokenizer:
Creare un InputStream oggetto del modello (creare un'istanza di FileInputStream e passare il percorso del modello in formato String al suo costruttore).
Istanziare il file TokenizerModel class e passare il InputStream (oggetto) del modello come parametro del suo costruttore, come mostrato nel seguente blocco di codice.
//Loading the Tokenizer model
InputStream inputStream = new FileInputStream("C:/OpenNLP_models/en-token.bin");
TokenizerModel tokenModel = new TokenizerModel(inputStream);
Step 2 - Creazione di istanze della classe TokenizerME
Il TokenizerME classe del pacchetto opennlp.tools.tokenizecontiene metodi per tagliare il testo grezzo in parti più piccole (token). Usa la massima entropia per prendere le sue decisioni.
Istanziare questa classe e passare l'oggetto modello creato nel passaggio precedente come mostrato di seguito.
//Instantiating the TokenizerME class
TokenizerME tokenizer = new TokenizerME(tokenModel);
Step 3 - Tokenizzare la frase
Il tokenize() metodo del TokenizerMEclass è usata per tokenizzare il testo grezzo che gli è stato passato. Questo metodo accetta una variabile String come parametro e restituisce una matrice di stringhe (token).
Richiamare questo metodo passando il formato String della frase a questo metodo, come segue.
//Tokenizing the given raw text
String tokens[] = tokenizer.tokenize(paragraph);
Example
Di seguito è riportato il programma che tokenizza il testo grezzo dato. Salva questo programma in un file con il 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);
}
}
Compilare ed eseguire il file Java salvato dal prompt dei comandi utilizzando i seguenti comandi:
javac TokenizerMEExample.java
java TokenizerMEExample
All'esecuzione, il programma sopra legge la stringa data e rileva le frasi in essa contenute e visualizza il seguente output:
Hi
.
How
are
you
?
Welcome
to
Tutorialspoint
.
We
provide
free
tutorials
on
various
technologie
Recupero delle posizioni dei token
Possiamo anche ottenere le posizioni o spans dei token utilizzando l'estensione tokenizePos()metodo. Questo è il metodo dell'interfaccia Tokenizer del pacchettoopennlp.tools.tokenize. Poiché tutte le (tre) classi Tokenizer implementano questa interfaccia, puoi trovare questo metodo in tutte.
Questo metodo accetta la frase o il testo grezzo sotto forma di stringa e restituisce un array di oggetti del tipo Span.
Puoi ottenere le posizioni dei gettoni usando il tokenizePos() metodo, come segue:
//Retrieving the tokens
tokenizer.tokenizePos(sentence);
Stampa delle posizioni (intervalli)
La classe denominata Span del opennlp.tools.util pacchetto viene utilizzato per memorizzare il numero intero iniziale e finale degli insiemi.
È possibile memorizzare le campate restituite da tokenizePos() nell'array Span e stamparli, come mostrato nel seguente blocco di codice.
//Retrieving the tokens
Span[] tokens = tokenizer.tokenizePos(sentence);
//Printing the spans of tokens
for( Span token : tokens)
System.out.println(token);
Stampa di gettoni e loro posizioni insieme
Il substring() metodo della classe String accetta il begin e il endcompensa e restituisce la rispettiva stringa. Possiamo usare questo metodo per stampare i token e le loro estensioni (posizioni) insieme, come mostrato nel seguente blocco di codice.
//Printing the spans of tokens
for(Span token : tokens)
System.out.println(token +" "+sent.substring(token.getStart(), token.getEnd()));
Example(SimpleTokenizer)
Di seguito è riportato il programma che recupera gli intervalli di token del testo grezzo utilizzando l'estensione SimpleTokenizerclasse. Stampa anche i gettoni insieme alle loro posizioni. Salva questo programma in un file con 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()));
}
}
Compilare ed eseguire il file Java salvato dal prompt dei comandi utilizzando i seguenti comandi:
javac SimpleTokenizerSpans.java
java SimpleTokenizerSpans
All'esecuzione, il programma precedente legge la stringa data (testo grezzo), la tokenizza e visualizza il seguente output:
[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)
Di seguito è riportato il programma che recupera gli intervalli di token del testo grezzo utilizzando l'estensione WhitespaceTokenizerclasse. Stampa anche i gettoni insieme alle loro posizioni. Salva questo programma in un file con il 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()));
}
}
Compilare ed eseguire il file java salvato dal prompt dei comandi utilizzando i seguenti comandi
javac WhitespaceTokenizerSpans.java
java WhitespaceTokenizerSpans
Durante l'esecuzione, il programma precedente legge la stringa data (testo grezzo), la tokenizza e visualizza il seguente output.
[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)
Di seguito è riportato il programma che recupera gli intervalli di token del testo grezzo utilizzando l'estensione TokenizerMEclasse. Stampa anche i gettoni insieme alle loro posizioni. Salva questo programma in un file con il 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()));
}
}
Compilare ed eseguire il file Java salvato dal prompt dei comandi utilizzando i seguenti comandi:
javac TokenizerMESpans.java
java TokenizerMESpans
All'esecuzione, il programma precedente legge la stringa data (testo grezzo), la tokenizza e visualizza il seguente output:
[0..5) Hello
[6..10) John
[11..14) how
[15..18) are
[19..22) you
[23..30) welcome
[31..33) to
[34..48) Tutorialspoint
Probabilità del tokenizzatore
Il metodo getTokenProbabilities () della classe TokenizerME viene utilizzato per ottenere le probabilità associate alle chiamate più recenti al metodo tokenizePos ().
//Getting the probabilities of the recent calls to tokenizePos() method
double[] probs = detector.getSentenceProbabilities();
Di seguito è riportato il programma per stampare le probabilità associate alle chiamate al metodo tokenizePos (). Salva questo programma in un file con il 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]);
}
}
Compilare ed eseguire il file Java salvato dal prompt dei comandi utilizzando i seguenti comandi:
javac TokenizerMEProbs.java
java TokenizerMEProbs
All'esecuzione, il programma precedente legge la stringa data e tokenizza le frasi e le stampa. Inoltre, restituisce anche le probabilità associate alle chiamate più recenti al metodo 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