使用説明
まずマニュアルの levenshtein() 関数の説明をお読みください:
levenshtein() 関数は、2 つの文字列間のレーベンシュタイン距離を返します。
編集距離とも呼ばれるレーベンシュタイン距離は、2 つの文字列を一方の文字列からもう一方の文字列に変換するために必要な編集操作の最小数を指します。許可される編集操作には、ある文字を別の文字に置き換える、文字を挿入する、文字を削除するなどがあります。
たとえば、子猫を座っている状態に変換します:
sitten (k→s)
sittin (e→i)
sitting (→g) levenshtein() 関数は、各操作 (置換、挿入、削除) に等しい重みを与えます。ただし、オプションの挿入、置換、および削除パラメータを設定することで、各操作のコストを定義できます。
文法:
レーベンシュタイン(文字列1,文字列2,挿入,置換,削除)
パラメータの説明
string1 は必須です。比較する最初の文字列。
string2 が必要です。比較する 2 番目の文字列。
オプションを挿入します。キャラクターを挿入するコスト。デフォルトは 1 です。
オプションで交換します。キャラクターを置き換えるのにかかるコスト。デフォルトは 1 です。
削除はオプションです。キャラクターを削除するコスト。デフォルトは 1 です。
ヒントとメモ
文字列の 1 つが 255 文字を超える場合、levenshtein() 関数は -1 を返します。
levenshtein() 関数は大文字と小文字を区別しません。
levenshtein() 関数は、similar_text() 関数よりも高速です。ただし、similar_text() 関数を使用すると、修正が少なくて済み、より正確な結果が得られます。
例
ソースコード分析
levenshtein() は標準関数であり、/ext/standard/ ディレクトリにこの関数用に特別に実装されたファイル levenshtein.c があります。
levenshtein() はパラメータの数に基づいて実装方法を選択します。パラメータが 2 の場合とパラメータが 5 の場合は、reference_levdist() 関数が呼び出されて距離が計算されます。違いは、最後の 3 つのパラメーターでは、パラメーターが 2 の場合、デフォルト値 1 が使用されることです。
そして、実装ソースコードでは、ドキュメントで説明されていない状況が見つかりました。levenshtein() 関数は 3 つのパラメーターも渡すことができ、最終的にはcustom_levdist() 関数を呼び出します。カスタム関数の実装として 3 番目のパラメーターを受け取り、その呼び出し例は次のとおりです:
reference_levdist() 関数の実装アルゴリズムは、古典的な DP 問題です。
2 つの文字列 x と y が与えられた場合、x を y に変更するための最小の変更数を見つけます。変更されたルールは、削除、挿入、または変更の 3 つのタイプのいずれかのみになります。
a[i][j] を使用して、x の最初の i 文字を y の最初の j 文字に変更するために必要な操作の最小数を表します。その場合、状態遷移方程式は次のようになります。
簡単な実装プロセスは次のとおりです:
レーベンシュタイン距離の説明
レーベンシュタイン距離は、1965 年にロシアの科学者ウラジーミル レーベンシュタインによって初めて発明され、彼の名前にちなんで命名されました。発音がわからない場合は、「編集距離」と呼んでください。レーベンシュタイン距離は次の目的で使用できます。
スペル チェック (スペル チェック)
音声認識 (文認識)
DNA 分析 (DNA 分析)
盗作検出 (盗作検出) LD は、mn 行列を使用して距離値を保存します。