【问题标题】:Quickly compare a string against a Collection in Java快速将字符串与 Java 中的集合进行比较
【发布时间】:2012-02-04 08:07:56
【问题描述】:

我正在尝试计算字符串与集合的编辑距离,以找到最接近的匹配项。我目前的问题是集合非常大(大约 25000 个项目),所以我不得不将集合缩小到只有相似长度的字符串,但这仍然只能将其缩小到几千个字符串,这仍然很慢。是否有允许快速查找相似字符串的数据结构,或者有其他方法可以解决这个问题?

【问题讨论】:

  • 你现在怎么样了?你能显示一些代码吗?
  • 相似是指比较常见拼写错误的单词,例如“exanple”和“example”或“weird”和“wierd”。
  • 看起来你想要一个列文斯坦距离的实现:stackoverflow.com/questions/6087281/…
  • 我目前正在这样做: String currentString;列出距离列表; (for word: wordList){ int distance = calculateDistance(currentString,word) distanceList.add(distance) }

标签: java algorithm data-structures pattern-matching edit-distance


【解决方案1】:

听起来像BK-tree 可能是您想要的。这是一篇讨论它们的文章:http://blog.notdot.net/2007/4/Damn-Cool-Algorithms-Part-1-BK-Treesquick Google 产生一些 Java 实现。

【讨论】:

  • 谢谢,我会查一下,告诉你进展如何,谢谢!
  • 是的,它做到了,需要不同的搜索实现,但它是完美的!谢谢!!
【解决方案2】:

Levenshtein Automata 允许从大型词典中快速选择一组单词,以便它们与给定单词的给定 Levenshtein 距离内。

请参阅:Schulz K, Mihov S. (2002) Fast String Correction with Levenshtein-Automata

【讨论】:

    【解决方案3】:

    如果您的“相似”标准定义了总排序,您应该能够定义比较器并使用 TreeSet 来查找最接近的匹配项(例如使用天花板和地板方法)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-02-20
      • 2010-10-06
      • 2012-08-31
      • 1970-01-01
      • 1970-01-01
      • 2010-11-12
      • 2011-10-19
      • 1970-01-01
      相关资源
      最近更新 更多