Алгоритмы исправления ошибок OCR

Я работаю над оцифровкой большой коллекции отсканированных документов, работая с Tesseract 3 в качестве моего механизма OCR. Качество его вывода посредственное, так как оно часто выдает как символы мусора до, так и после фактического текста, и опечатки в тексте.

Для первой проблемы кажется, что должны быть стратегии для определения того, какой текст на самом деле является текстом, а какой текст нет (большая часть этого текста - это имена людей, поэтому я ищу решения, отличные от поиска слова в словаре).

Для проблемы с типовыми вариантами большинство ошибок связаны с несколькими ошибочными буквами (например, подставляя l, 1 и I), и, похоже, должны быть методы для угадывая, какие слова написаны с ошибками (так как не слишком много слов на английском языке имеют "1" в середине их) и угадывают, что такое соответствующая коррекция.

Каковы лучшие практики в этом пространстве? Существуют ли свободные/с открытым исходным кодом реализации алгоритмов, которые делают такие вещи? Google дал много бумаг, но не много конкретных. Если нет доступных реализаций, какая из многих статей будет хорошим отправным местом?

Ответ 1

Для определения того, какой текст на самом деле является текстом, а какой текст нет, вы можете посмотреть rmgarbage из того же отдела, который разработал Tesseract (ISRI). Я написал Perl-реализацию, а также реализацию Ruby. Для проблемы 1 против l я экспериментирую с ocrspell (опять же из того же отдела), для которого их исходный источник доступен.

Я могу опубликовать только две ссылки, поэтому недостающие:

  • ocrspell: введите "10.1007/PL00013558" на dx.doi.org]
  • rmgarbage: поиск "Автоматическое удаление мусорных строк в тексте OCR: реализация"
  • реализация ruby ​​: поиск "docsplit textcleaner"

Ответ 2

Что-то, что может быть полезно для вас, - это попробовать это бесплатное онлайн-обломок OCR и сравнить его результаты с вашими, чтобы узнать, играет ли игра с изображением (например, масштабирование вверх/вниз), вы можете улучшить результаты.

Я использовал его как "верхнюю границу" результатов, которые я должен получить, когда сам использую tesseract (после использования OpenCV для изменения изображений).