rechercher dans une base de données

rechercher dans une base de données - Algo - Programmation

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
 

Reply

Marsh Posté le 13-04-2006 à 11:49:53   

Reply

Marsh Posté le 14-04-2006 à 08:17:45    

up

Reply

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

Reply

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

Reply

Marsh Posté le 14-04-2006 à 09:41:22    

merci de tes réponses! je regarde ça tout de suite

Reply

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 :)...

Reply

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.

Reply

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.

Reply

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)...

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed