Я не совсем уверен, какую терминологию искать, поэтому мой заголовок забавный... Вот рабочий процесс, который у меня есть:
- Полуструктурированные документы сканируются в файл. Файлы распознаются как текст.
- Текст преобразуется в объекты Python
- Объекты сериализуются (в SQL, JSON и т. д.) для использования.
Документы имеют такую структуру:
ЗАГОЛОВОК бла-бла, Страница ###
бла
Мусорный текст...
<сильный>1. Текст вопроса...
продолжение до настоящего момента. А. Текст выбора...
адсадсф. Б. Другой выбор...
<сильный>2. Еще вопрос...
Мне нужно извлечь вопросы и варианты. Проблема в том, что, поскольку текст является выводом OCR, иногда встречаются странные замены, такие как «2» -> «Z», что делает обычные регулярные выражения бесполезными. Я попробовал модуль Левенштейна, и он помогает, но он требует предварительного знания ожидаемого расстояния редактирования.
Я не знаю, хочу ли я создать парсер? лексер? что-то другое? Это вело меня по всевозможным интересным, но не относящимся к делу путям. Мы будем очень признательны за руководство. О, кроме того, текст обычно относится к конкретным техническим областям, поэтому общие инструменты правописания не так полезны.
Что касается структуры документов, то здесь нет четкого визуального шаблона — например, разрывов строк или отступов — за исключением того факта, что «вопросы» обычно начинаются со строки. Дерьмо в документе может привести к тому, что символы появятся перед фактическим началом строки, а это означает, что что-то вроде строк r'^[0-9]+' не работает надежно.
Хотя «вопросы» всегда начинаются с int, точки и пробела; OCR может заменять другие символы или пропускать символы. Это не столько проблема с Tesseract или Cunieform, сколько с плохим качеством бумажных документов.
#Примечание: для рассматриваемого проекта было решено, что лучше подготовить текст для оптического распознавания символов, чем тратить время на кодирование решения. Однако я все еще люблю хорошие указатели.