Некоторое время назад я начал писать грамматику на основе BNF для кабели, опубликованные WikiLeaks. Однако теперь я понял, что мой подход, возможно, не самый лучший, и я ищу некоторые улучшения.
Кабина состоит из трех частей. Заголовок имеет формат в стиле RFC2822. Этот разбор обычно правильный. Текстовая часть имеет более неформальную спецификацию. Например, есть строка REF. Это должно начинаться с REF:
, но я нашел разные версии. Следующее регулярное выражение улавливает большинство случаев: ^\s*[Rr][Ee][Ff][Ss: ]
. Итак, впереди пробелы, разные корпуса и так далее. Текстовая часть представляет собой в основном обычный текст с некоторыми специально отформатированными заголовками.
Мы хотим распознавать каждое поле (дата, ссылка и т. д.) и помещать его в базу данных. Мы выбрали Pythons SimpleParse. На данный момент синтаксический анализ останавливается на каждом поле, которое он не распознает. Сейчас мы ищем более отказоустойчивое решение. Все поля имеют какой-то порядок. Когда синтаксический анализатор не распознает поле, он должен добавить к текущему полю некоторый «не распознанный» блок и продолжить. (Или, может быть, у вас есть лучший подход здесь).
Какой парсер или другое решение вы бы предложили? Вокруг что-то лучше?
/ not_recognized
к каждому токену заголовка? - person Daniel Kluev   schedule 15.05.2011