我想比较两个字符串并得到一些分数,它们看起来有多相似。例如“句子几乎相似”和“句子很相似”。
我不熟悉 Java 中的现有方法,但对于 PHP,我知道levenshtein 函数。
Java中有更好的方法吗?
我想比较两个字符串并得到一些分数,它们看起来有多相似。例如“句子几乎相似”和“句子很相似”。
我不熟悉 Java 中的现有方法,但对于 PHP,我知道levenshtein 函数。
Java中有更好的方法吗?
以下 Java 库提供多种比较算法(Levenshtein、Jaro Winkler、...):
这两个库都有一个 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);
}
是的,这是一个很好的指标,您可以使用来自 apache commons 的StringUtil.getLevenshteinDistance()
您可以在https://github.com/tdebatty/java-string-similarity上找到 Levenshtein 和其他字符串相似性/距离度量的实现
如果你的项目使用 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"));
}
}
无耻的插件,但我也写了一个库:
https://github.com/vickumar1981/stringdistance
它具有所有这些功能,加上一些用于语音相似性的功能(如果一个词“听起来像”另一个词 - 返回真或假,这与其他模糊相似性是 0-1 之间的数字不同)。
还包括 dna 测序算法,如 Smith-Waterman 和 Needleman-Wunsch,它们是 Levenshtein 的通用版本。
我计划在不久的将来使用任何数组,而不仅仅是字符串(字符数组)。