我正在尝试计算字符串与集合的编辑距离,以找到最接近的匹配项。我目前的问题是集合非常大(大约25000个项目),所以我不得不将集合缩小到相似长度的字符串,但仍然只能将其缩小到几千个字符串,这仍然非常慢。是否存在允许快速查找类似字符串的数据结构,还是有其他方法可以解决此问题?
答案 0 :(得分:8)
听起来像BK-tree可能就是你想要的。这是一篇讨论它们的文章:http://blog.notdot.net/2007/4/Damn-Cool-Algorithms-Part-1-BK-Trees。 quick Google产生了一些Java实现。
答案 1 :(得分:6)
Levenshtein Automata允许从大字典中快速选择一组单词,使得它们与给定单词在给定的Levenshtein距离内。
见:Schulz K,Mihov S.(2002)Fast String Correction with Levenshtein-Automata。
答案 2 :(得分:2)
如果“类似”的标准定义了总排序,则应该能够定义比较器并使用TreeSet查找最接近的匹配(例如,使用天花板和地板方法)。