OpenNLP - Détection de phrases
Lors du traitement d'un langage naturel, décider du début et de la fin des phrases est l'un des problèmes à résoudre. Ce processus est connu sous le nom deSentence Bbord Disambiguation (SBD) ou simplement rupture de phrase.
Les techniques que nous utilisons pour détecter les phrases dans le texte donné dépendent de la langue du texte.
Détection de phrases à l'aide de Java
Nous pouvons détecter les phrases dans le texte donné en Java en utilisant des expressions régulières et un ensemble de règles simples.
Par exemple, supposons qu'un point, un point d'interrogation ou un point d'exclamation termine une phrase dans le texte donné, puis nous pouvons diviser la phrase en utilisant le split() méthode de la Stringclasse. Ici, nous devons passer une expression régulière au format String.
Voici le programme qui détermine les phrases dans un texte donné à l'aide d'expressions régulières Java (split method). Enregistrez ce programme dans un fichier avec le nomSentenceDetection_RE.java.
public class SentenceDetection_RE {
public static void main(String args[]){
String sentence = " Hi. How are you? Welcome to Tutorialspoint. "
+ "We provide free tutorials on various technologies";
String simple = "[.?!]";
String[] splitString = (sentence.split(simple));
for (String string : splitString)
System.out.println(string);
}
}
Compilez et exécutez le fichier java enregistré à partir de l'invite de commande à l'aide des commandes suivantes.
javac SentenceDetection_RE.java
java SentenceDetection_RE
Lors de l'exécution, le programme ci-dessus crée un document PDF affichant le message suivant.
Hi
How are you
Welcome to Tutorialspoint
We provide free tutorials on various technologies
Détection de phrases à l'aide d'OpenNLP
Pour détecter les phrases, OpenNLP utilise un modèle prédéfini, un fichier nommé en-sent.bin. Ce modèle prédéfini est formé pour détecter des phrases dans un texte brut donné.
le opennlp.tools.sentdetect package contient les classes et interfaces utilisées pour effectuer la tâche de détection de phrase.
Pour détecter une phrase à l'aide de la bibliothèque OpenNLP, vous devez -
Chargez le en-sent.bin modèle utilisant le SentenceModel classe
Instancier le SentenceDetectorME classe.
Détectez les phrases à l'aide du sentDetect() méthode de cette classe.
Voici les étapes à suivre pour écrire un programme qui détecte les phrases du texte brut donné.
Étape 1: chargement du modèle
Le modèle de détection de phrase est représenté par la classe nommée SentenceModel, qui appartient au package opennlp.tools.sentdetect.
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 SentenceModel 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 sentence detector model
InputStream inputStream = new FileInputStream("C:/OpenNLP_models/ensent.bin");
SentenceModel model = new SentenceModel(inputStream);
Étape 2: instanciation de la classe SentenceDetectorME
le SentenceDetectorME classe du package opennlp.tools.sentdetectcontient des méthodes pour diviser le texte brut en phrases. Cette classe utilise le modèle d'entropie maximale pour évaluer les caractères de fin de phrase dans une chaîne afin de déterminer s'ils signifient la fin d'une phrase.
Instanciez cette classe et transmettez l'objet modèle créé à l'étape précédente, comme indiqué ci-dessous.
//Instantiating the SentenceDetectorME class
SentenceDetectorME detector = new SentenceDetectorME(model);
Étape 3: Détecter la phrase
le sentDetect() méthode de la SentenceDetectorMEclass est utilisé pour détecter les phrases dans le texte brut qui lui est passé. Cette méthode accepte une variable String comme paramètre.
Appelez cette méthode en transmettant le format String de la phrase à cette méthode.
//Detecting the sentence
String sentences[] = detector.sentDetect(sentence);
Example
Voici le programme qui détecte les phrases dans un texte brut donné. Enregistrez ce programme dans un fichier nomméSentenceDetectionME.java.
import java.io.FileInputStream;
import java.io.InputStream;
import opennlp.tools.sentdetect.SentenceDetectorME;
import opennlp.tools.sentdetect.SentenceModel;
public class SentenceDetectionME {
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 sentence detector model
InputStream inputStream = new FileInputStream("C:/OpenNLP_models/en-sent.bin");
SentenceModel model = new SentenceModel(inputStream);
//Instantiating the SentenceDetectorME class
SentenceDetectorME detector = new SentenceDetectorME(model);
//Detecting the sentence
String sentences[] = detector.sentDetect(sentence);
//Printing the sentences
for(String sent : sentences)
System.out.println(sent);
}
}
Compilez et exécutez le fichier Java enregistré à partir de l'invite de commande à l'aide des commandes suivantes -
javac SentenceDetectorME.java
java SentenceDetectorME
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 technologies
Détecter les positions des phrases
On peut également détecter les positions des phrases en utilisant la méthode sentPosDetect () du SentenceDetectorME class.
Voici les étapes à suivre pour écrire un programme qui détecte les positions des phrases à partir du texte brut donné.
Étape 1: chargement du modèle
Le modèle de détection de phrase est représenté par la classe nommée SentenceModel, qui appartient au package opennlp.tools.sentdetect.
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 SentenceModel 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 sentence detector model
InputStream inputStream = new FileInputStream("C:/OpenNLP_models/en-sent.bin");
SentenceModel model = new SentenceModel(inputStream);
Étape 2: instanciation de la classe SentenceDetectorME
le SentenceDetectorME classe du package opennlp.tools.sentdetectcontient des méthodes pour diviser le texte brut en phrases. Cette classe utilise le modèle d'entropie maximale pour évaluer les caractères de fin de phrase dans une chaîne afin de déterminer s'ils signifient la fin d'une phrase.
Instanciez cette classe et transmettez l'objet modèle créé à l'étape précédente.
//Instantiating the SentenceDetectorME class
SentenceDetectorME detector = new SentenceDetectorME(model);
Étape 3: Détecter la position de la phrase
le sentPosDetect() méthode de la SentenceDetectorMEclass est utilisé pour détecter les positions des phrases dans le texte brut qui lui est passé. Cette méthode accepte une variable String comme paramètre.
Appelez cette méthode en transmettant le format String de la phrase en tant que paramètre à cette méthode.
//Detecting the position of the sentences in the paragraph
Span[] spans = detector.sentPosDetect(sentence);
Étape 4: Impression des travées des phrases
le sentPosDetect() méthode de la SentenceDetectorME class renvoie un tableau d'objets du type Span. La classe nommée Span of theopennlp.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 sentPosDetect() dans le tableau Span et imprimez-les, comme indiqué dans le bloc de code suivant.
//Printing the sentences and their spans of a sentence
for (Span span : spans)
System.out.println(paragraph.substring(span);
Example
Voici le programme qui détecte les phrases dans le texte brut donné. Enregistrez ce programme dans un fichier nomméSentenceDetectionME.java.
import java.io.FileInputStream;
import java.io.InputStream;
import opennlp.tools.sentdetect.SentenceDetectorME;
import opennlp.tools.sentdetect.SentenceModel;
import opennlp.tools.util.Span;
public class SentencePosDetection {
public static void main(String args[]) throws Exception {
String paragraph = "Hi. How are you? Welcome to Tutorialspoint. "
+ "We provide free tutorials on various technologies";
//Loading sentence detector model
InputStream inputStream = new FileInputStream("C:/OpenNLP_models/en-sent.bin");
SentenceModel model = new SentenceModel(inputStream);
//Instantiating the SentenceDetectorME class
SentenceDetectorME detector = new SentenceDetectorME(model);
//Detecting the position of the sentences in the raw text
Span spans[] = detector.sentPosDetect(paragraph);
//Printing the spans of the sentences in the paragraph
for (Span span : spans)
System.out.println(span);
}
}
Compilez et exécutez le fichier Java enregistré à partir de l'invite de commande à l'aide des commandes suivantes -
javac SentencePosDetection.java
java SentencePosDetection
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.
[0..16)
[17..43)
[44..93)
Phrases avec leurs positions
le substring() méthode de la classe String accepte le begin et le end offsetset renvoie la chaîne respective. Nous pouvons utiliser cette méthode pour imprimer les phrases et leurs étendues (positions) ensemble, comme indiqué dans le bloc de code suivant.
for (Span span : spans)
System.out.println(sen.substring(span.getStart(), span.getEnd())+" "+ span);
Voici le programme pour détecter les phrases à partir du texte brut donné et les afficher avec leurs positions. Enregistrez ce programme dans un fichier avec un nomSentencesAndPosDetection.java.
import java.io.FileInputStream;
import java.io.InputStream;
import opennlp.tools.sentdetect.SentenceDetectorME;
import opennlp.tools.sentdetect.SentenceModel;
import opennlp.tools.util.Span;
public class SentencesAndPosDetection {
public static void main(String args[]) throws Exception {
String sen = "Hi. How are you? Welcome to Tutorialspoint."
+ " We provide free tutorials on various technologies";
//Loading a sentence model
InputStream inputStream = new FileInputStream("C:/OpenNLP_models/en-sent.bin");
SentenceModel model = new SentenceModel(inputStream);
//Instantiating the SentenceDetectorME class
SentenceDetectorME detector = new SentenceDetectorME(model);
//Detecting the position of the sentences in the paragraph
Span[] spans = detector.sentPosDetect(sen);
//Printing the sentences and their spans of a paragraph
for (Span span : spans)
System.out.println(sen.substring(span.getStart(), span.getEnd())+" "+ span);
}
}
Compilez et exécutez le fichier Java enregistré à partir de l'invite de commande à l'aide des commandes suivantes -
javac SentencesAndPosDetection.java
java SentencesAndPosDetection
Lors de l'exécution, le programme ci-dessus lit la chaîne donnée et détecte les phrases avec leurs positions et affiche la sortie suivante.
Hi. How are you? [0..16)
Welcome to Tutorialspoint. [17..43)
We provide free tutorials on various technologies [44..93)
Détection de probabilité de phrase
le getSentenceProbabilities() méthode de la SentenceDetectorME class renvoie les probabilités associées aux appels les plus récents à la méthode sentDetect ().
//Getting the probabilities of the last decoded sequence
double[] probs = detector.getSentenceProbabilities();
Voici le programme pour imprimer les probabilités associées aux appels à la méthode sentDetect (). Enregistrez ce programme dans un fichier avec le nomSentenceDetectionMEProbs.java.
import java.io.FileInputStream;
import java.io.InputStream;
import opennlp.tools.sentdetect.SentenceDetectorME;
import opennlp.tools.sentdetect.SentenceModel;
public class SentenceDetectionMEProbs {
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 sentence detector model
InputStream inputStream = new FileInputStream("C:/OpenNLP_models/en-sent.bin");
SentenceModel model = new SentenceModel(inputStream);
//Instantiating the SentenceDetectorME class
SentenceDetectorME detector = new SentenceDetectorME(model);
//Detecting the sentence
String sentences[] = detector.sentDetect(sentence);
//Printing the sentences
for(String sent : sentences)
System.out.println(sent);
//Getting the probabilities of the last decoded sequence
double[] probs = detector.getSentenceProbabilities();
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 SentenceDetectionMEProbs.java
java SentenceDetectionMEProbs
Lors de l'exécution, le programme ci-dessus lit la chaîne donnée, détecte les phrases et les imprime. En outre, il renvoie également les probabilités associées aux appels les plus récents à la méthode sentDetect (), comme indiqué ci-dessous.
Hi. How are you?
Welcome to Tutorialspoint.
We provide free tutorials on various technologies
0.9240246995179983
0.9957680129995953
1.0