是否有任何字符串匹配代码或算法为我们提供了来自dictionay的大致匹配的字符串(包含预定义的字符串集)?
例如:如果字典中有10个字符串(字符串集),如果用户输入了一些字符串,那么算法应该告诉你字典中接近匹配的字符串。如果我得到具有匹配值(或百分比)的匹配字符串,它会很棒。
答案 0 :(得分:2)
我认为最好使用lucene库,它有一个名为org.apache.lucene.search.spell
的包你可以轻松使用它。它提供3种算法 NGramDistance,LevensteinDistance,JaroWinklerDistance 。 try this
答案 1 :(得分:1)
您可以在字典中的字符串和字符串之间计算Levenshtein distance,以找到最接近的匹配项。这可能不是拼写检查的最佳选择,因为它不会对交换的字母或语音相似的字词有利。例如问题比kwizchum更接近休息。
有关更多示例,请阅读http://en.wikipedia.org/wiki/Approximate_string_matching
答案 2 :(得分:1)
我只是想补充一点,因为版本3.0,StringUtils也有a convenient Levenshtein Distance method
public static int getLevenshteinDistance(CharSequence s,
CharSequence t)
之后,它就像迭代整个集合并记住最接近的匹配一样简单:
public static Object findClosestMatch(Collection<?> collection, Object target) {
int distance = Integer.MAX_VALUE;
Object closest = null;
for (Object compareObject : collection) {
int currentDistance = StringUtils.getLevenshteinDistance(compareObject.toString(), target.toString());
if(currentDistance < distance) {
distance = currentDistance;
closest = compareObject;
}
}
return closest;
}
请注意,上面的方法确实要求集合为空安全,并且要使toString()得到合理实现。
答案 3 :(得分:0)
您可以尝试Levenshtein Distance techinque。
简单的想法是你有四个基本操作:
你算法应该计算你的单词和字典中每个单词之间的距离。最小距离意味着该单词与给定输入匹配更准确。