Java 提高字典中模糊字符串匹配的性能

Java 提高字典中模糊字符串匹配的性能,java,data-structures,Java,Data Structures,因此,我目前正在使用模糊字符串匹配,在这里我有一个大型字典可供比较(字典中的每个条目都有一个关联的非唯一标识符)。我目前正在使用hashMap存储此词典 当我想进行模糊字符串匹配时,我首先检查字符串是否在hashMap中,然后迭代所有其他可能的键,计算字符串相似性并存储具有最高相似性的k,v对/s。根据我使用的词典,这可能需要很长时间(12330-1800035条)。有没有办法加快速度或使之更快?我目前正在编写一个记忆函数/表格,作为加速的一种方法,但是其他人能想出更好的方法来提高速度吗?也许是

因此,我目前正在使用模糊字符串匹配,在这里我有一个大型字典可供比较(字典中的每个条目都有一个关联的非唯一标识符)。我目前正在使用hashMap存储此词典

当我想进行模糊字符串匹配时,我首先检查字符串是否在hashMap中,然后迭代所有其他可能的键,计算字符串相似性并存储具有最高相似性的k,v对/s。根据我使用的词典,这可能需要很长时间(12330-1800035条)。有没有办法加快速度或使之更快?我目前正在编写一个记忆函数/表格,作为加速的一种方法,但是其他人能想出更好的方法来提高速度吗?也许是一个不同的结构或者是我缺少的其他东西

多谢各位


Nathan

你要找的是一个结合了Levenshtein距离算法的BK树(BK树)。BKtree中的查找性能取决于搜索的“模糊”程度。其中fuzzy定义为搜索词和匹配项之间的距离(编辑)数

以下是一个关于这个主题的好博客:

关于性能的一些注意事项:

算法说明


另外,这里有一个用Java编写的BK树。应该给您一个界面的概念:

或者您也可以使用Java Fuzzy HashMap(Java HashMap的一个扩展,允许模糊搜索):我认为它正是您所需要的。这里有一个完整的数据结构描述:

请参阅这篇优秀的文章,了解不同模糊字符串匹配的解释和比较:

java源代码可在

这是一个技术问题。需要注意的是,如果搜索键少于5个字符,它将不会返回任何内容。您可以修改源代码,但有评论说,在测试少于5个字母的键时,源代码的准确性很差。此外,虽然BK树将返回一个接近匹配的列表,但FuzzyHashMap仅返回一个模糊匹配。再说一次,我认为这个问题很容易解决。