使用修改的Nokogiri解析Wikitext?

问题描述:

对于这个问题的长度抱歉,它更像是“这是可能的”而不是“我该怎么做”。使用修改的Nokogiri解析Wikitext?

我的目标是从*标记中除去纯文本 - 表格,模板,格式。是否在wikitext markup(例如''bold text'')或HTML(<b>bold text</b>)中。

维基文本是自定义标签的混合:模板{{ ... }},表{| ... |},链接[[ ... ]]和HTML元素。解析它是一种噩梦。你不能使用正则表达式,因为标签可以嵌套,并且它可以包含HTML,所以几乎任何事情都是可能的。我想保留HTML中的一些文本(粗体文本内的东西),但其他东西如表格需要完全剥离。

我想到了,再重新考虑像引入nokogiri XML解析器,加入{{/}}以替代<x>/</x>

有谁知道Nokogiri(或另一个Ruby XML解析器)知道这是否可能,甚至是一个好主意?

我的替代方案是为wiki标记重新使用现有的解析器WikiCloth,然后尝试通过其他方法删除任何剩余的HTML。

+1

这是一种上下文无关的语言,所以libxml应该能够解析它。我不确定您是否可以更改分析树。大概写你自己的解析器。 – Reactormonk 2012-02-02 11:32:43

+1

为什么不把它渲染为HTML,其中包含所有标记的内容,然后使用Nokogiri来提取原始文本? – Phrogz 2012-02-03 06:08:45

+0

@Progrog我可以做到这一点,我只是希望能节省一些时间,因为有很多文字需要解析。 – 2012-02-03 08:16:37

这听起来像个好主意。然而,你不可能'补丁'Nokogiri,“加入{{/}}作为<x>/</x>的替代品。这是因为Nokogiri解析和XPath完成的大部分工作都是由后端的libxml2完成的,并生成DOM的字符串表示。你必须修补并重新编译libxml2(然后用新版本重建Nokogiri)......但那时我不知道Nokogiri会如何表现。

尝试修补REXML可能会有更好的运气,因为它是用纯Ruby编写的。