Une approche pour générer des suggestions que j'ai utilisées avec succès mais que je n'ai jamais vues décrites nulle part consiste à pré-calculer les suggestions (lors de la construction du dictionnaire) en utilisant des fonctions de hachage "mauvaises".
L'idée est d'examiner les types d'erreurs d'orthographe que les gens font et de concevoir des fonctions de hachage qui attribueraient une orthographe incorrecte au même compartiment que son orthographe correcte.
Par exemple, une erreur courante consiste à utiliser la mauvaise voyelle, comme definate au lieu de définitif . Vous concevez donc une fonction de hachage qui traite toutes les voyelles comme la même lettre. Une manière simple de le faire est de «normaliser» d'abord le mot d'entrée, puis de placer le résultat normalisé via une fonction de hachage régulière. Dans cet exemple, la fonction de normalisation peut supprimer toutes les voyelles, ainsi le definite
devient dfnt
. Le mot "normalisé" est ensuite haché avec une fonction de hachage typique.
Insérez tous les mots de votre dictionnaire dans un index auxiliaire (table de hachage) à l'aide de cette fonction de hachage spéciale. Les compartiments de ce tableau auront des listes de collisions plus longues car la fonction de hachage est «mauvaise», mais ces listes de collisions sont essentiellement des suggestions précalculées.
Désormais, lorsque vous trouvez un mot mal orthographié, vous recherchez dans les listes de collisions le compartiment auquel la faute d'orthographe correspond dans les index auxiliaires. Ta da: Vous avez une liste de suggestions! Tout ce que vous avez à faire est de classer les mots dessus.
En pratique, vous aurez besoin de quelques index auxiliaires avec d'autres fonctions de hachage pour gérer d'autres types d'erreurs, comme des lettres transposées, une lettre simple / double et même une simple de type Soundex pour détecter les fautes d'orthographe phonétiques. Dans la pratique, j'ai trouvé que les prononciation simplistes allaient très loin et certaines d'entre elles étaient essentiellement obsolètes pour trouver des fautes de frappe triviales.
Vous recherchez maintenant les fautes d'orthographe dans chacun des index auxiliaires et concaténez les listes de collisions avant le classement.
Souvenez-vous que les listes de collisions ne contiennent que les mots du dictionnaire. Avec des approches qui tentent de générer des orthographes alternatives (comme dans l'article de Peter Norvig), vous pouvez obtenir (dizaines de) milliers de candidats que vous devez d'abord filtrer par rapport au dictionnaire. Avec l'approche pré-calculée, vous obtenez peut-être quelques centaines de candidats, et vous savez qu'ils sont tous correctement orthographiés, vous pouvez donc passer directement au classement.
Mise à jour : j'ai depuis trouvé une description d'algorithme similaire à celle-ci, la recherche distribuée FAROO . Il s'agit toujours d'une recherche limitée à la distance d'édition, mais elle est très rapide car l'étape de pré-calcul fonctionne comme mon idée de «mauvaises fonctions de hachage». FAROO utilise simplement un concept limité de mauvaise fonction de hachage.