我是一名 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/