Hello à tous !
je ne sais pas si je suis au bon endroit car il y a plusieurs pistes de solutions à mon problème, qui ne seront pas toutes dans les manipulations de chaines, à mon avis...
j'ai besoin de votre éclairage...
je fais un moteur de recherche raccordé à ma base de donnée. c'est extrêmement difficile de trouver des scripts ou tutos qui correspondent à un moteur de recherche avec des fonctionnalités un peu plus poussées.
je suis partie de celui-ci :
http://www.supportduweb.com/scripts_...-internet.html
Afin d'affiner le résultat, dans un précédent message grâce à votre aide, j'affiche dans le résultat de la recherche les x mots avant et après le terme recherché.
j'essaie maintenant d'améliorer le système avec :
- une expression au lieu d'un mot seul avec l'affichage des x mots avant/après
- une recherche qui ne tiendrait pas compte des accents.
Voici mon code de travail (juste un fichier le plus simple possible) :
actuellement si le mot de recherche est "accentue" sans l'accent, il ne trouve pas.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><?php function search($wordSearch, $text, $nbWords = 5) { //On enlève la ponctuation pour la recherche $carToReplace = array('.', ',', '?', '!', ':', ';', '"', '...', '(', ')', "'"); $textToSearch = str_replace($carToReplace, "", $text); //$textToSearch = str_replace($stopwords, "", $textToSearch); $tabTextToSearch = explode(" ", $textToSearch); $tabText = explode(" ", $text); $resSearch = array_search($wordSearch, $tabTextToSearch); if ($resSearch === false) { return false; } $nbWordsBefore = $nbWords; $indexFirstWord = $resSearch - $nbWords; if ($indexFirstWord < 0) { $nbWordsBefore = $nbWords + $indexFirstWord; $indexFirstWord = 0; } $before = array_slice($tabText, $indexFirstWord, $nbWordsBefore); $after = array_slice($tabText, $resSearch + 1, $nbWords); return array( implode(' ', $before), '<strong>'.$wordSearch.'</strong>', implode(' ', $after), ); } $text = "Voici un texte de texte, dans lequel on va chercher un mot en particulier, éventuellement accentué, et qui affichera (ceci est un test) les '10 mots' qui se situent avant et après ce mot, pour voir comment c'est facile d'utiliser les tableaux en php."; $wordSearch="accentué"; /*$rech = "d'utiliser"; $stop = array("l'","d'","s'","c'"," à "," a "," et "," ou "); $wordSearch = str_replace($stop,"", $rech);*/ $resSearch = search($wordSearch, $text); if ($resSearch !== false) { //print_r($resSearch); echo implode(" ",$resSearch); } else { echo "Mot non trouvé dans la chaîne"; } ?>
sur le net j'ai trouvé une personne qui avait le même problème, et la réponse était dans la configuration de la table sql de façon à ce que les accents ne soient pas pris en compte.
est-ce que cette solution règlerait mon pb, sachant que dans mon code de test les accents sont bien é et pas é ? et si oui, en quel format dois-je l'enregistrer ?
actuellement je suis en latin1_general_ci, avec un affichage charset=utf-8
(avant de tout bousculer, vu que ma table contient déjà beaucoup d'éléments je cherche une solution plus simple, et sure !)
pour les expressions, ou groupes de mots, le problème se pose si ma recherche est "c'est", qu'il ne trouve pas bien qu'elle soit dans la phrase à tester..
je suis en galère depuis deux jours sur ce truc, à défaut d'éclairage je suis preneuse d'un script tout fait qui affiche le résultat de la recherche avec surbrillance des mots recherchés, quitte à bazarder 15 h de boulot (il faut savoir renoncer parfois)
Partager