[resolu] problème de regex

problème de regex [resolu] - PHP - Programmation

Marsh Posté le 15-10-2006 à 12:45:34    

Alors j'ai un petit souci. En ce moment je concois un projet d'étiqueteur lexicographique, et pour le moment je créé la partie d'apprentissage du programme, donc grosso modo, ca prend un texte en le décomposant, et ca l'affiche, pour chaque terme l'utilisateur rentre le type lexical correspondant, puis c'est mémorisé en base de donnée afin d'établir des règles ultérieurement. Mon problème actuel est la décomposition correcte des termes du texte (par exemple séparer les mots de fin de phrase du point, etc.). Pour l'instant pas énormément de souci, mais j'en ai un à présent avec ce qui gère les double guillemets simples (bizarrement aucun problème avec les guillements doubles...). Donc voici deux codes, celui qui sépare les doubles guillemets simples, celui d'un qui s'occupe de la gestion des virgules, avec un exemple :
 
Exemple pris au départ : Bonjour à tous ! Je m'apelle Fabrice, surnommé 'plop'. => enregistré dans le fichier $fichier donc en un seul tenant pour le moment.
 

Code :
  1. for($i=0;$i<count($fichier);$i++) {
  2. if (eregi("'",$fichier[$i]) && strlen($fichier[$i])>1) {
  3.  if (substr_count($fichier[$i],"'" )==1 OR substr_count($fichier[$i],"'" )>2) { //s'il n'y a que des apostrophes
  4.  $tab3=split("'",$fichier[$i]); // on découpe  
  5.  for($x=0;$x<count($tab3)-1;$x++) {
  6.  $tab3[$x]=$tab3[$x].'\''; //on ajoute le délimiteur qui a sauté lors du split
  7.  }
  8.  $tab1=array_slice($fichier,0,"$i-1" ); //on découpe le reste du tableau pour insérer celui créé
  9.  $tab2=array_slice($fichier,$i+1); //idem
  10.  $fichier=array_merge($tab1,$tab3,$tab2); //on fusionne
  11.  unset($tab3); //par sécurité, on vire $tab3
  12.  }
  13.  elseif (substr_count($fichier[$i],"'" )==2) { //dans le cas où il y a des guillemets
  14.  eregi('(\')(.*)(\')(.*)',$fichier[$i],$regs); // on enregistre dans $regs la décomposition
  15.  $tab3[0]=$regs[1];
  16.  $tab3[1]=$regs[2];
  17.  $tab3[2]=$regs[3];
  18.  if ($regs[4]!='') {$tab3[3]=$regs[4];}
  19.  $tab1=array_slice($fichier,0,"$i-1" ); //on découpe le reste du tableau pour inséré celui créé
  20.  $tab2=array_slice($fichier,$i+1); //idem
  21.  $fichier=array_merge($tab1,$tab3,$tab2); //on fusionne
  22.  unset($tab3);
  23. }
  24. }
  25. }


 
Après passage de ce bout de code (et juste avant d'arriver au traitement de la virgule), avec un print_r($fichier), on obtient :
 

Code :
  1. Array ( [0] => Bonjour [1] => à [2] => tous [3] => ! [4] => Je [5] => m' [6] => appelle [7] => Fabrice, [8] => surnommé [9] => ' [10] => plop [11] => ' [12] => . )


 
Donc on voit bien que le découpage de " 'plop' " a été fait correctement, il reste maintenant à faire celui de "Fabrice,", voici le code :
 

Code :
  1. for ($i=0;$i<count($fichier);$i++) {
  2. if (eregi(",", $fichier[$i]) && strlen($fichier[$i])>1 ) {
  3.  eregi("(.*)(,)(.*)",$fichier[$i],$regs);
  4.  echo $regs[3];
  5.  if (!is_numeric($regs[3]) && !is_numeric($reg[1])) { //on vérifie qu'il n'y a pas de nombre avant et après la virgule pour éviter de découper des nombres
  6.  $tab3[0]=$regs[1];
  7.  $tab3[1]=$regs[2];
  8.  if ($regs[3]!='') {$tab3[2]=$regs[3];} //s'il y a quelque chose après la virgule de non numérique, on le sépare
  9.  $tab1=array_slice($fichier,0,"$i-1" );
  10.  $tab2=array_slice($fichier,$i+1);
  11.  $fichier=array_merge($tab1,$tab3,$tab2);
  12.  unset($tab3);
  13.  }
  14. }
  15. }


 
Et donc ca me décompose bien Fabrice... mais ca me rajoute des items qui n'ont rien à faire là, voilà le résultat :
 

Code :
  1. Array ( [0] => Bonjour [1] => à [2] => tous [3] => ! [4] => Je [5] => m' [6] => appelle [7] => Fabrice [8] => , [9] => ' [10] => . [11] => surnommé [12] => ' [13] => plop [14] => ' [15] => . )


 
Autrement dit : Bonjour à tous ! Je m'appelle Fabrice, '. surnommé 'plop'.
 
Donc si quelqu'un a une idée, je suis preneur ;)


Message édité par Yagmoth le 15-10-2006 à 18:14:45
Reply

Marsh Posté le 15-10-2006 à 12:45:34   

Reply

Marsh Posté le 15-10-2006 à 18:14:25    

Bon et ben en fait ca marche très bien  :pt1cable:  
 
Je sais pas, ptet une erreur de l'interpréteur, un problème du navigateur ou que sais-je... après quelques heures d'absences et sans toucher au script le problème à disparu  :love: .

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed