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