3

ここでSteve Hanovによって説明されているように、トライ ツリーを使用してレーベンシュタイン距離アルゴリズムを実装しました。ただし、特殊文字の処理に問題があります。たとえば、Grossmann と Grossmann の間の距離を計算する場合、ß と ss は等しいと見なされるため、距離をゼロにする必要があります。

これらの特殊なケースをサポートするための最善の解決策 (もしあれば) は何でしょうか。

私の最初の考えは、距離を計算する前にすべての文字列を正規化することでした。Großmann -> Grossman、österreich -> oesterreich では ... しかし、.NET にはそのような機能がないように見えますか?

4

2 に答える 2

1

問題は、現在の文化が個々の単語の言語を識別していないことです。

試合の側でエラーを喜んで受け入れると仮定します。

マッピングする必要のない一連の文字を識別します。

すべてのカルチャのセット マッピングを特定します。

特定のカルチャのマッピングを識別します。

最初にマッピングされていないレーベンシュタイン距離を実行します。

マッピングされていない距離がゼロの場合は停止します。

マッピングされていない距離が x (たとえば 4) より大きい場合は、一致しないため停止します。

マップする必要のない文字 (az など) しか単語に含まれていない場合は、停止します。

すべての文化にマッピングし、距離がゼロ ストップの場合。

デフォルトのカルチャにマップし、距離がゼロ ストップの場合。

他の文化にマッピングし、距離がゼロ ストップの場合。

そして、真の場合に 0 を報告するために、レーベンシュタインに単純な string.compare を追加しました。

于 2012-05-23T14:32:50.363 に答える
0

ノーマライゼーションが進むべき道だと思います。

私は、これを既製で行うライブラリを認識していません。クイック検索では何も見つかりませんでした。

同様の問題がここで議論されています: Converting "Bizarre" Chars in String to Roman Chars

必要なすべてのマッピングを事前に包括的に特定できる限り、マッピングを手動で作成するという彼らのソリューションは機能します。

于 2012-05-23T13:10:02.583 に答える