2つの文字列を比較して、これらがどの程度似ているかスコアを取得します。たとえば、 "文はほとんど同じです"および "文は同じです"。
私は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コモンズの StringUtil.getLevenshteinDistance() を使用できます
https://github.com/tdebatty/Java-string-similarity で、レーベンシュタインと他の文字列の類似性/距離測定の実装を見つけることができます
プロジェクトがmavenを使用している場合、インストールは次のように簡単です
<dependency>
<groupId>info.debatty</groupId>
<artifactId>Java-string-similarity</artifactId>
<version>RELEASE</version>
</dependency>
次に、例えばレーベンシュタインを使用するには
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
これらのすべての機能に加えて、いくつかの音声類似性(1つの単語が別の単語に「似ている」場合-0〜1の数値である他のファジー類似性とは異なり、trueまたはfalseを返します)があります。
Levenshteinの一般化されたバージョンであるSmith-WatermanやNeedleman-Wunschのようなdnaシーケンスアルゴリズムも含まれています。
近い将来、これを文字列(文字の配列)だけでなく任意の配列で機能させることを計画しています。