Levenshtein 距離を計算する
Levenshtein 距離は、ある文字列を別の文字列に変換するのに必要な最小の編集回数(挿入・削除・置換)を測る指標です。スペルチェックやあいまい検索に使われます。
- 1
Levenshtein 距離は動的計画法で計算します:(m+1)×(n+1) の行列を作り、最初の行と列を 0..m と 0..n で初期化し、各セルについて、前のセルに基づく min(挿入、削除、置換) を計算します。距離は右下のセルに入ります。計算量・空間量は O(m×n) です。行を 2 つだけ保持すれば、空間は O(min(m,n)) に最適化できます。
- 2 テキスト差分比較ツール →
2 つのテキストを比較して差分を確認します。text-diff は行レベルの変更を表示しますが、Levenshtein は文字レベルで動作します。ドキュメントには text-diff を、短い文字列(単語、名前、コマンド)には Levenshtein を使いましょう。
- 3 ワードカウント →
単語レベルの Levenshtein では、両方のテキストを単語配列にトークン化し、その配列間の距離を計算します。これは文字レベルではなく単語レベルの編集(単語の挿入、削除、置換)を測定するため、文や段落の比較に役立ちます。
よくある質問
- スペルチェックで Levenshtein 距離はどう使われるの?
- 誤った綴りに対して、辞書の各単語との Levenshtein 距離を計算します。そして距離が最小の辞書語(通常 1〜2)を候補として提示します。効率化には、すべての単語との比較を避けるために BK ツリー(Levenshtein 距離でインデックス)を使いましょう。多くのスペルチェッカーがこのアプローチを採用しています。
- Levenshtein と Damerau-Levenshtein はどっち?
- Levenshtein は挿入、削除、置換の 3 操作を許します。Damerau-Levenshtein は隣接文字の転置(ab → ba を 1 編集で)を追加します。Damerau は入力ミス(隣接キーの押し間違いが多い)に適しています。どちらも O(m×n) です。スペルチェックには Damerau を、一般的な文字列比較には Levenshtein を使いましょう。
このタスクを解決するワークフロー
SQL フォーマットと単語統計によるドキュメント化
SQL クエリを整形し、その後フォーマットされた出力を単語統計で分析する。 パイプライン
Lorem Ipsum 生成と単語カウント
Lorem Ipsum テキストを生成し、その後単語をカウントする。 パイプライン
テキストのクリーンアップ後の単語統計分析
テキストをトリムして正規化し、その後単語/文字/行統計を計算する。 パイプライン
行の重複除去と単語カウント
行をソートして重複を除去し、その後残りの単語をカウントして簡単な在庫を得る。 パイプライン
2 つのテキストブロックの行単位比較
テキストドキュメントの 2 つのバージョン間で追加、削除、変更なし行を見つける。 パイプライン
テキストの小文字化と単語カウント
テキストのケースを正規化し、その後分析のために単語をカウントする。 パイプライン
URL 除去と単語カウント
テキストから URL を除去し、その後残りの単語をカウントする。 パイプライン
Title Case と単語カウント
Title Case に変換し、その後単語をカウントする。 パイプライン
テキストの折り返しと単語カウント
長いテキストを折り返し、その後結果の単語をカウントする。 パイプライン
関連ツール
テキスト差分比較ツール
Compare two text blocks line by line using the LCS algorithm. Supports ignoring whitespace and case。無料、プライベート、100%クライアントサイド。 ツール
ワードカウント
Count characters, words, lines, sentences, paragraphs, byte size, and estimate reading time。無料、プライベート、100%クライアントサイド。 ツール
正規表現テスター
Test regular expressions with match highlighting, capture groups, and replace preview。無料、プライベート、100%クライアントサイド。 ツール