OpenNLP - Tokenisation

Le processus de découpage de la phrase donnée en parties plus petites (jetons) est appelé tokenization. En général, le texte brut donné est tokenisé en fonction d'un ensemble de délimiteurs (principalement des espaces).

La tokenisation est utilisée dans des tâches telles que la vérification orthographique, le traitement des recherches, l'identification de parties de discours, la détection de phrases, la classification de documents de documents, etc.

Tokenizing avec OpenNLP

le opennlp.tools.tokenize package contient les classes et les interfaces utilisées pour effectuer la tokenisation.

Pour tokeniser les phrases données en fragments plus simples, la bibliothèque OpenNLP fournit trois classes différentes -

  • SimpleTokenizer - Cette classe tokenise le texte brut donné en utilisant des classes de caractères.

  • WhitespaceTokenizer - Cette classe utilise des espaces pour tokeniser le texte donné.

  • TokenizerME- Cette classe convertit le texte brut en jetons séparés. Il utilise l'Entropie maximale pour prendre ses décisions.

SimpleTokenizer

Pour tokeniser une phrase en utilisant le SimpleTokenizer classe, vous devez -

  • Créez un objet de la classe respective.

  • Tokenize la phrase en utilisant le tokenize() méthode.

  • Imprimez les jetons.

Voici les étapes à suivre pour écrire un programme qui tokenise le texte brut donné.

Step 1 - Instanciation de la classe respective

Dans les deux classes, aucun constructeur n'est disponible pour les instancier. Par conséquent, nous devons créer des objets de ces classes en utilisant la variable statiqueINSTANCE.

SimpleTokenizer tokenizer = SimpleTokenizer.INSTANCE;

Step 2 - Tokenize les phrases

Ces deux classes contiennent une méthode appelée tokenize(). Cette méthode accepte un texte brut au format String. Lors de l'appel, il tokenise la chaîne donnée et renvoie un tableau de chaînes (jetons).

Tokenize la phrase en utilisant le tokenizer() méthode comme indiqué ci-dessous.

//Tokenizing the given sentence 
 String tokens[] = tokenizer.tokenize(sentence);

Step 3 - Imprimez les jetons

Après avoir marqué la phrase, vous pouvez imprimer les jetons en utilisant for loop, comme indiqué ci-dessous.

//Printing the tokens 
for(String token : tokens)       
   System.out.println(token);

Example

Voici le programme qui tokenise la phrase donnée en utilisant la classe SimpleTokenizer. Enregistrez ce programme dans un fichier avec le nomSimpleTokenizerExample.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);  
      }       
   }  
}

Compilez et exécutez le fichier Java enregistré à partir de l'invite de commande à l'aide des commandes suivantes -

javac SimpleTokenizerExample.java 
java SimpleTokenizerExample

Lors de l'exécution, le programme ci-dessus lit la chaîne donnée (texte brut), la tokenise et affiche la sortie suivante -

Hi 
. 
How 
are 
you 
? 
Welcome 
to 
Tutorialspoint 
. 
We 
provide 
free 
tutorials 
on 
various 
technologies

Espace blancTokenizer

Pour tokeniser une phrase en utilisant le WhitespaceTokenizer classe, vous devez -

  • Créez un objet de la classe respective.

  • Tokenize la phrase en utilisant le tokenize() méthode.

  • Imprimez les jetons.

Voici les étapes à suivre pour écrire un programme qui tokenise le texte brut donné.

Step 1 - Instanciation de la classe respective

Dans les deux classes, aucun constructeur n'est disponible pour les instancier. Par conséquent, nous devons créer des objets de ces classes en utilisant la variable statiqueINSTANCE.

WhitespaceTokenizer tokenizer = WhitespaceTokenizer.INSTANCE;

Step 2 - Tokenize les phrases

Ces deux classes contiennent une méthode appelée tokenize(). Cette méthode accepte un texte brut au format String. Lors de l'appel, il tokenise la chaîne donnée et renvoie un tableau de chaînes (jetons).

Tokenize la phrase en utilisant le tokenizer() méthode comme indiqué ci-dessous.

//Tokenizing the given sentence 
 String tokens[] = tokenizer.tokenize(sentence);

Step 3 - Imprimez les jetons

Après avoir marqué la phrase, vous pouvez imprimer les jetons en utilisant for loop, comme indiqué ci-dessous.

//Printing the tokens 
for(String token : tokens)       
   System.out.println(token);

Example

Voici le programme qui tokenise la phrase donnée en utilisant le WhitespaceTokenizerclasse. Enregistrez ce programme dans un fichier avec le nomWhitespaceTokenizerExample.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);        
   } 
}

Compilez et exécutez le fichier Java enregistré à partir de l'invite de commande à l'aide des commandes suivantes -

javac WhitespaceTokenizerExample.java 
java WhitespaceTokenizerExample

Lors de l'exécution, le programme ci-dessus lit la chaîne donnée (texte brut), la tokenise et affiche la sortie suivante.

Hi. 
How 
are 
you? 
Welcome 
to 
Tutorialspoint. 
We 
provide 
free 
tutorials 
on 
various 
technologies

Classe TokenizerME

OpenNLP utilise également un modèle prédéfini, un fichier nommé de-token.bin, pour tokeniser les phrases. Il est formé pour tokeniser les phrases dans un texte brut donné.

le TokenizerME classe de la opennlp.tools.tokenizerpackage est utilisé pour charger ce modèle et tokeniser le texte brut donné à l'aide de la bibliothèque OpenNLP. Pour ce faire, vous devez -

  • Chargez le en-token.bin modèle utilisant le TokenizerModel classe.

  • Instancier le TokenizerME classe.

  • Tokenize les phrases en utilisant le tokenize() méthode de cette classe.

Voici les étapes à suivre pour écrire un programme qui tokenise les phrases du texte brut donné en utilisant le TokenizerME classe.

Step 1 - Chargement du modèle

Le modèle de tokenisation est représenté par la classe nommée TokenizerModel, qui appartient au package opennlp.tools.tokenize.

Pour charger un modèle de tokenizer -

  • Créé un InputStream objet du modèle (instanciez le FileInputStream et passez le chemin du modèle au format String à son constructeur).

  • Instancier le TokenizerModel classe et passer le InputStream (objet) du modèle en tant que paramètre de son constructeur, comme indiqué dans le bloc de code suivant.

//Loading the Tokenizer model 
InputStream inputStream = new FileInputStream("C:/OpenNLP_models/en-token.bin"); 
TokenizerModel tokenModel = new TokenizerModel(inputStream);

Step 2 - Instanciation de la classe TokenizerME

le TokenizerME classe du package opennlp.tools.tokenizecontient des méthodes pour découper le texte brut en parties plus petites (jetons). Il utilise l'Entropie maximale pour prendre ses décisions.

Instanciez cette classe et transmettez l'objet modèle créé à l'étape précédente comme indiqué ci-dessous.

//Instantiating the TokenizerME class 
TokenizerME tokenizer = new TokenizerME(tokenModel);

Step 3 - Tokeniser la phrase

le tokenize() méthode de la TokenizerMEclass est utilisé pour tokeniser le texte brut qui lui est passé. Cette méthode accepte une variable String en tant que paramètre et renvoie un tableau de Strings (jetons).

Appelez cette méthode en transmettant le format String de la phrase à cette méthode, comme suit.

//Tokenizing the given raw text 
String tokens[] = tokenizer.tokenize(paragraph);

Example

Voici le programme qui tokenise le texte brut donné. Enregistrez ce programme dans un fichier avec le nomTokenizerMEExample.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); 
   } 
}

Compilez et exécutez le fichier Java enregistré à partir de l'invite de commande à l'aide des commandes suivantes -

javac TokenizerMEExample.java 
java TokenizerMEExample

Lors de l'exécution, le programme ci-dessus lit la chaîne donnée et détecte les phrases qu'elle contient et affiche la sortie suivante -

Hi 
. 
How 
are 
you 
? 
Welcome 
to 
Tutorialspoint 
. 
We 
provide 
free 
tutorials 
on 
various 
technologie

Récupération des positions des jetons

Nous pouvons également obtenir les positions ou spans des jetons utilisant le tokenizePos()méthode. C'est la méthode de l'interface Tokenizer du packageopennlp.tools.tokenize. Puisque toutes les (trois) classes Tokenizer implémentent cette interface, vous pouvez trouver cette méthode dans chacune d'elles.

Cette méthode accepte la phrase ou le texte brut sous la forme d'une chaîne et renvoie un tableau d'objets du type Span.

Vous pouvez obtenir les positions des jetons en utilisant le tokenizePos() méthode, comme suit -

//Retrieving the tokens 
tokenizer.tokenizePos(sentence);

Impression des positions (travées)

La classe nommée Span du opennlp.tools.util package est utilisé pour stocker les entiers de début et de fin des ensembles.

Vous pouvez stocker les portées renvoyées par le tokenizePos() dans le tableau Span et imprimez-les, comme indiqué dans le bloc de code suivant.

//Retrieving the tokens 
Span[] tokens = tokenizer.tokenizePos(sentence);
//Printing the spans of tokens 
for( Span token : tokens)        
   System.out.println(token);

Impression des jetons et de leurs positions ensemble

le substring() méthode de la classe String accepte le begin et le enddécale et renvoie la chaîne respective. Nous pouvons utiliser cette méthode pour imprimer les jetons et leurs étendues (positions) ensemble, comme indiqué dans le bloc de code suivant.

//Printing the spans of tokens 
for(Span token : tokens)  
   System.out.println(token +" "+sent.substring(token.getStart(), token.getEnd()));

Example(SimpleTokenizer)

Voici le programme qui récupère les étendues de jetons du texte brut en utilisant le SimpleTokenizerclasse. Il imprime également les jetons avec leurs positions. Enregistrez ce programme dans un fichier nomméSimpleTokenizerSpans.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()));          
   } 
}

Compilez et exécutez le fichier Java enregistré à partir de l'invite de commande à l'aide des commandes suivantes -

javac SimpleTokenizerSpans.java 
java SimpleTokenizerSpans

Lors de l'exécution, le programme ci-dessus lit la chaîne donnée (texte brut), la tokenise et affiche la sortie suivante -

[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)

Voici le programme qui récupère les étendues de jetons du texte brut en utilisant le WhitespaceTokenizerclasse. Il imprime également les jetons avec leurs positions. Enregistrez ce programme dans un fichier avec le nomWhitespaceTokenizerSpans.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()));        
   } 
}

Compilez et exécutez le fichier java enregistré à partir de l'invite de commande à l'aide des commandes suivantes

javac WhitespaceTokenizerSpans.java 
java WhitespaceTokenizerSpans

Lors de l'exécution, le programme ci-dessus lit la chaîne donnée (texte brut), la tokenise et affiche la sortie suivante.

[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)

Voici le programme qui récupère les étendues de jetons du texte brut en utilisant le TokenizerMEclasse. Il imprime également les jetons avec leurs positions. Enregistrez ce programme dans un fichier avec le nomTokenizerMESpans.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()));      
   } 
}

Compilez et exécutez le fichier Java enregistré à partir de l'invite de commande à l'aide des commandes suivantes -

javac TokenizerMESpans.java 
java TokenizerMESpans

Lors de l'exécution, le programme ci-dessus lit la chaîne donnée (texte brut), la tokenise et affiche la sortie suivante -

[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é du tokenizer

La méthode getTokenProbabilities () de la classe TokenizerME est utilisée pour obtenir les probabilités associées aux appels les plus récents à la méthode tokenizePos ().

//Getting the probabilities of the recent calls to tokenizePos() method 
double[] probs = detector.getSentenceProbabilities();

Voici le programme pour imprimer les probabilités associées aux appels à la méthode tokenizePos (). Enregistrez ce programme dans un fichier avec le nomTokenizerMEProbs.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]);          
   } 
}

Compilez et exécutez le fichier Java enregistré à partir de l'invite de commande à l'aide des commandes suivantes -

javac TokenizerMEProbs.java 
java TokenizerMEProbs

Lors de l'exécution, le programme ci-dessus lit la chaîne donnée et tokenise les phrases et les imprime. De plus, il renvoie également les probabilités associées aux appels les plus récents à la méthode 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