Я пытаюсь разобрать (на Java) разметку Викимедиа, найденную в Википедии. Существует несколько существующих пакетов для этой задачи, но я не нашел подходящих для моих нужд особенно хорошо. Лучший пакет, с которым я работал, - это Mathclipse Bliki parser, который делает достойную работу на большинстве страниц.Разбор викимедийной разметки - парсеры на основе EBNF плохо подходят?
Этот анализатор является неполным и не может анализировать некоторые страницы или неправильно анализировать другие. К сожалению, код довольно грязный, и поэтому устранение проблем в этом синтаксическом анализаторе очень трудоемко и подвержено ошибкам.
При попытке найти лучший синтаксический анализ я исследовал с использованием анализатора на основе EBNF для этой задачи (в частности, ANTLR). Однако после некоторых попыток кажется, что этот подход не очень хорошо подходит для этой задачи, поскольку разметка Викимедиа относительно расслаблена и поэтому не может быть легко вписана в структурированную грамматику.
Мой опыт работы с ANTLR и подобными анализаторами очень ограничен, однако это может быть моя неопытность, которая вызывает проблемы, а не такие синтаксические анализаторы, по своей сути, плохо подходят для этой задачи. Может ли кто-нибудь, у кого больше опыта в этих темах, весить здесь?
@Stobor: Я уже упоминал, что я рассмотрел различные механизмы синтаксического анализа, в том числе те, которые были возвращены запросом google. Самое лучшее, что я нашел до сих пор, это двигатель Bliki. Проблема в том, что проблемы с фиксацией таких парсеров становятся невероятно утомительными, потому что все они являются по существу длинными цепочками условностей и регулярных выражений, что приводит к коду спагетти. Я ищу что-то более похожее на метод разбора EBNF, поскольку этот метод намного более ясен и более краток, и поэтому его легче понять и развиться. Я видел ссылку MediaWiki, которую вы опубликовали, и, похоже, подтверждает мои подозрения, что EBNF из коробки плохо подходит для этой задачи. Таким образом, я ищу механизм синтаксического анализа, который ясен и понятен, как EBNF, но также способен обрабатывать беспорядочный синтаксис разметки wiki.
Это может быть хорошо, если вы могли бы указать несколько потребностей, которые не могут быть удовлетворены верхние хиты на http://google.com/search?q=wikipedia+java+parser, чтобы мы могли предложить лучшие ответы ... – Stobor
также: http://www.mediawiki.org/wiki/Markup_spec/BNF – Stobor