Нечеткое регулярное выражение, обработка текста, лексический анализ?

Я не совсем уверен, какую терминологию искать, поэтому мой заголовок забавный... Вот рабочий процесс, который у меня есть:

  1. Полуструктурированные документы сканируются в файл. Файлы распознаются как текст.
  2. Текст преобразуется в объекты Python
  3. Объекты сериализуются (в SQL, JSON и т. д.) для использования.

Документы имеют такую ​​структуру:

ЗАГОЛОВОК бла-бла, Страница ###

бла

Мусорный текст...

<сильный>1. Текст вопроса...

продолжение до настоящего момента. А. Текст выбора...

адсадсф. Б. Другой выбор...

<сильный>2. Еще вопрос...

Мне нужно извлечь вопросы и варианты. Проблема в том, что, поскольку текст является выводом OCR, иногда встречаются странные замены, такие как «2» -> «Z», что делает обычные регулярные выражения бесполезными. Я попробовал модуль Левенштейна, и он помогает, но он требует предварительного знания ожидаемого расстояния редактирования.

Я не знаю, хочу ли я создать парсер? лексер? что-то другое? Это вело меня по всевозможным интересным, но не относящимся к делу путям. Мы будем очень признательны за руководство. О, кроме того, текст обычно относится к конкретным техническим областям, поэтому общие инструменты правописания не так полезны.

Что касается структуры документов, то здесь нет четкого визуального шаблона — например, разрывов строк или отступов — за исключением того факта, что «вопросы» обычно начинаются со строки. Дерьмо в документе может привести к тому, что символы появятся перед фактическим началом строки, а это означает, что что-то вроде строк r'^[0-9]+' не работает надежно.

Хотя «вопросы» всегда начинаются с int, точки и пробела; OCR может заменять другие символы или пропускать символы. Это не столько проблема с Tesseract или Cunieform, сколько с плохим качеством бумажных документов.

#

Примечание: для рассматриваемого проекта было решено, что лучше подготовить текст для оптического распознавания символов, чем тратить время на кодирование решения. Однако я все еще люблю хорошие указатели.


person justinzane    schedule 27.05.2012    source источник
comment
Вы можете попробовать на нем какую-нибудь форму НЛП. Орфографические ошибки могут иногда делать НЛП неточным, но оно должно работать.   -  person Blender    schedule 28.05.2012
comment
Если все документы взяты из одного источника, есть ли разумное предположение, что ошибочные замены будут применяться постоянно? Если это так, вы можете учесть их в своем регулярном выражении.   -  person David B    schedule 28.05.2012
comment
Не могли бы вы добавить больше информации о структуре документа? Не могли бы вы указать, как выглядит раздел вопросов, достаточно ли он понятен для того, чтобы машина его искала (например, вопросы начинаются после двух переносов строки, а до того, как двух переносов нет). Конец следующие вопросы находятся в той же строке?   -  person Robert Zaremba    schedule 28.05.2012


Ответы (1)


Из того, что вы понимаете из вашего заявления, вы, возможно, пытаетесь создать синтаксический анализатор. Учитывая расплывчатые требования и примеры, я бы посоветовал вам начать с просмотра nltk.org. Другой альтернативой может быть gate.ac.uk.

person Josep Valls    schedule 24.07.2012