Ce que l'algorithme donne des suggestions dans un correcteur orthographique?
Quel algorithme est généralement utilisé lors de la mise en œuvre d'un correcteur orthographique qui est accompagné de suggestions de mots?
Au début, j'ai pensé qu'il pourrait être utile de vérifier chaque mot tapé (si elle ne trouve pas dans le dictionnaire) contre c'est Levenshtein de tous les autres mots dans le dictionnaire et retourner le haut des résultats. Toutefois, cela semble être qu'il serait très inefficace, d'avoir à évaluer la totalité du dictionnaire à plusieurs reprises.
Comment est-ce fait habituellement?
Vous devez vous connecter pour publier un commentaire.
Il est bon essai de Peter Norvig comment mettre en œuvre un correcteur orthographique. C'est essentiellement une approche par force brute essayer candidat de chaînes avec une distance d'édition. (Ici sont quelques conseils comment vous pouvez améliorer le correcteur orthographique de la performance à l'aide d'un Filtre De Bloom et plus vite candidat de hachage.)
Les exigences pour un vérificateur d'orthographe sont plus faibles. Vous avez seulement pour découvrir qu'un mot n'est pas dans le dictionnaire. Vous pouvez utiliser un Filtre De Bloom de construire un vérificateur d'orthographe qui consomme moins de mémoire. Une ancienne versions est décrit dans La Programmation Des Perles par Jon Bentley à l'aide de 64 ko pour un dictionnaire d'anglais.
Un BK-Arbre est une approche alternative. Un bel article est ici.
Levenshstein distance n'est pas exactement à la bonne distance d'édition pour un correcteur orthographique. Il ne connaît que l'insertion, la suppression et la substitution. La Transposition est manquant et produit 2 pour une transposition de 1 caractère (c'est 1 supprimer et 1 insertion). Distance de damerau–Levenshtein est le droit de modifier à distance.
Une approche pour générer des suggestions que j'ai utilisé avec succès mais jamais vu de figure nulle part est à pré-calculer les suggestions (lors de la construction du dictionnaire) à l'aide de "mauvais" fonctions de hachage.
L'idée est de regarder les types de fautes d'orthographe font les gens, et à la conception de fonctions de hachage qui permettrait d'attribuer une orthographe incorrecte le même compartiment que son orthographe correcte.
Par exemple, une erreur commune est d'utiliser le mauvais voyelle, comme toujours influencé au lieu de définitive. Afin de vous concevoir une fonction de hachage qui traite de toutes les voyelles que la même lettre. Un moyen facile de le faire est d'abord de "normaliser" le mot d'entrée et ensuite mettre le résultat normalisé par l'intermédiaire d'un régulier de la fonction de hachage. Dans cet exemple, la fonction de normalisation peut tomber toutes les voyelles, donc
definite
devientdfnt
. Le "normalisé" la parole est ensuite hachée typique d'une fonction de hachage.Insérer tous vos mots de dictionnaire un auxiliaire de l'index (table de hachage) à l'aide de cette spéciale de fonction de hachage. Les seaux dans ce tableau ont allongé la collision des listes en raison de la fonction de hachage est "mauvais", mais ceux de collision listes sont essentiellement pré-calculé suggestions.
Maintenant, lorsque vous trouvez un mot mal orthographié, vous regardez en haut de la collision des listes pour le seau que la faute d'orthographe cartes à l'auxiliaire d'index. Ta da: Vous avez une liste de suggestion! Tout ce que vous avez à faire est de classer les mots.
Dans la pratique, vous aurez besoin d'un peu d'auxiliaire d'index avec d'autres fonctions de hachage pour gérer d'autres types d'erreurs, comme la transposée de lettres, simple/double lettre, et même simpliste Soundex-comme un catch phonétique des fautes d'orthographe. Dans la pratique, j'ai trouvé simpliste de la prononciation à aller un long chemin et est essentiellement désuet certains de ceux conçus pour trouver trivial fautes de frappe.
Alors maintenant vous cherchez des fautes d'orthographe dans chacune des auxiliaires d'index et de concaténer la collision des listes avant le classement.
Souviens de la collision listes contiennent uniquement les mots sont dans le dictionnaire. Avec des approches qui tentent de générer des orthographes alternatives (comme dans le Peter Norvig l'article), vous pouvez obtenir des (dizaines de) milliers de candidats que vous devez d'abord filtre contre le dictionnaire. Avec le pré-calculé approche, vous obtenez peut-être que quelques centaines de candidats, et vous savez qu'ils sont tous correctement orthographié, de sorte que vous pouvez utiliser directement le classement.
Mise à jour: depuis, j'ai trouvé une description d'algorithme qui est semblable à cela, le FAROO de Recherche Distribuée. C'est encore un edit-distance limitée de la recherche, mais il est très rapide car le pré-étape de calcul fonctionne comme mon "mauvais fonctions de hachage" idée. FAROO utilise juste un concept limité d'une mauvaise fonction de hachage.
Algorithme
Imprimer le top 10 des articles de File d'attente de Priorité.
Optimisation
Vous pouvez trouver l'explication plus détaillée et le code source sur projet github.
Vous n'avez pas besoin de connaître l'exacte distance d'édition pour chaque mot dans le dictionnaire. Vous pouvez arrêter l'algorithme après avoir atteint une valeur limite et d'exclure le mot. Cela vous permettra d'économiser beaucoup de temps de calcul.
Correcteur orthographique est très facile à mettre en œuvre comme dans Unix sort du programme. Le code source est disponible au public. La correction peut être impliqué, une technique consiste à réaliser des modifications et vérifiez de nouveau si ce nouveau mot est dans le dictionnaire. Ces nouvelles modifications peuvent être regroupés et présentés à l'utilisateur.
Système Unix utilise un programme écrit par Mc IllRoy. Une alternative est d'utiliser un Trie de ce qui peut être utile dans le cas de gros fichiers.
Unix approche a besoin de moins d'espace pour un plus grand dictionnaire puisqu'il utilise l'éparpillement de l'algorithme de hachage.