fuzzymath ()


あなたが何かを探しているものにほぼ等しいかどうかを判断したいとしましょう.あなたはそれだけで十分に近いしたい.スペルチェッカーを書くように、またはいくつかのおそらくスペルミスの単語を見つけるしようとして、これの理由のすべての種類があります.また、エラー訂正をしていないプロトコル上でワイヤー上に送られたわずかに丸められたデータを許容しようとするのにも便利です.結局、あなたが最後にそれを訂正することができるならば、あなたはパケットを送り返す必要はありません.それは遺伝分析でも役に立つが、なぜ私に尋ねることはありません.
これが複雑であるならば、あなたは正しいです.これらの状況を効率的に検出する方法にはたくさんの仕事があります.幸いにも、あなたはそれのいずれかを理解する必要はありません.FuzzyEquals() あなたがほぼ正確に使用できる拡張方法ですかEquals() あなたが予想するものをするために.
"bob".Equals("bob") // true
"bob".Equals("mob") // false

"bob".FuzzyEquals("bob") // true
"bob".FuzzyEquals("mob") // true
"bob".FuzzyEquals("boob") // true
"bob".FuzzyEquals("mom") // false
…とは別にFuzzyEquals(this String, String) フォームでは、3番目のパラメータとして指定することもできます.いずれにせよ、それはあなたの正確な精度のニーズに調整可能です.後でそれ以上.
さらに、ほとんどのStringier 's関数String パラメータは、あなたが想像できるほとんどすべてのテキストタイプに対してオーバーロードされますChar[] , Span<Char> , ReadOnlySpan<Char> , そして、unsafe 脂肪ポインタChar*, Int32 !
では、どのように動作しますか?コンピュータ言語学の分野では、編集距離メトリックや文字列類似度と呼ばれる関数群が存在する.これらは技術的に2つの異なったものです、しかし、編集距離アルゴリズムは両方の目的のために簡単に適応されることができます.ライブラリ内にもFuzzyEquals() 様々な編集距離アルゴリズムの実装です.FuzzyEquals() 実際には、抽象的なレイヤの一種として存在します.そのため、実際の実装は、パフォーマンスや精度の必要性のために、時間とともに変更することができます.しかし、正確に編集距離ですか?
最も簡単な用語では、1つのテキストから別のテキストを取得するために必要な編集の数です.
しかし、これはコンピューターサイエンスですので、もちろんそれは簡単ではありません.幸運にも、概念が行く限り、これは悪いものではありません.
"bob" -> "bob"
変更がないので、これは簡単に説明することです.だから、編集距離が0 .
"bob" -> "mob"
 ^        ^
今回は、キャレットで置換された('b', 'm') . これは単一の変更としてカウントされます1 .
"bob" -> "boob"
   ^        ^^
   1        23
今、我々は混乱した1つを持っています、これを見るために複数の方法があります、そして、本当に異なった編集距離アルゴリズムはこれを異なって扱います.明らかだ1 唯一のものは変わっています、しかし、方法?それを見る一つの方法は1 を置換('b', 'o') , それから3 が挿入された.しかし、それを見ることも可能です2 が挿入され、1 の位置に移された3 . どちらの場合でも、これは2つのエディションです.
"bob" -> "obb"
あなたが自分でこの1つを把握できるかどうかを確認してください.
私があなたに言ったならば、これは2つの異なる結果でありえましたか?真剣に.最初のアプローチを考えてください.
"bob" -> "obb"
 ^^       ^^
 12       21
転置1 and 2 つの編集の両方の文字をスワップします.
ただし、置換1 AS('b', 'o') and 2 AS('o', 'b') つの編集のための2つの置換です.
正確にどのような結果は、広範囲に依存しているあなたが使用している特定のメトリックには、彼らはすべての特定の制限があるため.ハミングだけが置換を数えます.levenshtein挿入、削除、および置換をカウントします.Damerau levenshteinはトランスポーションを加えます.そこにはトランスポーションをカウントするメトリクスがあります!FuzzyEquals() あなたはそれのいずれかを理解する必要はありません.それはちょうど“ねえ、これらのほぼ同じものですか?”のための、ユーザーフレンドリーなラッパーです.
それでは、これらの微調整オプションについてはどうですか?さて、編集のために何を数えているかを考えれば、最大の編集パラメータはかなり明白でなければなりません.他のオプションは、類似のスコアを行う必要がありますDouble 範囲[0, 1] , どこ0 完全に異なります1 は同一です.最大の編集限界は、どちらのストリングの長さに関係なく一定量であるが、最小の類似限界はストリングのサイズに関連していて、おそらくより有用であるかもしれません.
あなたがこれを利用するか、ちょうど遊んで興味があるならば、あなたはパッケージを得ることができますhere .