java - Java 中的模糊字符串搜索,包括单词交换

标签 java fuzzy-search fuzzy-comparison

我是一名 Java 初学者,正在尝试编写一个程序,将输入与预定义字符串列表相匹配。我看过 Levenshtein 距离,但我遇到了这样的问题:

如果我有诸如“fillet of beef”之类的输入,我希望它与“beef fillet”相匹配。问题是,根据 Levenshtein 距离,“fillet of beef”更接近于“fillet of tuna”之类的东西,这当然是错误的。

我应该为此使用 Lucene 之类的东西吗?是否在 Java 类中使用 Lucene 方法?

谢谢!

最佳答案

您需要计算 relevance将您的搜索词添加到输入字符串中。 Lucene 确实内置了相关性计算,并且 this article可能是理解它们的良好开端(我只是扫描了一下,但它似乎相当权威)。

基本流程是这样的:

  • 初始化:标记您的搜索词,并将它们存储在一系列 HashSet 中,每个词一个。或者,如果您想为每个词赋予不同的权重,请使用 HashMap,其中词是键。
  • 处理:标记每个输入字符串,并探测每组搜索词以确定它们与输入的应用程度。有关算法的说明,请参见上文。

有一个简单的技巧来处理拼写错误:在初始化期间,您创建包含搜索词的潜在拼写错误的集合。 Peter Norvig 在“How to Write a Spelling Corrector”上的帖子描述了这个过程(它使用 Python 代码,但 Java 实现当然是可能的)。

关于java - Java 中的模糊字符串搜索,包括单词交换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5581114/

相关文章:

java - 为什么这两个字符串的编辑距离得分如此低?

java - 从 spock 模拟执行回调

sql - SQL中的模糊搜索

python - 模糊匹配嵌入字符串中的字符串

PHP/MySQL 小规模模糊搜索

javascript - 寻找更好的 javascript 文本匹配评分系统

java - 向列表添加元素: error "Constructor undefined "

java - 使用 jhipster 升级卡在命令提示符处 "May JHipster anonymously report"

java - Appengine 上 google Go 与 Python 和 Java 的资源使用情况