OCR からの単語があり、近似一致のリストが必要です。maxFrom がなくても生きていける。サンプル コードは強引ですが、要件が定義されていることを願っています。600,000 のリストに対して、これには 2 秒かかります。FTSword.Word は文字列です。
理想的には、「findd」は 2 番目の d にのみ追加クレジットを付与します。そして、i が見つかると、f はクレジットを取得しません。力ずくでできます。私はその2秒を短縮しようとしています。提案されたソリューションをテストして報告します。
質問??は。速くする方法は?(そしてより賢い)
ありがとう
char[] find = new char[] { 'f', 'i', 'n', 'd' };
char[] word;
int maxFrom = 10;
int minMatch = 3;
int count;
List<FTSword> matchWords = new List<FTSword>();
foreach (FTSword ftsw in fTSwords)
{
if (ftsw.Word.Length < maxFrom)
{
word = ftsw.Word.ToCharArray();
count = 0;
foreach (char fc in find)
{
foreach (char wc in word)
{
if (char.ToLower(wc) == char.ToLower(fc))
{
count++;
break;
}
}
}
if (count >= minMatch)
{
// Debug.WriteLine(count.ToString() + ftsw.Word);
matchWords.Add(ftsw);
}
}
}
Debug.WriteLine(matchWords.Count.ToString());