Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 字符串近似(从字典中获取最接近的匹配字符串)_Java_String_String Matching_Approximation - Fatal编程技术网

Java 字符串近似(从字典中获取最接近的匹配字符串)

Java 字符串近似(从字典中获取最接近的匹配字符串),java,string,string-matching,approximation,Java,String,String Matching,Approximation,是否有任何字符串匹配代码或算法可以为我们提供字典中大致匹配的字符串(包含预定义的字符串集) 例如:如果字典中有10个字符串(一组字符串),如果用户输入了一些字符串,那么算法应该告诉您字典中接近匹配的字符串。如果我得到匹配值(或百分比)的匹配字符串,那就太好了。您可以在字典中计算字符串与字符串之间的距离,以找到最接近的匹配项。这可能不是拼写检查的最佳方法,因为它不利于字母交换或语音相似的单词。e、 问题比奎兹丘姆更接近于休息 有关更多示例,请阅读您可以尝试techinque 简单的想法是,您有四个

是否有任何字符串匹配代码或算法可以为我们提供字典中大致匹配的字符串(包含预定义的字符串集)

例如:如果字典中有10个字符串(一组字符串),如果用户输入了一些字符串,那么算法应该告诉您字典中接近匹配的字符串。如果我得到匹配值(或百分比)的匹配字符串,那就太好了。

您可以在字典中计算字符串与字符串之间的距离,以找到最接近的匹配项。这可能不是拼写检查的最佳方法,因为它不利于字母交换或语音相似的单词。e、 问题比奎兹丘姆更接近于休息

有关更多示例,请阅读您可以尝试techinque

简单的想法是,您有四个基本操作:

  • 插入(地狱->地狱o
  • 更换(nice->rice)
  • 删除(bowling->bowlin)
  • 交换(brohter->brother)

你应该计算你的单词和字典里每个单词之间的距离。最小的距离意味着这个词与给定的输入匹配更精确。

我认为最好使用lucene库,它有一个名为
org.apache.lucene.search.spell的包,您可以轻松使用它。它提供了3种算法NGramDistance、levensteindication、JaroWinklerDistance

我只是想补充一点,StringUtils自3.0版以来也有

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;
}
公共静态对象findClosestMatch(集合集合,对象目标){
int距离=整数最大值;
对象最近=空;
用于(对象比较对象:集合){
int currentDistance=StringUtils.getLevenshteinDistance(compareObject.toString(),target.toString());
如果(当前距离<距离){
距离=当前距离;
最近=比较对象;
}
}
返回最近的位置;
}

请注意,上面的方法确实要求集合为空安全的,并且toString()必须得到充分实现。

欢迎使用。查找字典有多大?if里面没有“distance=currentDistance”吗?Woops确实,我不得不删除一些特定的代码,似乎我太急切了:)