Ho bisogno di codificare una soluzione per un determinato requisito, e volevo sapere se qualcuno ha familiarità con una libreria pronta all'uso che può ottenerlo o può indirizzarmi a la migliore pratica. Descrizione:Algoritmo per confrontare parole (non in ordine alfabetico)
L'utente immette una parola che dovrebbe essere una delle varie opzioni fisse (tengo le opzioni in una lista). So che l'input deve essere presente in un membro nell'elenco, ma dal momento che è un input dell'utente, potrebbe aver commesso un errore. Sto cercando un algoritmo che mi dirà qual è la parola più probabile che l'utente intendesse. Non ho alcun contesto e non posso costringere l'utente a scegliere da una lista (cioè, deve essere in grado di inserire la parola liberamente e manualmente).
Ad esempio, dite che l'elenco contiene le parole "acqua", "quarto", "birra", "barbabietola", "inferno", "ciao" e "aardvark".
La soluzione deve tenere conto di diversi tipi di "normali" errori:
- errori di battitura Velocità (es raddoppio caratteri, lasciando cadere caratteri ecc)
- tastiera adiacente caratteri errori di battitura (ad esempio "Qater" per “acqua “)
- non-native errori di battitura in inglese (ad esempio "quater" per‘quarto’)
- e così via ...
La soluzione ovvia è confrontare lettera per lettera e dare "pesi di penalità" a ciascuna lettera, lettera aggiuntiva e lettera mancante. Ma questa soluzione ignora migliaia di errori "standard", sono sicuro che sono elencati da qualche parte. Sono sicuro che ci sono delle euristiche là fuori che trattano tutti i casi, sia specifici che generali, probabilmente usando un ampio database di mismatch standard (sono aperto a soluzioni pesanti per i dati).
Sto codificando in Python ma considero questa domanda linguaggio-agnostico.
Eventuali suggerimenti/pensieri?