ホームページ > Java > &#&チュートリアル > Java で文字列の類似性を測定し、セット内で最も類似した文字列を見つけるにはどうすればよいでしょうか?

Java で文字列の類似性を測定し、セット内で最も類似した文字列を見つけるにはどうすればよいでしょうか?

Barbara Streisand
リリース: 2024-11-17 12:46:02
オリジナル
297 人が閲覧しました

How do you measure string similarity in Java and find the most similar strings in a set?

Java での文字列の類似性比較

テキスト処理の広大な領域では、文字列間の類似性を評価する必要がよく発生します。セットから最も類似した文字列を見つけることは、テキスト マッチング、盗作検出、データ分析などのさまざまなアプリケーションにおいて重要です。

この課題に対処するために、Java ではさまざまなライブラリとアルゴリズムが開発されています。そのようなアプローチの 1 つは、2 つの文字列間の類似性インデックス (類似性のレベルを示す数値) を計算することです。このインデックスは、2 つの文字列が互いに一致または類似している度合いを定量化します。

文字列の類似性の測定

文字列の類似性を測定するための一般的な指標は、編集距離とも呼ばれるレーベンシュタイン距離です。ある文字列を別の文字列に変換するために必要な編集操作 (挿入、削除、または置換) の最小数を決定します。編集距離が短いほど、文字列間の類似性は高くなります。

類似した文字列の検索

セット内で最も類似した文字列を検索するには、次の手順を使用できます:

  1. 類似性インデックスの計算: 文字列の各ペア間の類似性インデックスを計算します。
  2. インデックスによる文字列の並べ替え: 文字列のペアを降順で並べ替えます。類似性インデックスに基づきます。
  3. 類似する文字列の識別: 最も高い類似性インデックスを持つ文字列のペアを最も類似したものとして選択します。

実装例

次のコード スニペットは、文字列類似性比較アルゴリズムの実装を示しています。

public static double similarity(String s1, String s2) {
    LevenshteinDistance levenshteinDistance = new LevenshteinDistance();
    return 1 - ((double) levenshteinDistance.apply(s1, s2) / Math.max(s1.length(), s2.length()));
}
ログイン後にコピー

この例では、Apache Commons Text ライブラリのレーベンシュタイン距離アルゴリズムの実装を利用します。関数similarity()は、2つの文字列s1とs2の間の類似性インデックスを計算します。結果は 0 と 1 の間の値になります。1 は完全な類似性を表し、0 は類似性がないことを表します。

使用例の例

次の文字列を比較する場合を考えてみましょう:

  • 「素早いキツネが跳んだ」
  • 「キツネが跳んだ」
  • 「キツネ」

similarity() 関数を使用すると、次のように計算できます。これらの文字列ペア間の類似性インデックス:

  • "The Quick fox Jumped" vs. "The fox Jumped"`: 0.857
  • "The Quick fox Jumped" vs. fox"`: 0.714
  • "The fox Jumped" vs. "The fox"`: 1.000

これらの結果は、「The Quick fox Jumped」のほうが「The fox Jumped」に似ていることを示しています。 「キツネはジャンプしました」ではなく「キツネが跳んだ」です。

以上がJava で文字列の類似性を測定し、セット内で最も類似した文字列を見つけるにはどうすればよいでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート