Où puis-je trouver des statistiques sur les fautes de frappe dans le monde réel ?
J'essaie de faire correspondre le texte saisi par les gens à des objets internes, et les gens ont tendance à faire des fautes d'orthographe.
Il y a 2 types d'erreurs :
-
typos
- "Helllo" au lieu de "Hello" / "Satudray" au lieu de "Saturday", etc. -
Spelling
- "Shikago" au lieu de "Chicago".
J'utilise Distance Damerau-Levenshtein pour les fautes de frappe et Double Métaphone pour l'orthographe (implémentations Python aquí y aquí ).
Je veux me concentrer sur la méthode Damerau-Levenshtein (ou simplement edit-distance
). Les implémentations des manuels utilisent toujours '1' pour le poids des suppressions, insertions, substitutions et transpositions. Bien que cela soit simple et permette de créer de beaux algorithmes, cela ne correspond pas à la "réalité" / aux "probabilités du monde réel".
Exemples :
- Je suis sûr que la probabilité de "Helllo" ("Bonjour") est plus grande que celle de "Helzlo", pourtant ils sont tous deux à une distance d'une édition.
- "Gello" est plus proche que "Qello" de "Hello" sur un clavier QWERTY.
- Translittérations Unicode : Quelle est la distance "réelle" entre "München" et "Munchen" ?
Quelles devraient être les pondérations du "monde réel" pour les suppressions, insertions, substitutions et transpositions ?
Même Le très cool correcteur d'orthographe de Norvig utilise la distance d'édition non pondérée.
BTW- Je suis sûr que les poids doivent être des fonctions et non pas de simples flottants (selon les exemples ci-dessus)...
Je peux ajuster l'algorithme, mais où puis-je "apprendre" ces poids ? Je n'ai pas accès à Données à l'échelle de Google ...
Je dois les deviner ?
EDIT - j'essaie de répondre aux questions des utilisateurs :
- Mon algorithme non pondéré actuel échoue souvent lorsqu'il est confronté à des coquilles pour les raisons susmentionnées. "Return on Tursday" : toute "vraie personne" peut facilement dire que le jeudi est plus probable que le mardi, et pourtant ils sont tous les deux à une distance d'une édition ! (Oui, j'enregistre et mesure mes performances).
- Je développe un moteur de recherche de voyage NLP, mon dictionnaire contient donc ~25K destinations (qui devraient passer à 100K), des expressions temporelles ~200 (1K prévu), des expressions de personnes ~100 (300 prévu), des expressions d'argent ~100 (500 prévu), des "mots logiques de colle" ("de", "beau", "appartement") ~2K (10K prévu) et ainsi de suite...
- L'utilisation de la distance d'édition est différente pour chacun des groupes de mots ci-dessus. J'essaie d'"auto-corriger quand c'est évident", c'est-à-dire à 1 distance d'édition d'un seul autre mot du dictionnaire. J'ai beaucoup de d'autres règles adaptées à la main, par exemple le double métaphone qui ne se trouve pas à plus de 2 distances d'édition d'un mot du dictionnaire d'une longueur > 4... La liste des règles continue de s'allonger au fur et à mesure que j'apprends à partir de données réelles.
- "Combien de paires d'entrées de dictionnaire se situent dans votre seuil ?": eh bien, cela dépend du "système de pondération fantaisiste" et des données réelles (futures), n'est-ce pas ? Quoi qu'il en soit, j'ai mis en place des tests unitaires approfondis afin que chaque modification apportée au système ne fasse que l'améliorer (en fonction des entrées passées, bien sûr). La plupart des mots de moins de 6 lettres sont à une distance d'édition d'un mot qui est à une distance d'édition d'une autre entrée du dictionnaire.
- Aujourd'hui, lorsqu'il y a deux entrées de dictionnaire à la même distance de l'entrée, j'essaie d'appliquer diverses statistiques pour mieux deviner ce que l'utilisateur voulait dire (par exemple, Paris, France a plus de chances d'apparaître dans ma recherche que Pārīz, Iran).
- Le coût du choix d'un mot erroné est de renvoyer des résultats semi-aléatoires (souvent ridicules) à l'utilisateur final et de perdre potentiellement un client. Le coût de l'incompréhension est légèrement moins élevé : l'utilisateur sera invité à reformuler sa réponse.
- Le coût de la complexité en vaut-il la peine ? Oui, je suis sûr que oui. Vous n'imaginez pas la quantité de fautes de frappe que les gens envoient au système et attendent de lui qu'il les comprenne. Précision et rappel .