ホームページ  >  記事  >  バックエンド開発  >  レーベンシュタイン距離: テキストの類似性を測定するための究極のガイド

レーベンシュタイン距離: テキストの類似性を測定するための究極のガイド

DDD
DDDオリジナル
2024-11-09 02:14:02819ブラウズ

レーベンシュタイン距離は、編集距離とも呼ばれ、2 つの文字列間の類似性を評価するための重要な指標です。ある文字列を別の文字列に変換するために必要な操作の最小数をカウントします。これらの操作には次のものが含まれます:

  1. 挿入: 文字を追加します。
  2. 削除: キャラクターを削除します。
  3. 置換: ある文字を別の文字に置き換えます。

この概念は、スペル修正、あいまい検索、DNA 比較など、多くの現代アプリケーションの中心となっています。

数学的概念

長さ (n) と (m) の 2 つの文字列 (A) と (B) 間のレーベンシュタイン距離は、動的アプローチを使用して計算できます。次元 ((n 1) 倍 (m 1)) の行列 (D) を定義します。ここで、各 (D[i][j]) は、(A) の最初の (i) 文字を次の文字に変換するための最小コストを表します。 (j) (B) の最初の文字。

漸化式は次のとおりです。

Distance de Levenshtein : Le Guide Ultime pour Mesurer la Similarité Textuelle

Pythonでの実装

これは、レーベンシュタイン距離を計算するための簡単な Python 実装です。

def levenshtein_distance(a, b):
    n, m = len(a), len(b)
    dp = [[0] * (m + 1) for _ in range(n + 1)]

    for i in range(n + 1):
        for j in range(m + 1):
            if i == 0:
                dp[i][j] = j
            elif j == 0:
                dp[i][j] = i
            elif a[i - 1] == b[j - 1]:
                dp[i][j] = dp[i - 1][j - 1]
            else:
                dp[i][j] = 1 + min(dp[i - 1][j], dp[i][j - 1], dp[i - 1][j - 1])

    return dp[n][m]

# Exemple d'utilisation
print(levenshtein_distance("kitten", "sitting"))  # Sortie : 3

実用的なアプリケーション

1. スペル修正

スペルチェッカーは、タイプミスの場合にレーベンシュタインを使用して近い単語を提案します。たとえば、「helo」と入力すると、「hello」または「hero」が提案される可能性があります。

2. あいまい検索

検索エンジンでは、レーベンシュタイン距離を使用すると、ユーザーが入力ミスをした場合でも結果を取得できます。

3. DNA の比較

バイオインフォマティクスでは、この距離は 2 つの DNA 配列間の類似性を測定するのに役立ち、各操作は突然変異の可能性を表します。

4. 認証と不正検出

個人情報盗難検出システムは、テキストの小さな違いを考慮して、ユーザー入力と既存のデータを比較できます。

最適化: メモリを削減したレーベンシュタイン距離

古典的なアルゴリズムは完全な行列を使用するため、メモリを大量に消費する可能性があります。幸いなことに、各計算 ( D[i][j] ) は ( D[i-1][j] )、( D[i][j-1] ) のみに依存するため、メモリの 2 行のみを使用して最適化できます。 、および (D[i-1][j-1])。

def levenshtein_distance(a, b):
    n, m = len(a), len(b)
    dp = [[0] * (m + 1) for _ in range(n + 1)]

    for i in range(n + 1):
        for j in range(m + 1):
            if i == 0:
                dp[i][j] = j
            elif j == 0:
                dp[i][j] = i
            elif a[i - 1] == b[j - 1]:
                dp[i][j] = dp[i - 1][j - 1]
            else:
                dp[i][j] = 1 + min(dp[i - 1][j], dp[i][j - 1], dp[i - 1][j - 1])

    return dp[n][m]

# Exemple d'utilisation
print(levenshtein_distance("kitten", "sitting"))  # Sortie : 3

結論

レーベンシュタイン距離は、強力かつ多用途で、多くの分野で広く使用されているツールです。理解するのは簡単ですが、その複雑な最適化とアプリケーションは、最新のシステムにおけるその価値を実証します。

さらに詳しく調べると、転置を考慮したダメラウ・レーベンシュタイン距離のような変形例に目を向けることもできます。これで、このツールをプロジェクトに統合したり、深い知識で同僚に感銘を与えたりする準備が整いました!

レーベンシュタイン距離について質問やアイデアはありますか?コメントでシェアしてください! ?

以上がレーベンシュタイン距離: テキストの類似性を測定するための究極のガイドの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。