e.MiLoU Posté 27 Août 2005 Posté 27 Août 2005 Ben c'est bizarre, il me dit "file not found" <{POST_SNAPBACK}> OK, c'est bon j'abandonne... En fait, l'url est comme la précedente... Voilà
TheRec Posté 27 Août 2005 Posté 27 Août 2005 Tu abandonnes quoi ? La résolution de ce problème de espaces "significatifs" et "non-significatifs" ? Ou essayer de nous faire accéder à ton serveur personnel par ton adresse de loopback ?
e.MiLoU Posté 27 Août 2005 Posté 27 Août 2005 Essayer de vous faire accéder au serveur. Concernant la correction du petit chat noir en grande folle rose, je crois que ça va aller, mais je dois encore changer pas mal de chose, je fais ça demain, vous l'aurez dans la soirée normalement.
Anonymus Posté 28 Août 2005 Posté 28 Août 2005 Re, Sans vouloir jouer les rabats joie, il semblerait que le bas de page "Designed and CoDeD by MiLoU " soit décallé vers le bas. On ne voit pas le bas des mots, qui est 'coupé' par le tableau. Pour l'histoire de la ponctuation, il faudrait savoir ce que l'on veut enlever, comme ponctuation. Les points, par exemple. quoi d'autre ?
TheRec Posté 28 Août 2005 Posté 28 Août 2005 Bonjour, J'ai juste de la peine à comprendre ce qui motive un changement dans ce script concernant la ponctuation, vu que il existe une différence entre la chaîne de base et la chaîne "modifée" il faut qu'elle soit notifiée. Sinon on doit spécifier des erreur qui ne doivent pas être notifiées... Dans ce cas ça devient perillieux, cela implique (comme je l'ai dit précédemment) de différencier des erreurs significatives et non-significatives mais dans ce cas le script va vite devenir ingérable (trop d'exceptions, différences entre les langues, la signification de certaines poncutations ou des espaces varie selon le contexte). Si c'est pour cela désolé je ne pourrais pas vous aider... mais peut-être que je me trompe et que c'est facile comme "Bonjour" ...
Compte supprimé Posté 28 Août 2005 Auteur Posté 28 Août 2005 le script donne par exemple le petit chat. chat blanc. alors qu'il faudrait le petit chat blanc. les caractères spéciaux à traiter seraient les simples (pas d'espace avant) comme le point et la virgule, mais aussi les parentèses, ... y'a du job. Et si le hub ouvrait un concours ? Celui qui fait un script qui marche et qui consomme le le moins de ressources ? C'est pas une bonne idée ça ?
TheRec Posté 28 Août 2005 Posté 28 Août 2005 À moins de connaitre l'entier de la phrase et de comparer chaque mot avec l'entier à chaque fois...et de se fixer une limite de distance entre chaque occurence de mots il n'y a pas de de possibilité de changer cela...imaginez simplement que le mot peut se retouver plus loin dans la phrase modifiée et n'avoir aucun rapport avec l'occurence précédente... et en plus, je le répète, cela changerait en fonction de chaque langue...
e.MiLoU Posté 28 Août 2005 Posté 28 Août 2005 (modifié) Bon, dans tous les cas, je propose ma nouvelle version. Elle ne prend toujours pas en compte les grandes partie de texte à modifier, dites moi ce que vous en pensez Page de test <? function EspacePonctu($str) { $recherche = array('#!#', '#,#', '#?#', '#\.#', '#;#'); $remplacement = array(' !', ' ,', ' ?',' .', ';'); $str = preg_replace ($recherche, $remplacement, $str); return $str; } function DeEspacePonctu($str) { $recherche = array('# !#', '# ,#', '# ?#', '# \.#', '#;#'); $remplacement = array('!', ',', '?','.', ';'); $str = preg_replace ($recherche, $remplacement, $str); return $str; }// Cette fonction permet d'extraire un élément d'indice $index dans un tableau $tab function ArrayExtract($tab, $index) { $u = 0; $end [0] = ''; foreach($tab as $i => $val) { if ($i != $index) $end[$u++] = $val; } return $end; }/**************************************************************************\| Cette fonction sert à comparer deux chaines de caractères. || Elle a été réalisée par MiLoU pour le topic d'url || [url="http://www.webmaster-hub.com/index.php?showtopic=16115"]http://www.webmaster-hub.com/index.php?showtopic=16115[/url] || sur le forum Webmaster-Hub |\**************************************************************************/// Paramètres// $t_init: text initial (!! sans htmlentities ou nl2br!!)// $t_corr: text correctif (!! sans htmlentities ou nl2br!!)// $distance: distance jusque laquelle le programme va cherche le mot correspondant.function Corriger($t_init, $t_corr, $distance){ // On regarde que les deux chaînes ne sont pas bêtement les mêmes, sans quoi, ça sert à rien de corriger. if ($t_init == $t_corr) echo '<p>Les deux chaînes sont identiques.</p>'; else { // On remplace les retoursà la ligne par des $$ $t_init = str_replace("\n"," $$ ",$t_init); $t_corr = str_replace("\n"," $$ ",$t_corr); // On fait attention aux signes de ponctuations $t_init = EspacePonctu($t_init); $t_corr = EspacePonctu($t_corr); // On stocke chaque mot de la première chaîne dant un tableau // $t_init = wordwrap($t_init, 1, '#', 0); $t_init = explode(' ', $t_init); array_push($t_init, "##"); // On stocke chaque mot de la deuxième chaine dans un tableau // $t_corr = wordwrap($t_corr, 1, '#', 0); $t_corr = explode(' ', $t_corr); array_push($t_corr, "##"); // On regarde quelle est la chaîne la plus longue $c_init = count($t_init); $c_corr = count($t_corr); if ($c_init > $c_corr) $c_small = $c_corr; else $c_small = $c_init; // On initialise le text final $t_final[0] = ''; $t = 0; $i = 0; // On commence la boucle qui va tout tuer do { /*echo '<h3>Comparaison</h3>'; echo 'A Comparer: '.$t_init[$i] .' - '. $t_corr[$i];*/ if($t_init[$i] == $t_corr[$i]) // C'est les mêmes mots, rien à faire { $t_final[$t] = $t_init[$i]; $t_init = ArrayExtract($t_init, $i); $t_corr = ArrayExtract($t_corr, $i); } else { // Bon, on va chercher où est la correspondance... $index_correspondance = ''; $vi = $i; while($index_correspondance == '') { // On regarde si c'est pas t_corr qui a des mots en trop $v = $vi; // $v comme verif;) while ($v <= $distance && $v < count($t_corr)) { // On regarde si ça correspond. //echo '<p>'.$t_corr[$v] .' - '. $t_init[$vi].'</p>'; if ($t_corr[$v] == $t_init[$vi] OR $t_corr[$v] == "##") { $index_t_corr = $v; break 1; } $v++; } // On regarde si c'est pas t_init qui a des mots en trop $v = $vi; // Toujours $v comme verif;) while ($v <= $distance && $v < count($t_init)) { // On regarde si ça correspond. //echo '<p>'.$t_init[$v] .' - ' . $t_corr[$vi].'</p>'; if ($t_init[$v] == $t_corr[$vi] OR $t_init[$v] == "##") { $index_t_init = $v; break 2; } $v++; } $vi++; } /*echo '<h4>Initial</h4>'; echo $index_t_init.'<br />'; echo count($t_init).'<br />'; echo '<h4>Correction</h4>'; echo $index_t_corr.'<br />'; echo count($t_corr).'<br />';*/ if (count($t_init) == 1 && $index_t_corr == count($t_corr) -1 ) { $t_final[$t] = '<span class="correction">'.$t_corr[$i].'</span>'; $t_corr = ArrayExtract($t_corr, $i); } elseif (count($t_corr) == 1 && $index_t_init == count($t_init) -1 ) { $t_final[$t] = '<span class="corrige">'.$t_init[$i].'</span>'; $t_init = ArrayExtract($t_init, $i); } elseif ( ($index_t_init == count($t_init) - 1 && $index_t_corr == count($t_corr) - 1 ) // On regarde qu'il nous a pas mené betement à la fin comme un crétin d'ordinateur. && ($t_init[$i] != "##" && $t_corr[$i] != "##") // et qu'on est pas réellement à la fin ) { //echo '<b>A la fin</b>'; $t_final[$t] = '<span class="corrige">'.$t_init[$i].'</span> <span class="correction">'.$t_corr[$i].'</span>'; $t_init = ArrayExtract($t_init, $i); $t_corr = ArrayExtract($t_corr, $i); } else { // Pour éviter qu'il fasse le gland en effaçant tout if ($index_t_init == count($t_init) - 1) $index_t_init = $i; if ($index_t_corr == count($t_corr) - 1) $index_t_corr = $i; // On regarde qui est le plus petit, et on fait en conséquence if ($index_t_corr > $index_t_init) { $tab_origine = 't_corr'; $index_origine = $index_t_corr; $tab_correspondance = 't_init'; $index_correspondance = $index_t_init; } else { $tab_origine = 't_init'; $index_origine = $index_t_init; $tab_correspondance = 't_corr'; $index_correspondance = $index_t_corr; } /* Résumons ce que contiennent les variables ----------------------------------------- $i contient l'index du tableau $tab_origine contient le tableau où le mot à matcher est présent $index_origines contient l'index du tableau $tab_origine où le mot à matché est $tab_correspondance contient le tableau où le matching mot est présent $index_correspondance contient l'index du tableau $tab_correspondance où le matching word est présent Donc: Si on barre le contenu du tableau $t_init jusqu'au bon index et Si on met en rouge le contenu du tableau $t_corr jusqu'au bon index, ça devrait marcher... Bien entendu, il faudra supprimer le contenu des deux tableaux que l'on a affiché et donc baissé $i de 1 J'ai envie de dire, c'est parti!! */ $d_init = $i; $d_corr = $i; // On met les bons index où il faut if ($tab_origine == 't_init') { $f_init = $index_origine; $f_corr = $index_correspondance; } else { $f_init = $index_correspondance; $f_corr = $index_origine; } // Initialisation de variable $correction = array_fill(0,$distance,''); for($c = 0; $c < $f_init - $d_init; $c++) { $correction[$c] = $t_init[$d_init]; $t_init = ArrayExtract($t_init, $d_init); } $t_final[$t] = '<span class="corrige">'.implode(' ',$correction).'</span>'; // Initialisation de variable $correction = array_fill(0,$distance,''); for($c = 0; $c < $f_corr - $d_corr; $c++) { $correction[$c] = $t_corr[$d_corr]; $t_corr = ArrayExtract($t_corr, $d_corr); } $t_final[$t] .= ' <span class="correction">'.implode(' ',$correction).'</span>'; } } /*echo '<br /><b>Initial: </b>'; print_r($t_init); echo '<br /><b>Correction: </b>'; print_r($t_corr); echo '<br /><b>Final: </b>'; print_r($t_final);*/ $t++; } while (count($t_corr) != 1 OR count($t_init) != 1 ); // On affiche les texte final $t_final = implode(' ',$t_final); $t_final = str_replace('##','',$t_final); $t_final = str_replace(" $$ ","\n",$t_final); $t_final = DeEspacePonctu($t_final); return '<p>'.$t_final.'</p>'; }}?> Modifié 28 Août 2005 par e.MiLoU
Compte supprimé Posté 28 Août 2005 Auteur Posté 28 Août 2005 A part les correction en bloc, ça commence vraiment à avoir de la gueule ! J'ai toutefois relevé 2 problèmes : - mauvaise gestion des ' - problème avec les caractères type . et , qu'il affiche avec un espace avant. Sinon top !
TheRec Posté 28 Août 2005 Posté 28 Août 2005 (modifié) Oui je retire ce que j'ai dit dans ce cas... je vais étudier ton code. Bravo en tous cas ! Cela à l'air de marcher très bien, à part le point espaces avant ponctuation cité précédemment par jeroen. Modifié 28 Août 2005 par TheRec
e.MiLoU Posté 28 Août 2005 Posté 28 Août 2005 (modifié) Es-tu sûr qu'ils sont toujours d'actualité?? Bravo en tous cas ! Je sers la science et c'est ma joie! Modifié 28 Août 2005 par e.MiLoU
TheRec Posté 28 Août 2005 Posté 28 Août 2005 Celui de l'espace avant la virgule, oui. Essaie : Une fois de plus et Une fois, de plus La sortie donne un esapce avant la "," ...
Compte supprimé Posté 28 Août 2005 Auteur Posté 28 Août 2005 Ca devient vraiment nickel. Par contre il gère encore mal les retours chariots. (au niveau des points, et il affiche des $$)
TheRec Posté 28 Août 2005 Posté 28 Août 2005 (modifié) Et en regardant de plus près ton code... tu fait quelque chose de pas viable à mon avis... tu remplace les caractères qui posent problème par des occurence qui n'en posent pas tant qu'on ne les utilisent pas... Si je viens a tester par exemple : Une fois de plus en le comparant avec : Une fois de plus! ou même : Une fois de plus ! Il me retourne ma phrase d'origine (il passe bien entendu le teste de l'absolue correspondance vu que les chaînes sont différentes)...Avec le script que j'ai proposé il est aussi possible de faire ceci si je me souviens encore du fonctionnement... Modifié 28 Août 2005 par TheRec
e.MiLoU Posté 28 Août 2005 Posté 28 Août 2005 Ca devient vraiment nickel. Par contre il gère encore mal les retours chariots. (au niveau des points, et il affiche des $$) <{POST_SNAPBACK}> Peux-tu donner les exemples en même temps??
spins Posté 8 Juin 2010 Posté 8 Juin 2010 Salut tout le monde, je me permet de déterrer ce topic car de toute mes recherches c'est d'après moi le code le plus abouti mais pourtant je n'arrive toujours pas à le faire fonctionner. Mon projet serai de faire une correction de dicté automatisée. Connaissez vous donc un bon moyen de le faire ? Merci.
spins Posté 8 Juin 2010 Posté 8 Juin 2010 Pour plus d'info j'ai récup le code, j'ai utilisé fopen puis fgets pour ouvrir mes deux fichiers, j'ai fais appel à la fonction corriger et là j'ai ca: Warning: preg_replace() [function.preg-replace]: Compilation failed: nothing to repeat at offset 0 in C:\wamp\www\import.php on line 19Warning: preg_replace() [function.preg-replace]: Compilation failed: nothing to repeat at offset 0 in C:\wamp\www\import.php on line 19ComparaisonA Comparer: -Initial: Array ( [0] => ## )Correction: Array ( [0] => ## )Final: Array ( [0] => ) (à la ligne 19 j'ai la fonction EspacePonctu) Mets connaissance en php sont limitées donc je pense que c'est tout simplement une erreur de ma part ou une incompréhension qu'en pensé vous ?
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant