我有一个~10M实体的列表。我需要将用户输出的实体与列表中的实体进行匹配。用户经常拼错实体(即orang而不是orange)。我需要更正1-2个字母替换实例(aca而不是aba),插入字母(aca而不是ac)和删除字母(aca而不是acca)。我希望在实体列表的大小不变的情况下这样做。
制作一个字母,列出所有可能的1-2个字母的拼写将是恒定的时间,但需要一个难以处理的大量内存。编辑距离相对于实体列表的大小在时间上是线性的。我认为可能有一种聪明的算法可以将候选匹配修剪为< 100(可能通过实体中字母的巧妙散列)。然后我可以在一小组候选人上运行编辑距离。
有谁知道这种技术会起作用吗?
答案 0 :(得分:1)
除了Matt评论中的链接文档(建议仅通过删除生成/比较/搜索),您可以尝试使用DAWG aka MADFA aka DAFSA来存储所有可能的距离= 2个单词。例如,对于Python,有pyDAWG。不确定节省的空间是否足以满足您的需求,因为这取决于语言,但如果您的词缀相似,则可能非常重要:每次替换/删除只是一个额外的弧,每次插入只有一个节点