Texte : splitter un texte en phrase

Prendre un texte et identifier les phrases, facile en apparence, sauf que parfois, il y a des points d’interrogation à la place du point final, ou des abbréviations au milieu de la phrase, comportant des points. Une expression régulière complexe permet de faire face à ces cas de figure.

Précédent | 16/26 | Suivant

Le code

String texte = "This is an example sentence. Can sentences also be terminated "+ "with a questionmark? Sometimes punctuation does not terminate "+ "a sentence, e.g. when abbreviating.";

 // Expression provenant de http://www.codeproject.com/KB/vb/SentenceParserVB.aspx
// adapté par Jo Wood, London
 void setup(){
   size(200,100);
 }
 
 void draw(){
 String[] phrases = texte.split("(?<=['\"\"A-Za-z0-9][\\.\\!\\?])\\s+(?=[A-Z])");
 
 // usage spécial de la boucle : parcourir l'array phrases
 for (String phrase : phrases){
   println(phrase);
   delay(1000);
 }
}

Une version permettant de faire le même travail à partir d’un fichier joint (ne pas oublier, du coup, de mettre ce fichier "montexte.txt" dans le dossier du sketch) :

String texte;

 // Expression provenant de http://www.codeproject.com/KB/vb/SentenceParserVB.aspx
 void setup(){
   size(200,100);
   // on importe un texte depuis un fichier txt
   String[] importer=loadStrings("montexte.txt");
   // on assemble les lignes de textes,
   // qui ne correspondent pas nécessairement à des phrases
   texte=join(importer, " ");
   
 }
 
 void draw(){
 String[] phrases = texte.split("(?<=['\"\"A-Za-z0-9][\\.\\!\\?])\\s+(?=[A-Z])");
 
 // usage spécial de la boucle : parcourir l'array phrases
 for (String phrase : phrases){
   println(phrase);
   delay(1000);
 }
}