J'utilise la distance levenshtein pour reconnaître les mots clés malgré les fautes de frappe, mais je me demande jusqu'à quelle valeur la faute de frappe est toujours une faute de frappe ou doit être considérée comme un mot différent. Je compare seulement l'entrée avec certains mots clés, donc je n'ai pas du tout besoin d'utiliser la grammaire ou le contexte.
Par exemple, les mots "chat" et "bat" ont une distance de levenshtein de 1, ce qui pourrait très bien être une faute de frappe, mais "cut" et "bat" ont une distance de 2 et ne sont probablement pas ce que l'utilisateur voulait dire .
EDIT: À quel point l'UX souffre-t-il de la reconnaissance des mots-clés malgré que l'utilisateur n'a pas l'intention de les taper. Par exemple, le mot clé "service" peut être reconnu à partir de "srrvice" ou "Servce", mais ne doit pas être reconnu à partir de "Servant", 3 fautes de frappe est un peu trop. Mais où dois-je tracer la ligne? Est-ce que "Servufe" devrait toujours être reconnu comme "service" ou est-ce que l'utilisateur serait plutôt perturbé par ma demande qui le reconnaît.
J'ai pensé à peut-être autoriser 1 levenshtein "point" pour chaque 4 ou deux lettres de l'entrée, car plus un mot est long, plus il pourrait y avoir de fautes de frappe, mais je ne sais pas si c'est une évaluation valide.
Je n'ai rien trouvé sur ce sujet sur le net, alors, combien de fautes de frappe devraient être autorisées pour qu'un mot soit reconnu?
Une distance d'édition d'un ou deux sera suffisante pour la grande majorité des fautes de frappe des utilisateurs (... mais il y a beaucoup à faire dit à ce sujet)
En ce qui concerne l'algorithme, une faute de frappe n'est une faute de frappe que lorsque le mot tapé ne correspond à aucun mot du dictionnaire local ou ne correspond pas au contexte grammatical . Je crois que votre question est: " quand dois-je faire une autocorrection? " C'est un domaine de recherche actif en Natural Language Processing = et n'a pas de réponse évidente. Il y a de bons articles sur le sujet, par exemple celui-ci . L'auteur propose même une première approche:
Nous allons commencer par former un correcteur orthographique rudimentaire mais apparemment puissant. Voici notre algorithme.
- Vérifiez si le mot d'erreur est valide en anglais, si c'est le cas, renvoyez-le, sinon continuez.
- Trouvez le mot à 1 distance de modification du mot d'erreur et qui se produit le plus dans le corpus et renvoyez-le, si aucun ne peut être trouvé, continuez.
- Trouvez le mot valide à moins de 2 distance de modification du mot d'erreur et qui se produit le plus dans le corpus et renvoyez-le, s'il n'en trouve aucun, continuez.
- Le correcteur d'orthographe a échoué, renvoyez le mot d'erreur.
Nous faisons quelques hypothèses. Premièrement, nous supposons que si un mot est dans notre corpus, ce n'est pas une erreur. Ensuite, nous supposons que la distance d'édition est le seul facteur affectant le modèle d'erreur. Enfin, nous supposons que les erreurs ne se produiront que dans un rayon de 1 ou 2. Ce n'est pas une mauvaise hypothèse, car environ 75% des erreurs sont à moins d'une distance de modification et presque toutes sont à moins de 2 distance de modification (sur la base des données d'entraînement des erreurs que vous verrez plus tard).
Dans ce cas, l'auteur considère chaque erreur au-dessus de la distance 2 comme une véritable erreur. Dans sa deuxième tentative, il ajoute un moteur probabiliste pour améliorer ses résultats (encore amélioré dans une troisième tentative). Je ne transcrirai pas sa méthodologie ici car elle est complète mais ça vaut le coup d'être lu.
Quelques commentaires généraux sur ce sujet
Vous n'avez pas spécifié le type d'interface utilisateur ou de logiciel que vous essayez de créer. Cependant, les utilisations courantes de métriques de chaîne sont:
Ce ne sont pas les métriques de chaîne qui perturbent, mais l'interface utilisateur conçue pour informer l'utilisateur d'un mot ou d'un contexte inconnu. Cette interface utilisateur dépend de l'objectif. Par exemple Achèvement de la ligne de commande (également connu sous le nom d'achèvement de tabulation) est une utilisation extrêmement utile d'une seule clé pour parcourir tous les choix compatibles concernant ce que l'utilisateur a déjà tapé et tous les fichiers dans le "dossier actuel" (le "dictionnaire local" typique pour une ligne de commande).
Traitement de texte s'appuyer sur des dictionnaires beaucoup plus complexes (voir par exemple Hunspell ) pour corriger les mots. Ils ont généralement également des systèmes pour permettre à l'utilisateur de mettre à jour le logiciel avec un nouveau mot (afin qu'il ne provoque pas d'erreur la prochaine fois qu'il est utilisé). Voir, par exemple, cette description wikipedia sur l'utilisation (ou non) d'un dictionnaire :
La désambiguïsation traditionnelle fonctionne en référençant un dictionnaire de mots couramment utilisés, bien qu'Eatoni propose un système de désambiguïsation sans dictionnaire.
Dans les systèmes basés sur un dictionnaire, lorsque l'utilisateur appuie sur les touches numériques, un algorithme recherche dans le dictionnaire une liste de mots possibles correspondant à la combinaison de touches, et propose le plus probable choix . L'utilisateur peut alors confirmer la sélection et continuer ou utiliser une touche pour parcourir les combinaisons possibles .
Un système sans dictionnaire construit des mots et d'autres séquences de lettres à partir des statistiques des parties Word. Pour tenter de prédire le résultat escompté de frappes non encore entrées, la désambiguïsation peut être combinée avec une fonction de complétion de Word.
L'un ou l'autre système (désambiguïsation ou prédictif) peut inclure une base de données utilisateur , qui peut être classée comme un "apprentissage" système lorsque des mots ou des phrases sont entrés dans la base de données utilisateur sans utilisateur direct La base de données des utilisateurs sert à stocker des mots ou des phrases qui ne sont pas bien désambiguïsés par la base de données pré-fournie. Certains systèmes de désambiguïsation tentent en outre de corriger l'orthographe, de formater le texte ou d'effectuer d'autres réécritures automatiques, avec pour effet risqué d'améliorer ou de frustrer les efforts des utilisateurs pour saisir du texte.
Cela étant dit, je vous recommande de construire une liste de choix probables (en les classant avec distance Levenshtein ) et de corriger le mot uniquement lorsqu'il n'existe pas dans le dictionnaire local. Fournissez une option pour mettre à jour le dictionnaire local avec des mots d'utilisateur (voir par exemple comment Office Word le fait , ou appui long sur Android ).
Notez que les capacités d'apprentissage de dictionnaire ne doivent pas être activées par une action délibérée de l'utilisateur. Permettez-moi de citer un article intéressant sur le sujet :
Dans sa forme la plus élémentaire, la prédiction au clavier utilise du texte que vous entrez au fil du temps pour créer un "dictionnaire" local et personnalisé de mots et d'expressions que vous avez tapés à plusieurs reprises. Il "note" ensuite ces mots selon la probabilité que vous les utilisiez ou en ayez de nouveau besoin. Par exemple, si vous tapez "lifehacker" et que votre clavier ne vous a jamais vu l'utiliser auparavant, il vous proposera de le corriger avec une autre phrase qu'il pense plus probable (non, je ne veux pas dire "gilet de sauvetage"). Vous avez trois options: vous pouvez accepter l'une de leurs corrections, vous pouvez ignorer le mot et le laisser tel quel, ou vous pouvez l'ajouter à votre dictionnaire personnel afin qu'il ne vous dérange pas lorsque vous le tapez à nouveau.
Si vous acceptez une correction, il est évident que le clavier continuera de supposer que le mot est faux et proposera des corrections à l'avenir. Si vous l'ajoutez à votre dictionnaire, le clavier "apprend" le mot immédiatement et l'offrira la prochaine fois que vous entrerez un modèle d'orthographe proche de ces touches, ou utiliserez des mots similaires avant et après la phrase mais mal orthographié "lifehacker". " Les choses deviennent intéressantes si vous ignorez la Parole - de bons claviers prédictifs utilisent même votre manque d'action pour apprendre de vos habitudes de frappe. La première ou la deuxième fois que vous ignorez le mot, il supposera que ce n'est pas une faute d'orthographe, mais pas un mot vous utilisez souvent suffisamment pour être présenté dans des schémas d'utilisation similaires. Si vous l'ignorez une troisième ou quatrième fois (le nombre de fois dépend du spécifique clavier), votre clavier le marquera comme un choix probable futur, et commencez à vous le présenter lorsque vous tapez des mots ou des phrases similaires.
Pas une réponse directe pour vous, mais j'espère que cette perspicacité vous aidera.
J'envisagerais de regarder la disposition d'un clavier, pour chaque caractère il y a un nombre possible d'erreurs, ou fautes de frappe, qui peuvent être faites en fonction des touches environnantes. Les fautes de frappe se produisent généralement lorsqu'un utilisateur appuie accidentellement sur une touche environnante, sinon, c'est une faute d'orthographe.
Donner à l'utilisateur quelques options parmi lesquelles choisir (comme les téléphones portables) peut éliminer les suggestions incorrectes du système car vous pouvez rencontrer des anomalies. Par exemple, je voulais taper cheese mais je fais une faute de frappe et taper chesse. Le système corrige-t-il automatiquement cela en échecs ou en fromage? Cela aide lorsque le système ne parvient pas à comprendre le contexte de la phrase.