有来自 OCR 的单词,并且需要一个紧密匹配的列表。没有maxFrom也可以。示例代码是蛮力的,但希望它定义了要求。针对 600,000 的列表,这需要 2 秒。FTSword.Word 是一个字符串。
理想情况下,“findd”只会给第二个 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());