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