我需要为某个要求编写一个解决方案,我想知道是否有人熟悉可以实现它的现成库,或者可以指导我最佳实践。描述:
用户输入一个应该是几个固定选项之一的单词(我将选项保存在一个列表中)。我知道输入必须在列表中的成员中,但由于是用户输入,他/她可能犯了错误。我正在寻找一种算法,它可以告诉我用户最可能的意思是什么。我没有任何上下文,我不能强迫用户从列表中选择(即他必须能够自由地手动输入单词)。
例如,假设列表包含单词“water”、“quartz”、“beer”、“beet”、“hell”、“hello”和“aardvark”。
解决方案必须考虑不同类型的“正常”错误:
- 速度拼写错误(例如双字符、删除字符等)
- 键盘相邻字符拼写错误(例如“水”的“qater”)
- 非母语英语拼写错误(例如,“quater”代表“季度”)
- 等等...
显而易见的解决方案是逐个字母进行比较,并对每个不同的字母、多余的字母和缺失的字母给予“惩罚权重”。但是这个解决方案忽略了我确定在某处列出的数千个“标准”错误。我确信有一些启发式方法可以处理所有特定和一般情况,可能使用标准不匹配的大型数据库(我对数据密集型解决方案持开放态度)。
我正在用 Python 编码,但我认为这个问题与语言无关。
有什么建议/想法吗?