如何在Java中比较几乎相似的字符串?(字符串距离测量)[已关闭]

我想比较两个字符串,并得到一些分数,这些字符串看起来有多相似。例如,“句子几乎相似”“句子相似”。

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

Java中有更好的方法吗?


答案 1

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

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

这两个库都有一个java文档(Apache Commons Lang JavadocSimmetrics 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);
}

答案 2

Levensthein距离衡量弦相似程度的量度。或者,更准确地说,必须进行多少次更改才能使它们相同。

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

维基百科还有一些算法来测量字符串的相似性。