Je dois coder une solution pour une certaine exigence, et je voulais savoir si quelqu'un connaissait une bibliothèque disponible dans le commerce ou pouvait me diriger la meilleure pratique. Description:Algorithme de comparaison de mots (non alphabétique)
L'utilisateur saisit un mot qui est supposé être l'une des nombreuses options fixes (je garde les options dans une liste). Je sais que l'entrée doit être dans un membre de la liste, mais comme il s'agit d'une entrée de l'utilisateur, il/elle peut avoir fait une erreur. Je cherche un algorithme qui me dira quel est le mot le plus probable que l'utilisateur ait voulu dire. Je n'ai aucun contexte et je ne peux pas forcer l'utilisateur à choisir parmi une liste (c'est-à-dire qu'il doit être capable de saisir le mot librement et manuellement). Par exemple, disons que la liste contient les mots «eau», «quartier», «bière», «betterave», «enfer», «bonjour» et «aardvark».
La solution doit tenir compte des différents types d'erreurs « normales »:
- fautes de frappe de vitesse (par exemple caractères doubler, laissant tomber des caractères, etc.)
- clavier de fautes de frappe à côté caractères (par exemple « Qater » pour « l'eau «)
- fautes de frappe Anglais non-indigènes (par exemple "quater" pour « trimestre »)
- Et ainsi de suite ...
La solution évidente consiste à comparer lettre par lettre et à donner des «poids de pénalité» à chaque lettre différente, lettre supplémentaire et lettre manquante. Mais cette solution ignore des milliers d'erreurs «standard» dont je suis sûr qu'elles sont répertoriées quelque part. Je suis sûr qu'il existe des heuristiques qui traitent de tous les cas, à la fois spécifiques et généraux, en utilisant probablement une grande base de données de discordances standard (je suis ouvert aux solutions lourdes de données).
Je suis en train de coder en Python mais je considère cette question comme étant indépendante de la langue.
Des recommandations/pensées?