ダメラウ・レヴェンシュタインの改善の可能性は?


9

最近、Wikipediaの疑似コードからDamerau-Levenshtein距離アルゴリズムを実装しました。私はそれが動作します正確にどのように任意の説明を見つけることができなかったとの擬似コードは次のように完全に情報価値がない変数名を使用してDADBi1、そしてj1左のように私は私の頭を掻きます。

Pythonでの実装は次のとおりです。https//gist.github.com/badocelot/5327337

Pythonの実装は、プログラムをウォークスルーして何が起こっているのかを理解し、変数の名前をよりわかりやすい名前に変更するのに役立ちました。私は、私が参照枠を持っているレーベンシュタイン距離を計算するためのワーグナーフィッシャーアプローチに十分に精通していました。

過度に長くなるおそれがあるので、ここに私がダメラウ=レヴェンシュタインを理解する方法を示します。

ミステリー変数:

  • DAlast_row私のコードでは)は、各要素が表示された最後の行を保持する一種のマップです。私のコードでは、それは実際のPython辞書です
  • DBlast_match_col)は、現在の行の文字がb一致する最後の列を保持しますa
  • i1last_matching_row)は、DA現在の文字の行番号ですb
  • j1更新される前のDB/ の値の単なるコピーlast_match_colです。私のコードでlast_match_colは、更新された場所に移動してこの変数を削除しました

転置コスト:

H[i1][j1] + (i-i1-1) + 1 + (j-j1-1)

で現在の文字スワップのコスト計算されてbの最後の文字とbであることが知られてa追加または削除のどちらかとの間のすべての文字を処理すること、(最後の試合を)。

コストの要素:

  • H[i1][j1] 転置を見つけると以前の作業が無効になるため、基本コストを転置前の計算のポイントに戻します。
  • (i-i1-1) 現在の行と現在の文字に一致する最後の行の間の距離であり、これは必要な削除の数です
  • (j-j1-1) 現在の列と一致する最後の列の間の距離、つまり追加の数
  • 余分なもの+ 1は、転置自体のコストです

この分析が正しくない場合は、どこに問題があるのか​​を知りたいです。言ったように、アルゴリズムがオンラインでどのように機能するについての詳細な説明は見つかりませんでした。

改良版?

しかし、それを理解して、転置された文字間の追加と削除の両方のコストを計算することには欠陥があるように思われたことに感銘を受けました。1つの追加と1つの削除は置換に相当し、これはチェックしていません。

それがすべて正しい場合、解決策は簡単です。転置された文字間の文字のコストは、追加と削除のどちらか高くなるはずです。できるだけ多くを置換に変換し、残っている追加または削除を追加します。

したがって、コストは次のようになります。

H[i1][j1] + max((i-i1-1), (j-j1-1)) + 1

これがこのバージョンの私のコードです:https : //gist.github.com/badocelot/5327427

いくつかの簡単なテストから、これは正しいようです。たとえば、 "abcdef"-> "abcfad"は編集距離を2(転置 "d"と "f"、 "e"を "a"に変更)しますが、元のアルゴリズムは距離を3(最後の3つ)にします。文字は置換、または1つの転置+ 1つの追加+ 1つの削除です)。

今、私はこれについて考えた最初の人にはなれません。それで、なぜ私はそれに遭遇しなかったのですか?私は十分に長く検索しなかったのですか?または、これが実際に機能しないようにする微妙な欠陥がありますか?


私は詳細にDLを説明するブログ記事を書くことにしました:scarcitycomputing.blogspot.com/2013/04/...
ジェームズ・ジェンセン

回答:


3

私はウィキペディアでダメラウとレヴェンシュタインの距離を調べなければならなかったので、これが間違っていても許してください。しかし、それは隣接する文字の転置のみを可能にし、任意の文字の転置はできないように見えます。したがって、dとfを転置した「abcdef」->「abcfad」の例は機能しません。アルゴリズムの定義を変更し、Damerau-Levenshtein距離を計算しなくなったようです。


うーん、私はあなたが何を意味するのかわかります。DLでは、追加前または削除後の転置が可能です。両方が発生した場合、それは実際には隣接する転置ではないため、コストが急上昇し、転置コストは新しいコストとして選択されません。コスト最小化の副作用によってそれらを回避するため、両方を処理しているように見えました。
James Jensen
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.