2009-02-14 3 views
6

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

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

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

Я знаю несколько лексеров для текста Wiki, но не дерево парсеров. Я ищу что-то Open source и написано на C или C++.

ответ

2

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

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

2

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

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

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

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

HTMLConverter class берет дерево внутренних узлов, чтобы преобразовать его в разметку HTML.

2

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

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

libary является Java

0

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

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

Смежные вопросы