我有一份我想要搜索的人员列表。我需要知道每个项目与正在测试的字符串匹配的“多少”。
列表相当小,目前有100多个名字,很快就不会达到1000 因此,我认为将整个列表保存在内存中并使用Java提供的开箱即用或使用一些只实现一两个测试算法的小型库进行搜索是可以的。 (换句话说,没有引入任何存储索引或依赖于数据库的复杂/过度杀伤解决方案。)
在这种情况下你会选择什么?
编辑:似乎Levenshtein最接近我的建议。当搜索查询为“John”并且列表中的名称明显更长时,只有这很容易被愚弄。答案 0 :(得分:1)
答案 1 :(得分:1)
查看Double Metaphone,这是1990年改进的soundex。
答案 2 :(得分:1)
您应该查看各种字符串比较算法,并查看哪种算法最适合您的数据。选项包括Jaro-Winkler,Smith-Waterman等。查找SimMetrics - 一个F / OSS库,提供了一套非常全面的字符串比较算法。
答案 3 :(得分:1)
根据我的说法,Jaro-Winkler算法最适合您的要求。 这是一个Short summary of Jaro-Winkler Distance Algo 比较不同算法的PDF之一 - > Link to PDF