Имейте слова из OCR и вам нужен список близких совпадений. Может жить без maxFrom. Пример кода - грубая сила, но, надеюсь, он определяет это требование. Против списка 600 000 это занимает 2 секунды. FTSword.Word - это строка.LINQ Чтобы найти частичные совпадения
В идеале «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());
И ваш вопрос? –
Здесь вы можете найти подходы к предварительной калькуляции данных для получения более быстрых результатов поиска: http://stackoverflow.com/questions/10096744/puzzle-solving-finding-all-words-within-a-larger-word-in-php/ 10096985 # 10096985. В идеале вы либо уменьшаете количество операций на слово, как в этом примере, либо уменьшаете пространство поиска, индексируя или разделяя ненужные слова. – mellamokb
@mellamokb, эта ссылка касается внутренних совпадений, но не начисляет частичную. – Paparazzi