Partage
  • Partager sur Facebook
  • Partager sur Twitter

Possibilités de recherche avec les regex

    20 janvier 2017 à 13:40:51

    Bonjour à tous

    Avant de me lancer dans les expressions régulières, je voudrais m'assurer qu'elles correspondent à mes besoins..

    Dans une des colonnes d'une de mes tables de ma base SQL, j'ai des noms un peu bizarre pas facile à orthographier pour une personne non habitué.

    Prenons l'exemple concret d'un de ces noms dans la base:

    Khlong Sam Wa

    A l'aide d'1 formulaire de recherche, la plupart des utilisateurs taperons Khlong Samwa et la recherche se retrouve donc infructueuse.

    Les expressions régulières permettent elles donc cela? Ce qui permettrait de résoudre un très grand nombre de recherche avorté.

    En allant plus loin, pour ce même mot, on rencontrera comme recherche Klong sam wa ou Klong samwa

    Ce sont les 2 principales erreurs que je rencontre sur les mauvaises orthographe(dès qu'une recherche n'est pas trouvée, j'inscris la requête de l'utilisateur dans la base), et si elles sont résolues, c'est 99% des recherches qui seront trouvées.


    • Partager sur Facebook
    • Partager sur Twitter
    Zen à plein temps
      20 janvier 2017 à 13:45:26

      Oui mais pour corriger directement la saisie de l'utilisateur ($out = preg_replace('~\bsamwa\b~i', 'sam wa', $in); ?) dans ce cas, ce qui serait bien plus performant qu'une regex appliquée à chaque "colonne".

      -
      Edité par julp 20 janvier 2017 à 13:51:55

      • Partager sur Facebook
      • Partager sur Twitter
        20 janvier 2017 à 14:16:25

        Merci pour ta réponse, mais je suis pas sûr d'avoir bien compris ce que tu veux dire. Je donne une liste un peu plus longue de ce que l'on trouve dans ma table: 

        Nom
        Phra Sing
        Haiya
        Chang Moi
        Chang Khlan
        Wat Ket
        Chang Phueak
        Suthep
        Mae Hia
        Pa Daet
        Nong Hoi
        Tha Sala
        Nong Pa Khrang
        Fa Ham
        Pa Tan
        San Phisuea
        Ces mots sont censés être trouvé à l'aide d'un formulaire de recherche. Les personnes qui sont censés faire une recherche ont pour la plupart entendu ces mots, mais n'en connaissent pas l’orthographe. et bien souvent, l'espace ou un 'h' est omis dans leurs requêtes.
        • Partager sur Facebook
        • Partager sur Twitter
        Zen à plein temps
          20 janvier 2017 à 14:26:26

          Erf, c'est loin d'être aussi simple : il faut utiliser un truc comme la distance Levenshtein ou soundex (dont les implémentations doivent plutôt se prêter à l'anglais) ?

          • Partager sur Facebook
          • Partager sur Twitter
            20 janvier 2017 à 14:37:20

            j'ai été fouiller du coté de wiki sur la distance Levenshtein.. Effectivement, ca ressemble à ça et ça à l'air loin d'être simple.... J'ai donc bien fait de poser la question de savoir si c'était possible de gérer ça avec des regex...
            • Partager sur Facebook
            • Partager sur Twitter
            Zen à plein temps
              20 janvier 2017 à 14:54:09

              Bonjour,

              Par rapport a la distance Levenshtein, il y a une fonction PHP : http://php.net/manual/fr/function.levenshtein.php

              Tu peux aussi regarder : http://php.net/manual/fr/function.similar-text.php qui te donne un pourcentage de similarité entre deux texte, a un certain pourcentage, tu pourrais afficher le texte^^

              Je te préviens d'avance, je n'ai jamais eu l'occasion de tester ces fonctions, je n'ai fais que regarder les exemples et paramètres de celle-ci :)

              A toi donc de tester et nous dire ce que tu peux en tirer :)

              • Partager sur Facebook
              • Partager sur Twitter
              Voir une araignée c'est rien ... Le pire c'est quand tu ne la vois plus !
                20 janvier 2017 à 15:48:24

                Arf merci beaucoup pour cette piste. Je vais regarder ça de très près car ca permettrais de gagner un confort certain pour l'utilisateur.

                Donc oui je vais tester, et bien entendu, j'en donnerai mes impressions

                • Partager sur Facebook
                • Partager sur Twitter
                Zen à plein temps
                  25 janvier 2017 à 2:24:04

                  Comme promis, mon retour d'expérience sur la fonction Levenshtein que j'ai testé

                  Les résultats étant souvent improbables, j'ai fait une boucle pour trouver les 5 mots les plus proches. Certains résultats sont étonnant et d'autre me laisse perplexe.

                  Dans la base, j'ai le mot suivant à trouver:

                  Min buri --> dans la zone de recherche je tape minburi --> dans l'ordre, la fonction me trouve les mots :

                  Min buri, Chonburi, Sin Pun, Thai Buri, Hin Mun

                  Là génial, il trouve en premier le mot correcte. Voyons la suite:

                  Chiang Mai --> chiangmai --> Chiang Da, Khiam Sa, Chian Yai, Chiang Rai, Chiang Mai

                  Là , il a trouvé aussi , mais en 5ième position, ça va encore.

                  Ram Inthra --> ram intra --> Ram Inthra, Lam Sin, Nam Sut, Hantra, Samrit

                  Première position, c'est clean


                  Roy Et --> roi et --> Ko E, Boet, Doet, Woe, Somdet

                  Là aucuns mot trouvé. Et les résultats données semblent complètement à coté de la plaque et pourtant ma recherche n'était pas loin...

                  Conclusion, c'est pas mal dans l'ensemble, mais ça mériterais quand même d'être peaufiné... une piste?

                  ------------------------------------
                  EDIT

                  Honte à moi.....! Je mérite le bonnet d'âne
                  En imposant la recherche en mettant tout en minuscules (ou majuscules), j'obtiens des résultats trèèèès correct..Donc, la fonction est tout simplement génial sans aucuns paramétrage spécifique...

                  Quand à l'autre fonction, similar_text(); elle a l'air de bien se défendre aussi, mais j'ai pas testé en profondeur.

                  Merci à vous deux pour la bonne piste

                  -
                  Edité par soluna 25 janvier 2017 à 3:43:52

                  • Partager sur Facebook
                  • Partager sur Twitter
                  Zen à plein temps
                    25 janvier 2017 à 9:29:54

                    Parfait ! :)

                    Bonne continuité alors :)

                    • Partager sur Facebook
                    • Partager sur Twitter
                    Voir une araignée c'est rien ... Le pire c'est quand tu ne la vois plus !

                    Possibilités de recherche avec les regex

                    × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                    × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                    • Editeur
                    • Markdown