如何比较Java中几乎相似的字符串?(字符串距离测量)

hsm*_*mit 37 java string comparison string-metric levenshtein-distance

我想比较两个字符串并获得一些评分看起来有多相似.例如"句子几乎相似"和"句子相似".

我不熟悉Java中的现有方法,但对于PHP我知道levenshtein函数.

Java中有更好的方法吗?

Fiv*_*veO 53

以下Java库提供了多种比较算法(Levenshtein,Jaro Winkler,...):

  1. Apache Commons Lang 3:https://commons.apache.org/proper/commons-lang/
  2. Simmetrics:http://sourceforge.net/projects/simmetrics/

这两个库都有一个java文档(Apache Commons Lang Javadoc,Simmetrics Javadoc).

//Usage of Apache Commons Lang 3
import org.apache.commons.lang3.StringUtils;   
public double compareStrings(String stringA, String stringB) {
    return StringUtils.getJaroWinklerDistance(stringA, stringB);
}

 //Usage of Simmetrics
import uk.ac.shef.wit.simmetrics.similaritymetrics.JaroWinkler    
public double compareStrings(String stringA, String stringB) {
    JaroWinkler algorithm = new JaroWinkler();
    return algorithm.getSimilarity(stringA, stringB);
}
Run Code Online (Sandbox Code Playgroud)

  • 它现在可以在Apache commons-lang中找到:http://commons.apache.org/proper/commons-lang/apidocs/org/apache/commons/lang3/StringUtils.html#getJaroWinklerDistance%28java.lang.CharSequence,%20java. lang.CharSequence 29% (2认同)

Joe*_*oey 20

Levensthein距离是衡量字符串相似程度的指标.或者,更确切地说,必须进行多少次更改才能使它们相同.

该算法在维基百科上以伪代码形式提供.将其转换为Java应该不是一个大问题,但它并没有内置到基类库中.

维基百科有一些更多的算法来衡量字符串的相似性.


jsp*_*cal 15

是的,这是一个很好的指标,你可以使用来自apache commons的StringUtil.getLevenshteinDistance()