Ниже приведена функция, которая использует TessNet2 (OCR framework) для сканирования списка слов, записанных функцией OCR, встроенной в TessNet2. Поскольку страницы, которые я просматриваю в нашем менее совершенном качестве, обнаружение слов не на 100% точнее.Логика распознавания слов OCR
Поэтому иногда это путает «S» с «5» или «l» с «1». Кроме того, он не учитывает капитализацию. Поэтому я должен искать оба случая.
Способ, которым это работает, заключается в том, что я ищу определенные слова, близкие друг к другу на бумаге. Таким образом, первый набор слов [I] - это «Упорядоченный сервис по упорядочению». Если страница содержит эти слова рядом друг с другом, она переходит к следующему набору слов [j], а затем к следующему [h]. Если страница содержит все 3 набора слов, она возвращает true.
Это лучший способ, о котором я думал, но я надеюсь, что кто-то здесь может дать мне другой способ попробовать.
public Boolean isPageABSTRACTING(List<tessnet2.Word> wordList)
{
for (int i = 0; i < wordList.Count; i++) //scan through words
{
if ((wordList[i].Text == "Abstracting" || wordList[i].Text == "abstracting" || wordList[i].Text == "abstractmg" || wordList[i].Text == "Abstractmg" && wordList[i].Confidence >= 50) && (wordList[i + 1].Text == "Service" || wordList[i + 1].Text == "service" || wordList[i + 1].Text == "5ervice" && wordList[i + 1].Confidence >= 50) && (wordList[i + 2].Text == "Ordered" || wordList[i + 2].Text == "ordered" && wordList[i + 2].Confidence >= 50)) //find 1st tier check
{
for (int j = 0; j < wordList.Count; j++) //scan through words again
{
if ((wordList[j].Text == "Due" || wordList[j].Text == "Oue" && wordList[j].Confidence >= 50) && (wordList[j + 1].Text == "Date" || wordList[j + 1].Text == "Oate" && wordList[j + 1].Confidence >= 50) && (wordList[j + 2].Text == "&" && wordList[j + 2].Confidence >= 50)) //find 2nd tier check
{
for (int h = 0; h < wordList.Count; h++) //scan through words again
{
if ((wordList[h].Text == "Additional" || wordList[h].Text == "additional" && wordList[h].Confidence >= 50) && (wordList[h + 1].Text == "comments" || wordList[h + 1].Text == "Comments" && wordList[h + 1].Confidence >= 50) && (wordList[h + 2].Text == "about" || wordList[h + 2].Text == "About" && wordList[h + 2].Confidence >= 50) && (wordList[h + 3].Text == "this" || wordList[h + 3].Text == "This" && wordList[h + 3].Confidence >= 50)) //find 3rd tier check
{
return true;
}
}
}
}
}
}
return false;
}
Не согласитесь, объяснив немного кода. Когда я запускаю это, «текст» становится строкой всего текста в результатах OCR, но несколько слов имеют «DONTMATCH». Я предполагаю, что это из-за того, что доверие не превышает 50. – MaylorTaylor
попытался добавить немного больше объяснений в ... –