コンテンツへスキップ
uencoder

Levenshtein 距離を計算する

Levenshtein 距離は、ある文字列を別の文字列に変換するのに必要な最小の編集回数(挿入・削除・置換)を測る指標です。スペルチェックやあいまい検索に使われます。

  1. 1

    Levenshtein 距離は動的計画法で計算します:(m+1)×(n+1) の行列を作り、最初の行と列を 0..m と 0..n で初期化し、各セルについて、前のセルに基づく min(挿入、削除、置換) を計算します。距離は右下のセルに入ります。計算量・空間量は O(m×n) です。行を 2 つだけ保持すれば、空間は O(min(m,n)) に最適化できます。

  2. 2
    テキスト差分比較ツール →

    2 つのテキストを比較して差分を確認します。text-diff は行レベルの変更を表示しますが、Levenshtein は文字レベルで動作します。ドキュメントには text-diff を、短い文字列(単語、名前、コマンド)には Levenshtein を使いましょう。

  3. 3
    ワードカウント →

    単語レベルの Levenshtein では、両方のテキストを単語配列にトークン化し、その配列間の距離を計算します。これは文字レベルではなく単語レベルの編集(単語の挿入、削除、置換)を測定するため、文や段落の比較に役立ちます。

よくある質問

スペルチェックで Levenshtein 距離はどう使われるの?
誤った綴りに対して、辞書の各単語との Levenshtein 距離を計算します。そして距離が最小の辞書語(通常 1〜2)を候補として提示します。効率化には、すべての単語との比較を避けるために BK ツリー(Levenshtein 距離でインデックス)を使いましょう。多くのスペルチェッカーがこのアプローチを採用しています。
Levenshtein と Damerau-Levenshtein はどっち?
Levenshtein は挿入、削除、置換の 3 操作を許します。Damerau-Levenshtein は隣接文字の転置(ab → ba を 1 編集で)を追加します。Damerau は入力ミス(隣接キーの押し間違いが多い)に適しています。どちらも O(m×n) です。スペルチェックには Damerau を、一般的な文字列比較には Levenshtein を使いましょう。

このタスクを解決するワークフロー

関連ツール