我想比较两个字符串并获得一些分数,看看它们看起来有多相似。 例如 “句子几乎相似” 和 “句子相似”。
我不熟悉 Java 中现有的方法,但对于 PHP,我知道 levenshtein 函数。
Java中有更好的方法吗?
以下 Java 库提供多种比较算法(Levenshtein、Jaro Winkler...):
两个库都有 Java 文档(Apache Commons Lang Javadoc、Simmetrics Javadoc)。
//Usage of Apache Commons Text
import org.apache.commons.text.similarity.JaroWinklerDistance;
public double compareStrings(String stringA, String stringB) {
return new JaroWinklerDistance().apply(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);
}
是的,这是一个很好的指标,你可以使用 apache commons 的 StringUtil.getLevenshteinDistance()
https://github.com/tdebatty/java-string-similarity
如果您的项目使用maven,安装就很简单
<dependency>
<groupId>info.debatty</groupId>
<artifactId>java-string-similarity</artifactId>
<version>RELEASE</version>
</dependency>
然后,以 Levenshtein 为例
import info.debatty.java.stringsimilarity.*;
public class MyApp {
public static void main (String[] args) {
Levenshtein l = new Levenshtein();
System.out.println(l.distance("My string", "My $tring"));
System.out.println(l.distance("My string", "My $tring"));
System.out.println(l.distance("My string", "My $tring"));
}
}