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 KhlongSamwa 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.
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".
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.
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) ?
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...
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.
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.
julp.fr ~ PHP < 8.0.0 : activer les erreurs PDO/SQL ~ PHP < 8.1.0 : activer les erreurs mysqli
julp.fr ~ PHP < 8.0.0 : activer les erreurs PDO/SQL ~ PHP < 8.1.0 : activer les erreurs mysqli