哪个Wiki解析器?

时间:2009-02-14 22:29:32

标签: c++ c wiki mediawiki parsing

有没有人知道可以将Wiki格式的文本作为输入并生成实体树的解析器,就像XML解析器生成实体树一样?为了澄清,我正在寻找能够采用以下文字的内容:

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

并生成一个以Intro为根的树,其中包含三个子节点,其中一个子节点(Subhead)本身有一个子节点。我正在寻找能够理解http://meta.wikimedia.org/wiki/Help:Wikitext中描述的“简单”wiki格式的东西。

我知道Wiki文本的几个词法分析器,但没有树解析器。我正在寻找开源的东西,用C或C ++编写。

6 个答案:

答案 0 :(得分:2)

您不能直接从wiki格式的页面执行此操作,因为Wiki格式没有完整的信息。相反,维基格式文本基本上由一堆正则表达式规则翻译,并插入到HTML或XHTML中的预定义页面框架中。

执行所需操作的最简单方法是为某些轻量级文本格式(如纺织品或克里奥尔语)找到合适的格式化程序,将其传递给生成XHTML,然后使用任何常规解析器解析XHTML。

答案 1 :(得分:2)

我会做的是

  1. 为该wiki语言编写BNF语法。简单来说,BNF也很简单。
  2. 使用The Spirit Framework为其创建解析器。它非常简单(对于那些简单的事情),并且BNF语法很自然地被翻译成C ++。

答案 2 :(得分:2)

我编写了一个解析器,它在Java内部创建了这样一个树: Java Wikipedia API

也许你可以为你的C或C ++实现提供一些想法?

HTMLConverter class将内部节点树转换为HTML标记。

答案 3 :(得分:2)

您可能需要查看Mylyn WikiText,它是一个使用Builder设计模式将wiki标记转换为各种XML格式的解析器。它附带了HTML,Eclipse Help,DITA和DocBook的构建器。您可以使用自己的构建器来自定义输出。

解析器可以处理Textile,MediaWiki,TracWiki,TWiki和Confluence标记。它是可扩展的,因此您可以根据需要添加新语言。

libary是Java

答案 4 :(得分:1)

您可以从Perl模块中获得一些想法:

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

我知道你在寻找C / C ++,但是嘿,你可能会得到一些善意。

答案 5 :(得分:0)

Wiki Parser完全满足您的需求:它将媒体wiki语法转换为常规XML。它保留了几乎所有页面结构并处理模板,图像库,重定向等。

它比其他解析器快了几个数量级,花了大约2-3个小时来解析当前英语维基百科的所有55 GB。