IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Moteur de recherche, accents et groupes de mots


Sujet :

Langage PHP

  1. #1
    Membre à l'essai
    Femme Profil pro
    Développeur Web
    Inscrit en
    Mai 2014
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 49
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2014
    Messages : 24
    Points : 16
    Points
    16
    Par défaut Moteur de recherche, accents et groupes de mots
    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) :
    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";
    }
    ?>
    actuellement si le mot de recherche est "accentue" sans l'accent, il ne trouve pas.
    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 &eacute; ? 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)

  2. #2
    Membre expert
    Avatar de Spartacusply
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2011
    Messages
    1 723
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2011
    Messages : 1 723
    Points : 3 274
    Points
    3 274
    Par défaut
    actuellement je suis en latin1_general_ci, avec un affichage charset=utf-8
    C'est anormal, il faut que du début à la fin de ton projet, l'encodage utilisé soit le même partout (le mieux étant l'utf-8, tu peux suivre ce tutopar exemple).

    Avec un interclassement en "utf8_general_ci", la casse et les accents ne sont pas pris en compte lors d'une recherche. Par exemple si dans ma table il y a les mots "événement", "évènement" ou encore "Evenement", les trois seront retournés lors d'une recherche avec le mot clef "evenement".

    Regarde du côté du côté du mot-clef SQL "match" également (voir ici).
    Un message utile vous a aidé ? N'oubliez pas le

    www.simplifions.fr - Simplifier vos comptes entre amis !

  3. #3
    Membre à l'essai
    Femme Profil pro
    Développeur Web
    Inscrit en
    Mai 2014
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 49
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2014
    Messages : 24
    Points : 16
    Points
    16
    Par défaut
    Bonjour Spartacusply,

    Merci de tes conseils.
    Je pense que la fonction Match va bien m'aider, je vais tester ça ce matin.

    Quant à l'encodage, c'est en effet une prise de tête récurrente. En localhost je met mon encodage en utf-8, parfois j'oublie et je remarque deux choses :
    - les champs s'enregistrent par défaut sous différents encodages, pas forcément les mêmes pour chaque champs
    - lorsque j'ai travaillé en local et que j'exporte ma base pour la mettre en ligne, les champs ne conservent pas l'encodage que j'avais défini à la base.

    Je vais y être plus attentive à l'avenir.
    Dans le cas du site que je développe actuellement il n'y avait pas de moteur de recherche prévu au départ. Comme c'est le premier que je fais, je n'avais pas anticipé la chose.

    Et un piège de plus dans lequel je suis tombée, qui me servira d'expérience à l'avenir !

    Bonne journée à tous, et merci encore !

Discussions similaires

  1. Recherche sur 3 groupes de mots
    Par Technn dans le forum Développement Sharepoint
    Réponses: 4
    Dernier message: 10/02/2014, 15h28
  2. Moteur de recherche en cliquant sur un mot
    Par nightgringo dans le forum Langage
    Réponses: 1
    Dernier message: 03/06/2007, 14h53
  3. [Tableaux] Moteur de recherche par mot clés
    Par Nee dans le forum Langage
    Réponses: 4
    Dernier message: 20/01/2006, 11h30
  4. Moteur de recherche et plusieurs mots clés
    Par jack1234 dans le forum Langage
    Réponses: 13
    Dernier message: 14/12/2005, 10h29
  5. Réponses: 6
    Dernier message: 04/11/2005, 17h09

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo