Какой вики парсер? - PullRequest
       14

Какой вики парсер?

6 голосов
/ 15 февраля 2009

Кто-нибудь знает о синтаксическом анализаторе, который может принимать форматированный текст Wiki в качестве входных данных и создавать дерево сущностей так же, как синтаксический анализатор XML создает дерево сущностей? Чтобы уточнить, я ищу что-то, что будет принимать текст, как:

 -Intro-
 Textual stuff in ''italics''
 --Subhead--
 Yet more text

и создайте дерево с корнем в Intro с тремя дочерними узлами, один из которых (Subhead) сам имеет дочерний. Я ищу что-то, что может понять "простой" формат вики, описанный в http://meta.wikimedia.org/wiki/Help:Wikitext.

Мне известно о нескольких лексерах для текста вики, но нет парсеров дерева. Я ищу что-то с открытым исходным кодом и написано на C или C ++.

Ответы [ 6 ]

2 голосов
/ 22 февраля 2009

Возможно, вы захотите взглянуть на Mylyn WikiText , который представляет собой анализатор, использующий шаблон проектирования Builder для преобразования разметки вики в различные форматы XML. Поставляется со сборщиками для HTML, Eclipse Help, DITA и DocBook. Вы можете использовать свой собственный конструктор для настройки вывода.

Парсер может обрабатывать текстовую разметку, MediaWiki, TracWiki, TWiki и разметку Confluence. Он расширяемый, так что вы можете добавлять новые языки, если хотите.

Библиотека является Java

2 голосов
/ 15 февраля 2009

Я написал парсер, который внутренне создает такое дерево в Java: API Java Wikipedia

Может быть, вы можете получить некоторые идеи для вашей реализации C или C ++?

Класс HTMLConverter использует дерево внутренних узлов для преобразования его в разметку HTML.

2 голосов
/ 15 февраля 2009

Что бы я сделал, это

  1. Напишите синтаксис BNF для этого языка вики. Как это просто, BNF также будет простым.
  2. Используйте The Spirit Framework для создания парсера для него. Это действительно просто (для таких простых вещей), и синтаксис BNF переводится на C ++ так естественно.
2 голосов
/ 15 февраля 2009

Вы не можете сделать это напрямую со страницы в вики, потому что в вики нет полной информации. Вместо этого текст формата вики переводится в основном с помощью набора правил регулярных выражений и вставляется в предопределенную структуру страницы в HTML или XHTML.

Самый простой способ сделать то, что вы хотите, - найти подходящий форматер для некоторого облегченного текстового формата (например, текстильного или креольского), передать его для генерации XHTML, а затем проанализировать XHTML с помощью любого обычного анализатора.

1 голос
/ 15 февраля 2009

Вы можете получить некоторые идеи из этого модуля Perl:

http://search.cpan.org/dist/HTML-WikiConverter-MediaWiki/

Я понимаю, что вы ищете C / C ++, но, эй, вы можете получить немного добра.

0 голосов
/ 28 октября 2015

Wiki Parser делает именно то, что вам нужно: он переводит медиа-вики-синтаксис в обычный XML. Он сохраняет практически всю структуру страницы и обрабатывает шаблоны, галереи изображений, перенаправления и многое другое.

Это также на несколько порядков быстрее, чем другие парсеры, что занимает около 2-3 часов для анализа всех 55 ГБ текущей английской Википедии.

...