Necesito codificar una solución para un cierto requisito, y quería saber si alguien está familiarizado con una biblioteca disponible en el mercado que puede lograrlo, o puede dirigirme a la mejor práctica. Descripción:Algoritmo para comparar palabras (no alfabéticamente)
El usuario ingresa una palabra que se supone que es una de varias opciones fijas (tengo las opciones en una lista). Sé que la entrada debe estar en un miembro de la lista, pero dado que es una entrada del usuario, es posible que haya cometido un error. Estoy buscando un algoritmo que me diga cuál es la palabra más probable que el usuario quiso decir. No tengo ningún contexto y no puedo forzar al usuario a elegir de una lista (es decir, debe poder ingresar la palabra libre y manualmente).
Por ejemplo, supongamos que la lista contiene las palabras "agua", "cuarto", "cerveza", "remolacha", "infierno", "hola" y "aardvark".
La solución debe tener en cuenta diferentes tipos de errores "normales":
- errores tipográficos velocidad (por ejemplo doblando caracteres, dejando caer caracteres, etc)
- teclado caracteres adyacente errores tipográficos (por ejemplo, "Qater" para “agua “)
- errores tipográficos no nativos de inglés (por ejemplo, "quater" para‘cuarto’)
- Y así sucesivamente ...
La solución obvia es comparar letra por letra y dar "pesos de penalización" a cada letra diferente, letra extra y letra faltante. Pero esta solución ignora miles de errores "estándar" que estoy seguro que figuran en alguna parte. Estoy seguro de que hay heurísticas que se ocupan de todos los casos, tanto específicos como generales, probablemente usando una gran base de datos de desajustes estándar (estoy abierto a soluciones de datos pesados).
Estoy codificando en Python, pero considero que esta pregunta es independiente del idioma.
¿Alguna recomendación/idea?