OpenNLP - Phrases de segmentation
La segmentation d'une phrase fait référence au fractionnement / division d'une phrase en parties de mots telles que des groupes de mots et des groupes de verbes.
Couper une phrase en utilisant OpenNLP
Pour détecter les phrases, OpenNLP utilise un modèle, un fichier nommé en-chunker.bin. Il s'agit d'un modèle prédéfini qui est formé pour fragmenter les phrases dans le texte brut donné.
le opennlp.tools.chunker package contient les classes et les interfaces qui sont utilisées pour rechercher des annotations syntaxiques non récursives telles que des fragments de phrases nominales.
Vous pouvez découper une phrase en utilisant la méthode chunk() du ChunkerMEclasse. Cette méthode accepte les jetons d'une phrase et les balises POS comme paramètres. Par conséquent, avant de commencer le processus de segmentation, vous devez d'abord Tokenize la phrase et générer les parties balises POS de celle-ci.
Pour découper une phrase en utilisant la bibliothèque OpenNLP, vous devez -
Tokenize la phrase.
Générez des balises POS pour cela.
Chargez le en-chunker.bin modèle utilisant le ChunkerModel classe
Instancier le ChunkerME classe.
Coupez les phrases en utilisant le chunk() méthode de cette classe.
Voici les étapes à suivre pour écrire un programme pour découper des phrases à partir du texte brut donné.
Étape 1: Tokeniser la phrase
Tokenize les phrases en utilisant le tokenize() méthode de la whitespaceTokenizer class, comme indiqué dans le bloc de code suivant.
//Tokenizing the sentence
String sentence = "Hi welcome to Tutorialspoint";
WhitespaceTokenizer whitespaceTokenizer= WhitespaceTokenizer.INSTANCE;
String[] tokens = whitespaceTokenizer.tokenize(sentence);
Étape 2: Génération des balises POS
Générez les balises POS de la phrase en utilisant le tag() méthode de la POSTaggerME class, comme indiqué dans le bloc de code suivant.
//Generating the POS tags
File file = new File("C:/OpenNLP_models/en-pos-maxent.bin");
POSModel model = new POSModelLoader().load(file);
//Constructing the tagger
POSTaggerME tagger = new POSTaggerME(model);
//Generating tags from the tokens
String[] tags = tagger.tag(tokens);
Étape 3: chargement du modèle
Le modèle de segmentation d'une phrase est représenté par la classe nommée ChunkerModel, qui appartient au package opennlp.tools.chunker.
Pour charger un modèle de détection de phrase -
Créé un InputStream objet du modèle (instanciez le FileInputStream et passez le chemin du modèle au format String à son constructeur).
Instancier le ChunkerModel 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 chunker model
InputStream inputStream = new FileInputStream("C:/OpenNLP_models/en-chunker.bin");
ChunkerModel chunkerModel = new ChunkerModel(inputStream);
Étape 4: Instanciation de la classe chunkerME
le chunkerME classe du package opennlp.tools.chunkercontient des méthodes pour découper les phrases. Il s'agit d'un bloc basé sur une entropie maximale.
Instanciez cette classe et transmettez l'objet modèle créé à l'étape précédente.
//Instantiate the ChunkerME class
ChunkerME chunkerME = new ChunkerME(chunkerModel);
Étape 5: découper la phrase
le chunk() méthode de la ChunkerMEclass est utilisé pour fragmenter les phrases du texte brut qui lui est passé. Cette méthode accepte deux tableaux String représentant des jetons et des balises, en tant que paramètres.
Appelez cette méthode en passant le tableau de jetons et le tableau de balises créés au cours des étapes précédentes en tant que paramètres.
//Generating the chunks
String result[] = chunkerME.chunk(tokens, tags);
Example
Voici le programme pour découper les phrases dans le texte brut donné. Enregistrez ce programme dans un fichier avec le nomChunkerExample.java.
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import opennlp.tools.chunker.ChunkerME;
import opennlp.tools.chunker.ChunkerModel;
import opennlp.tools.cmdline.postag.POSModelLoader;
import opennlp.tools.postag.POSModel;
import opennlp.tools.postag.POSTaggerME;
import opennlp.tools.tokenize.WhitespaceTokenizer;
public class ChunkerExample{
public static void main(String args[]) throws IOException {
//Tokenizing the sentence
String sentence = "Hi welcome to Tutorialspoint";
WhitespaceTokenizer whitespaceTokenizer= WhitespaceTokenizer.INSTANCE;
String[] tokens = whitespaceTokenizer.tokenize(sentence);
//Generating the POS tags
//Load the parts of speech model
File file = new File("C:/OpenNLP_models/en-pos-maxent.bin");
POSModel model = new POSModelLoader().load(file);
//Constructing the tagger
POSTaggerME tagger = new POSTaggerME(model);
//Generating tags from the tokens
String[] tags = tagger.tag(tokens);
//Loading the chunker model
InputStream inputStream = new
FileInputStream("C:/OpenNLP_models/en-chunker.bin");
ChunkerModel chunkerModel = new ChunkerModel(inputStream);
//Instantiate the ChunkerME class
ChunkerME chunkerME = new ChunkerME(chunkerModel);
//Generating the chunks
String result[] = chunkerME.chunk(tokens, tags);
for (String s : result)
System.out.println(s);
}
}
Compilez et exécutez le fichier Java enregistré à partir de l'invite de commande à l'aide de la commande suivante -
javac ChunkerExample.java
java ChunkerExample
Lors de l'exécution, le programme ci-dessus lit la chaîne donnée, segmente les phrases qu'elle contient et les affiche comme indiqué ci-dessous.
Loading POS Tagger model ... done (1.040s)
B-NP
I-NP
B-VP
I-VP
Détection des positions des jetons
Nous pouvons également détecter les positions ou les portées des morceaux en utilisant le chunkAsSpans() méthode de la ChunkerMEclasse. Cette méthode renvoie un tableau d'objets du type Span. La classe nommée Span of theopennlp.tools.util package est utilisé pour stocker le start et end entier d'ensembles.
Vous pouvez stocker les portées renvoyées par le chunkAsSpans() dans le tableau Span et imprimez-les, comme indiqué dans le bloc de code suivant.
//Generating the tagged chunk spans
Span[] span = chunkerME.chunkAsSpans(tokens, tags);
for (Span s : span)
System.out.println(s.toString());
Example
Voici le programme qui détecte les phrases dans le texte brut donné. Enregistrez ce programme dans un fichier avec le nomChunkerSpansEample.java.
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import opennlp.tools.chunker.ChunkerME;
import opennlp.tools.chunker.ChunkerModel;
import opennlp.tools.cmdline.postag.POSModelLoader;
import opennlp.tools.postag.POSModel;
import opennlp.tools.postag.POSTaggerME;
import opennlp.tools.tokenize.WhitespaceTokenizer;
import opennlp.tools.util.Span;
public class ChunkerSpansEample{
public static void main(String args[]) throws IOException {
//Load the parts of speech model
File file = new File("C:/OpenNLP_models/en-pos-maxent.bin");
POSModel model = new POSModelLoader().load(file);
//Constructing the tagger
POSTaggerME tagger = new POSTaggerME(model);
//Tokenizing the sentence
String sentence = "Hi welcome to Tutorialspoint";
WhitespaceTokenizer whitespaceTokenizer= WhitespaceTokenizer.INSTANCE;
String[] tokens = whitespaceTokenizer.tokenize(sentence);
//Generating tags from the tokens
String[] tags = tagger.tag(tokens);
//Loading the chunker model
InputStream inputStream = new
FileInputStream("C:/OpenNLP_models/en-chunker.bin");
ChunkerModel chunkerModel = new ChunkerModel(inputStream);
ChunkerME chunkerME = new ChunkerME(chunkerModel);
//Generating the tagged chunk spans
Span[] span = chunkerME.chunkAsSpans(tokens, tags);
for (Span s : span)
System.out.println(s.toString());
}
}
Compilez et exécutez le fichier Java enregistré à partir de l'invite de commande à l'aide des commandes suivantes -
javac ChunkerSpansEample.java
java ChunkerSpansEample
Lors de l'exécution, le programme ci-dessus lit la chaîne donnée et s'étend sur les morceaux qu'elle contient, et affiche la sortie suivante -
Loading POS Tagger model ... done (1.059s)
[0..2) NP
[2..4) VP
Détection de probabilité de bloc
le probs() méthode de la ChunkerME class renvoie les probabilités de la dernière séquence décodée.
//Getting the probabilities of the last decoded sequence
double[] probs = chunkerME.probs();
Voici le programme pour imprimer les probabilités de la dernière séquence décodée par le chunker. Enregistrez ce programme dans un fichier avec le nomChunkerProbsExample.java.
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import opennlp.tools.chunker.ChunkerME;
import opennlp.tools.chunker.ChunkerModel;
import opennlp.tools.cmdline.postag.POSModelLoader;
import opennlp.tools.postag.POSModel;
import opennlp.tools.postag.POSTaggerME;
import opennlp.tools.tokenize.WhitespaceTokenizer;
public class ChunkerProbsExample{
public static void main(String args[]) throws IOException {
//Load the parts of speech model
File file = new File("C:/OpenNLP_models/en-pos-maxent.bin");
POSModel model = new POSModelLoader().load(file);
//Constructing the tagger
POSTaggerME tagger = new POSTaggerME(model);
//Tokenizing the sentence
String sentence = "Hi welcome to Tutorialspoint";
WhitespaceTokenizer whitespaceTokenizer= WhitespaceTokenizer.INSTANCE;
String[] tokens = whitespaceTokenizer.tokenize(sentence);
//Generating tags from the tokens
String[] tags = tagger.tag(tokens);
//Loading the chunker model
InputStream inputStream = new
FileInputStream("C:/OpenNLP_models/en-chunker.bin");
ChunkerModel cModel = new ChunkerModel(inputStream);
ChunkerME chunkerME = new ChunkerME(cModel);
//Generating the chunk tags
chunkerME.chunk(tokens, tags);
//Getting the probabilities of the last decoded sequence
double[] probs = chunkerME.probs();
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 ChunkerProbsExample.java
java ChunkerProbsExample
Lors de l'exécution, le programme ci-dessus lit la chaîne donnée, la segmente et imprime les probabilités de la dernière séquence décodée.
0.9592746040797778
0.6883933131241501
0.8830563473996004
0.8951150529746051