Comment détecter une faute de frappe dans une recherche de produit et proposer d’éventuelles corrections ?

StackOverflow https://stackoverflow.com/questions/487003

Question

Étant donné une très grande base de données de noms de produits, comment détecteriez-vous d'éventuelles fautes de frappe dans les recherches des utilisateurs et suggéreriez-vous des corrections possibles (un peu comme la façon dont Google les présente) ?

Par exemple.

L'utilisateur saisit « fork handels » et appuie sur « recherche ».

Ils reviennent

"Aucun résultat.Vouliez-vous dire 'fork handles' ?"

Était-ce utile?

La solution

Il existe plusieurs approches pour résoudre ce problème :

  1. Tenir une table de fautes d'orthographe les plus courantes dans votre base de données.Si vous avez besoin de fautes d'orthographe courantes : ici)
  2. En utilisant un algorithme basé sur modifier la distance:En théorie de l'information et en informatique, la distance d'édition entre deux chaînes de caractères est le nombre d'opérations nécessaires pour transformer l'une en l'autre.Il existe plusieurs algorithmes différents pour définir ou calculer cette métrique.Lis le Article Wikipédia sur l'algorithme de Levenshtein Par exemple.
  3. Si vous utilisez Lucene pour la recherche en texte intégral, voici un bel article qui montre comment implémenter la fonctionnalité « Voulez-vous dire ? ».
  4. Si vous considérez cette fonctionnalité comme une simple correction orthographique, voici quelques implémentations intéressantes et très courtes dans plusieurs langues : Comment rédiger un correcteur orthographique

Autres conseils

Vous pourriez utiliser un algorithme phonétique, tel que Soundex pour trouver des correspondances qui se ressemblent.

PostgreSQL a un module nommé match flou, avec les documents montrant des exemples d'utilisation de Soundex, Levenshtein, Metaphone et Double Metaphone.

Je suis sûr d'avoir lu que Google conserve une liste de ce qu'un utilisateur retape lorsqu'il n'obtient aucun résultat.Vous pouvez conserver un mappage de ces valeurs (par exemple si la chaîne retapée commence par la même lettre).

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top