Recherche approximative

algorithme qui consiste à trouver des chaînes de caractères qui correspondent à un motif approximatif plutôt qu'à une correspondance exacte

En informatique, la recherche approximative ou recherche floue (fuzzy search en anglais) est le problème qui consiste à trouver des chaînes de caractères qui correspondent à un motif approximatif plutôt qu'à une correspondance exacte. Le problème de recherche approximative est généralement divisé en deux sous-problèmes : trouver des correspondances de sous-chaînes approximatives dans une chaîne donnée et trouver des entrées de dictionnaire qui correspondent approximativement au motif.

Fuzzy Mediawiki search for "angry emoticon": "Did you mean: andré emotions"

Distances entre mots

modifier

La proximité entre deux chaînes est mesurée par le nombre d'opérations primitives nécessaires pour transformer la chaîne d'entrée E en chaîne d'arrivée E'. Cette valeur est appelée la distance d'édition (ou distance de Levenshtein) entre la chaîne et le motif. Les opérations primitives courantes sont :

  • l'insertion : coucoup ;
  • la suppression : coupcou ;
  • la substitution : coupcout.

Ces trois opérations peuvent être généralisées comme des formes de substitution en ajoutant un caractère NULL, ici représenté par l'astérisque, quand un caractère a été inséré ou supprimé :

  • l'insertion : cou* → coup ;
  • la suppression : coupcou* ;
  • la substitution: coup → cout.

Certains moteurs d'approximation traitent également la transposition, c.-à-d. l'échange de deux lettres dans la chaîne, comme une opération primitive. Par exemple, cout → touc est une transposition.

Différents moteurs d'approximation imposent différentes contraintes. Certains utilisent un coût unique global non-pondéré, c.-à-d. le nombre total d'opérations primitives nécessaires pour convertir une correspondance vers le motif. Par exemple, si le motif est « cout », le terme « tout » diffère par une substitution, « couts » par une insertion, « cou » par une suppression et « fou » par une substitution et une suppression. Si toutes les opérations ont un coût de 1 et que la contrainte est définie à 1, alors « tout », « couts », « cou » sont des correspondances valides tandis que « fou » sera rejeté.

Certains moteurs d'approximation comptabilisent séparément le nombre d'opérations de chaque type, d'autres définissent un coût total mais utilisent différentes pondérations pour chaque opération. Il est également possible de fixer des contraintes et des pondérations à différents groupes dans le motif.

Une autre mesure de similarité est la distance de Jaro-Winkler.

Problème algorithmique

modifier

Une fois la distance fixée, les deux problèmes algorithmiques classiques sont les suivants.

  • Étant donné un long texte, un motif et un entier k, trouver les positions du texte où le motif est approximativement présent, c'est-à-dire que le texte contient une chaîne à distance au plus k du motif recherché[1].
  • Étant donné une chaîne de caractères et un dictionnaire, trouver une chaîne du dictionnaire qui minimise la distance au mot donné en entrée.

Applications

modifier

L'application la plus courante de la recherche approximative était jusqu'à récemment les correcteurs orthographiques. Avec la mise à disposition de larges jeux de données sur l'ADN, la recherche de séquence de nucléotides est devenue une application importante. C'est également une méthode utilisée dans la lutte anti-spam. Cette méthode n'est cependant pas adaptée aux données binaires (p. ex. images ou la musique), qui nécessitent des approches différentes telles que les algorithmes d'empreinte acoustique.

Voir aussi

modifier

Notes et références

modifier
  1. Gonzalo Navarro, Ricardo Baeza-Yates, E. Sutinen et J. Tarhio, « Indexing Methods for Approximate String Matching », IEEE Data Engineering Bulletin, vol. 24, no 4,‎ , p. 19-27 (lire en ligne)

Liens externes

modifier