重複の可能性:
Java での類似性文字列の比較
こんにちは、みんな
Javaを使用して2つの文字列間の部分一致を見つけようとしています。もちろん、stackoverflowには多くの質問と回答がありますが、これらのどれも私の要件を満たしていません。例えば「Javaプログラミングが得意」と「プログラミングが得意」という2つの文字列(文章)があります。ここで、部分一致= tureまたはfalseだけでなく、これら 2 つの文の類似度を25%のように測定したいと思います。
ありがとう
重複の可能性:
Java での類似性文字列の比較
こんにちは、みんな
Javaを使用して2つの文字列間の部分一致を見つけようとしています。もちろん、stackoverflowには多くの質問と回答がありますが、これらのどれも私の要件を満たしていません。例えば「Javaプログラミングが得意」と「プログラミングが得意」という2つの文字列(文章)があります。ここで、部分一致= tureまたはfalseだけでなく、これら 2 つの文の類似度を25%のように測定したいと思います。
ありがとう
レーベンシュタイン距離やJaro-Winklerなどの文字列距離決定アルゴリズムを使用できます。
String API と独自のアルゴリズムを使用するだけです。このようなもの:
public static double similarity(String a, String b) {
double count = 0;
String[] words = a.split();
for(String word : words) {
if(b.indexOf(word) != -1) {
count++;
}
}
return count / words.length;
}
問題は、それはまったく正しくないということです。Bの単語をもっとよく調べたいと思っているのです。どのような方法と構造が必要かについての一般的な考えを示したかっただけです。入力をサニタイズする必要もあります。すべて小文字にし、句読点を削除します。
このライブラリを見ることができます: SimMetrics。
SimMetrics は、編集距離 (Levenshtein、Gotoh、Jaro など) から他のメトリック (Soundex、Chapman など) までの類似度メトリック ライブラリです。