9

私はある種のこれを実装する必要があります:

string textToSearch = "Extreme Golf: The Showdown";
string textToSearchFor = "Golf Extreme Showdown";
int fuzzyMatchScoreThreshold = 80; // One a 0 to 100 scale
bool searchSuccessful = IsFuzzyMatch(textToSearch, textToSearchFor, fuzzyMatchScoreThreshold);
if (searchSuccessful == true)
{
    -- we have a match.
}

C# で記述された関数スタブを次に示します。

public bool IsFuzzyMatch (string textToSearch, string textToSearchFor, int fuzzyMatchScoreThreshold)
{
   bool isMatch = false;
   // do fuzzy logic here and set isMatch to true if successful match.
   return isMatch;
}

しかし、 IsFuzzyMatch メソッドにロジックを実装する方法がわかりません。何か案は?おそらく、この目的のための既製のソリューションはありますか?

4

2 に答える 2

9

私はダイス係数、レーベンシュタイン距離、最長共通部分列、そして時にはダブル メタフォンの組み合わせが好きです。最初の 3 つは、しきい値を提供します。何らかの方法でそれらを組み合わせることを好みます。YMMV。

C# 拡張機能で Fuzzy String Matches を検索するための 4 つの関数と呼ばれる、これらのそれぞれの C# 実装を含むブログ投稿を投稿しました。

于 2011-05-28T01:37:43.330 に答える
1

挿入、削除、および変更の操作によって1つの文字列から別の文字列に移動する方法を見つけるには、レーベンシュタイン距離アルゴリズムが必要です。fuzzyMatchScoreThresholdは、簡単な方法で文字列の長さに分割されたレーベンシュタイン距離です。

于 2010-11-03T11:16:34.600 に答える