Programmation Web Avancée

Blogue

Les cours

Les recherches phonétiques avec PHP


Rédigé par , le
Récemment, j’ai dû faire de la consultation pour un client qui est actuellement en train de développer un site Web d’envergure et qui faisait face à un problème lors d'une recherche à la base de données.

Ce site, comme la plupart des sites Web 2.0, possède un formulaire d’enregistrement pour les membres. Pour s’abonner au site, ceux-ci doivent entrer, entre autres, la ville où ils habitent.

Afin d’être plus convivial, le champ où l’usager entre le nom de sa ville possède une fonction autocomplete. L’usager tape donc les premières lettres de sa ville, et une liste de villes avec le même préfixe de nom apparait. Le fonctionnement est similaire à Google Instant Search. Il faut dire que cette fonction permet d’uniformiser le nom des villes des membres. Il ne peut donc pas y avoir « QC » comme nom de ville, seulement « Québec ». Les recherches à la base de données en filtrant selon les villes sont également possibles dues à cette unification.

Hélas, cette fonctionnalité n’était pas parfaite. La requête à la base de données pour la recherche des villes par préfixe ressemblait à celle-ci :

SELECT * FROM city WHERE name LIKE 'Montré %';
SELECT * FROM city WHERE name LIKE 'Saint-E%';

De prime abord, tout semble bien, mais certaines personnes, en entrant leur ville, font des erreurs ou écrivent des variances :
SELECT * FROM city WHERE name LIKE 'Montrré %';
SELECT * FROM city WHERE name LIKE 'St-E%';

La base de données ne retournant pas leur ville, certains utilisateurs ont donc pensé qu'elle n'était pas disponible et ont demandé l'ajout de ces villes qui sont pourtant déjà dans la base de données.

La solution, faire une recherche selon la prononciation. Ou en d’autres mots, effectuer une recherche phonétique.

PHP offre quelques fonctions permettant de faire une recherche phonétique. Prenons par exemple la fonction metaphone(). Cette fonction permet de prendre une chaîne de caractères et de retourner une clé selon sa prononciation.

Par exemple,
metaphone(‘Montreal’);            // Retourne MNTRL
metaphone(‘Moonntrreeal’)         // Retourne également MNTRL

Ainsi, en sauvegardant dans la base de données la clé retournée de la fonction metaphone() pour chaque ville, il est possible de faire une recherche basée non plus sur l’orthographe, mais plutôt sur la prononciation des mots.
SELECT * FROM city WHERE metaphone_key LIKE 'MNT%';

Montreal, Montréal, MoonTreal et Mondreal retourne tous la même clé : MNTRL. Donc la ville Montréal peut être retournée à l’usager malgré une orthographe imparfaite.


À considérer : Metaphone est un algorithme qui retourne les valeurs selon la prononciation anglaise des mots. Il existe cependant des alternatives pour le français sur le Web.

Ajouter votre commentaire
(facultatif)
(facultatif et non divulgé)
Captcha image
Prenez le nombre affiché et faites moins 1.
 
Blog  

Les articles


Pour envoyer une demande d'assistance à l'enseignant, cliquez ici