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

我是一名Java初学者,试图编写一个程序,将输入与预定义字符串列表相匹配。我看过Levenshtein的距离,但是我遇到了这样的问题: 如果我有一个输入,如“牛肉片”,我希望它与“牛肉片”相匹配。问题在于,根据Levenshtein的距离,“牛肉圆角”更接近“金枪鱼鱼片”,这当然是错误的。 我应该使用像Lucene这样的东西吗?是否在Java类中使用Lucene方法? 谢谢!     
已邀请:
您需要计算搜索词与输入字符串的相关性。 Lucene确实内置了相关性计算,本文可能是理解它们的良好开端(我只是扫描它,但它看起来相当具有权威性)。 基本过程是这样的: 初始化:对您的搜索字词进行标记,并将它们存储在一系列
HashSet
s中,每个字词一个。或者,如果您想为每个单词赋予不同的权重,请使用
HashMap
,其中单词是键。 处理:对每个输入字符串进行标记,并探测每组搜索项,以确定它们与输入的紧密程度。有关算法的说明,请参见上文。 处理拼写错误有一个简单的技巧:在初始化期间,您创建包含搜索术语的潜在拼写错误的集合。 Peter Norvig关于“如何编写拼写校正器”的帖子描述了这个过程(它使用Python代码,但Java实现当然是可能的)。     
Lucene确实支持基于Levenshtein距离的模糊搜索。 https://lucene.apache.org/java/2_4_0/queryparsersyntax.html#Fuzzy%20Searches 但是lucene意味着搜索一组文档而不是字符串搜索,所以lucene可能对你来说太过分了。还有其他Java实现可用。请访问http://www.merriampark.com/ldjava.htm     
应该可以将Levenshtein距离应用于单词,而不是字符。然后,为了匹配单词,你可以再次在字符级别上应用Levenshtein,这样“牛肉内容”中的“filet”应该匹配“牛肉圆角”中的“圆角”。     

要回复问题请先登录注册