レーベンシュタイン距離を使用してJavaで文字列の類似性を計算する方法?

Patricia Arquette
リリース: 2024-11-24 08:30:09
オリジナル
395 人が閲覧しました

How to Calculate String Similarity in Java Using the Levenshtein Distance?

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

類似性測定の必要性を理解する

を使用する場合テキスト データの場合、文字列間の類似性を評価することが重要になります。これは、重複コンテンツの特定、最も類似した検索結果の検索、テキストからの意味のある情報の抽出などのタスクで有益であることがわかります。幸いなことに、Java には文字列の類似性を計算するための効率的で十分に確立された方法があります。

類似性関数の紹介

文字列比較の最も一般的なアプローチには、similarity Index は、2 つの文字列間の類似度を定量化します。広く使用されている類似性の尺度は レーベンシュタイン距離 です。これは、ある文字列を別の文字列に変換するために必要な編集 (挿入、削除、または置換) の最小数を計算します。この距離メトリックは通常、0 ~ 1 の範囲に正規化され、値が大きいほど類似性が高いことを示します。

レーベンシュタイン距離の実装

レーベンシュタインを計算する 1 つの方法距離は、 **Apache Commons Text** ライブラリ。標準のレーベンシュタイン アルゴリズムを実装します。あるいは、以下のコードに示すようにアルゴリズムを手動で実装することもできます。

public static int editDistance(String s1, String s2) {
  int n = s1.length() + 1;
  int m = s2.length() + 1;
  int[][] matrix = new int[n][m];

  for (int i = 0; i < n; i++) {
    matrix[i][0] = i;
  }

  for (int j = 0; j < m; j++) {
    matrix[0][j] = j;
  }

  for (int i = 1; i < n; i++) {
    for (int j = 1; j < m; j++) {
      int cost = (s1.charAt(i - 1) == s2.charAt(j - 1)) ? 0 : 1;
      matrix[i][j] = Math.min(
        matrix[i - 1][j] + 1, // deletion
        Math.min(
          matrix[i][j - 1] + 1, // insertion
          matrix[i - 1][j - 1] + cost // substitution
        )
      );
    }
  }

  return matrix[n - 1][m - 1];
}
ログイン後にコピー

類似性インデックスの計算

レーベンシュタイン距離が計算されると、類似性がインデックスは、長い方の長さに正規化することで取得できます。 string:

public static double similarity(String s1, String s2) {
  double longerLength = Math.max(s1.length(), s2.length());
  return 1.0 - (editDistance(s1, s2) / longerLength);
}
ログイン後にコピー

結論

Java でレーベンシュタイン距離と類似度関数を実装することにより、文字列間の類似性を評価するための強力なツールが得られます。この技術は、自然言語処理、データ分析、およびテキスト コンテンツの比較が不可欠なその他の分野で数多くの用途に使用されています。

以上がレーベンシュタイン距離を使用してJavaで文字列の類似性を計算する方法?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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