TetardKing Docteur square inside | Je vous explique mon pb :
J'ai deux tableaux, un corpus (ensemble de texte) et un thésaurus (un dico).
J'ai des phrases dans les deux, et j'aimerai savoir quelles sont les phrases qu'on retrouve dans les deux, quelque soit l'ordre des mots.
Pour que ca aille plus vite (le corpus fait 56.000 lignes et le thésaurus 27.000), j'ai mis le thésaurus dans des tableaux differents en fonction du nb d'espaces (et donc, du nb de mots).
J'ai donc en gros une grosse boucle, qui parcours le corpus, à l'interieure de laquelle, une boucle parcours le thésaurus.
Et ké passa :
Je commence la grosse boucle :
je prend donc la première ligne du corpus, fait un implode selon les espaces.
Si il n'y a pas d'espaces, un simple in_array suffit, ca, ca marche.
Je continue sur ma boucle interne :
Si il y a un seul espace, je prend ma ligne du thesaurus, la coupe, et regarde si les deux morceaux sont identiques. Si c'est le cas, y'a bon. Sinon, je parcours mon thésaurus.
fin de la boucle interne. On reprend au debut
Si il n'a rien trouvé, il passe à la ligne suivante.
Redebut de la boucle interne
Or, il prend bien la ligne suivante du corpus, mais ne fait pas la boucle interne ...
J'ai mis un compteur pour vérifier, il ne veux passer qu'une fois par la boucle interne... :cry:
Pourquoi ??
Y'a une limitation en php ??
en perl, ca marcherait mieux ??
Qqn aurait il une soluce toute faite en expression regulière qui tient en une ligne ?? :cry:
Merci beaucoup.
Ps : le code joint en annexes :
Code :
- while (list($key_c, $val_c) = each($corpus)) { // on prend les expressions du corpus les unes apres les autres...
- $morceaux_c = explode (' ',$val_c); // on explose la ligne en morceaux_corpus
- $j++;
- echo "<br>$j : $val_c, "; // affichage de la ligne du corpus.
- $comptage = substr_count($val_c, " " );
- if ( $comptage == 0 ) { // si il y a 0 espace
- echo substr_count($val_c, " " ) . " espace";
- if (in_array($val_c,$mesh_0)) echo " <b>identiques $val_c</b>";
- echo array_search ($val_c,$thesaurus_0); // ca, ca marche impec.
- }
-
-
- if ( $comptage == 1 ) { // si il y a 1 espaces
- echo substr_count($val_c, " " ) . " espace";
- while (list($key_t, $val_t)=each($thesaurus_1)) { // on prend une ligne du thesaurus correspondant au nb de ligne
- $k++;
- $morceaux_t = explode (' ',$val_t);
- $comparaison = array_intersect ($morceaux_c, $morceaux_t); // on compare si les tableaux sont identiques.
-
- if (sizeof($comparaison) == sizeof($morceaux_c)) {
- $corel_mesh++; // si ca correspond, on le note.
- }
- }
- }
- echo ", et on a fait $k comparaisons"; // le $k n'est incrémenté qu'une seule fois, lors du premier passage. Apres, il s'en fout ... :(
- $k=0;
- }
|
Donc, en gros, pour ceux qui ont le flemme, le deuxième ne s'execute qu'au premier passage... ![:( :(](https://forum-images.hardware.fr/icones/frown.gif) Message édité par TetardKing le 08-10-2002 à 16:16:32
|