rechercher dans une base de données - Algo - Programmation
Marsh Posté le 14-04-2006 à 09:35:32
tu as SOUND LIKE, ou SOUNDEX(), en sql
http://dev.mysql.com/doc/refman/4. [...] tions.html
Marsh Posté le 14-04-2006 à 09:36:38
en php, tu as en plus: levenshtein(), metaphone() et similar_text().
http://fr3.php.net/manual/fr/function.soundex.php
Marsh Posté le 14-04-2006 à 10:35:19
j'ai testé le soundex de MySQl sur une faute courante : "dans" et "dasn". On obtient D520 et D250. On abient les mêmes lettres et chiffres mais aps dans le bon ordre. Je ne sais pas trop comment interpréter ça : hasard ou normal Par ailleurs, meta_phone fonctionne surtout pour des mots anglais. Le mieux, à mon avis, c'est levenshtein(), mais pas utilisable pour effectuer une requête SQL. en fait, ce qu'il faudrait, c'est une fonction qui prenne en entrée un mot et qui génère tous les mots proches. Ensuite, on recherche dans la BD un des mots de la liste générée. Ce système, ça me fait penser à l'algo breveté par un étudiant américain récemment acheté par Google ...
Marsh Posté le 14-04-2006 à 10:53:20
> "dans" et "dasn"
he oui, soundex ne fonctionne pas sur ce genre de typo: la prononciation des deux mots est différente.
Pour le typos et les dislexies levenshtein() fonctionne mieux.
Il y a une autre algo (trigraphe), qui compare les lettres 3 par 3, et essaye toutes les combinaisons:
dan -> adn nad and nda dna
Il est possible de programmer son propre algo dans Mysql à l'aide d'une fonction.
Marsh Posté le 14-04-2006 à 11:12:56
La fonction similar_text est assez sympa. Elle permet d'obtenir un pourcentage de similarité entre la chaine entrée par l'utilisateur et chaque ligne de la table. Ensuite je ne garde que les résultats présentants une similarité supérieure à 60%. Il ne me reste plus qu'à classer les résultats par similarité.
Par contre, je ne vois pas comment utiliser les résultats de SOUNDEX. Il faut à nouveau comparer ces résultats entre eux. Et SOUNDS LIKE et trop binaire.
Marsh Posté le 14-04-2006 à 14:54:58
similar_text() fonctionen dans ton cas car le champ sur lequel tu effectues ta recherche dans la table ne contient qu'un mot, donc ça va, tu peux faire ce post traitement avec PHP. Mais si le champ contenait plusieurs mots, là, ça marche plus (à moins que similar_text() ait été intégré à MySQl depuis)...
Marsh Posté le 13-04-2006 à 11:49:53
Bonjour,
Je réalise en ce moment un site en PHP/MySQL.
Un exemple sera plus clair:
Un utilisateur entre le mot Sthrasbour dans une zone de texte (oui il est con).
La page web affiche toutes les lignes de la table dont le champs nom_ville ressemble à ce mot.
Quel algo de "comparaison" faut-il utiliser pour réaliser cela?
Merci
pierre