Yagmoth Fanboy | 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 :
- for($i=0;$i<count($fichier);$i++) {
- if (eregi("'",$fichier[$i]) && strlen($fichier[$i])>1) {
- if (substr_count($fichier[$i],"'" )==1 OR substr_count($fichier[$i],"'" )>2) { //s'il n'y a que des apostrophes
- $tab3=split("'",$fichier[$i]); // on découpe
- for($x=0;$x<count($tab3)-1;$x++) {
- $tab3[$x]=$tab3[$x].'\''; //on ajoute le délimiteur qui a sauté lors du split
- }
- $tab1=array_slice($fichier,0,"$i-1" ); //on découpe le reste du tableau pour insérer celui créé
- $tab2=array_slice($fichier,$i+1); //idem
- $fichier=array_merge($tab1,$tab3,$tab2); //on fusionne
- unset($tab3); //par sécurité, on vire $tab3
- }
- elseif (substr_count($fichier[$i],"'" )==2) { //dans le cas où il y a des guillemets
- eregi('(\')(.*)(\')(.*)',$fichier[$i],$regs); // on enregistre dans $regs la décomposition
- $tab3[0]=$regs[1];
- $tab3[1]=$regs[2];
- $tab3[2]=$regs[3];
- if ($regs[4]!='') {$tab3[3]=$regs[4];}
- $tab1=array_slice($fichier,0,"$i-1" ); //on découpe le reste du tableau pour inséré celui créé
- $tab2=array_slice($fichier,$i+1); //idem
- $fichier=array_merge($tab1,$tab3,$tab2); //on fusionne
- unset($tab3);
- }
- }
- }
|
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 :
- 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 :
- for ($i=0;$i<count($fichier);$i++) {
- if (eregi(",", $fichier[$i]) && strlen($fichier[$i])>1 ) {
- eregi("(.*)(,)(.*)",$fichier[$i],$regs);
- echo $regs[3];
- 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
- $tab3[0]=$regs[1];
- $tab3[1]=$regs[2];
- 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
- $tab1=array_slice($fichier,0,"$i-1" );
- $tab2=array_slice($fichier,$i+1);
- $fichier=array_merge($tab1,$tab3,$tab2);
- unset($tab3);
- }
- }
- }
|
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 :
- 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
|