我试图解析(在Java中)维基标记在维基百科中。有一些现有的包在那里完成此任务,但我还没有发现任何适合我的需要特别好。我合作过的最好包装是 Mathclipse Bliki解析器,该做的最体面的工作页面。

此解析器是不完整的,但是,并不能解析某些网页或他人不正确地分析。遗憾的是该代码是相当混乱,因此固定的问题在此解析引擎是非常耗时且容易出错。

在试图找到一个更好的解析引擎使用基于EBNF解析器用于此任务(具体ANTLR)我已经研究。一些尝试后,但它似乎这种做法并不特别适合这项任务,因为维基标记是相对宽松的,因此不能轻易放入一个结构化的语法。

我和ANTLR和类似解析器的经验是非常有限的。然而,因此它可能是我的经验不足,是造成问题,而不是这样的解析器是天生适合这项任务不佳。任何人只要有更多的经验就这些议题可以在这里有多重?

@Stobor:我已经说过,我已经看了各种解析引擎,包括谷歌的查询返回的人。到目前为止,我已经找到了最好的是Bliki引擎。问题是,这样的分析器修复问题变得令人难以置信的繁琐,因为它们本质上都是条件语句和正则表达式的长链,导致意大利面条代码。我在寻找的东西更接近解析的EBNF方法,因为这方法更清晰,更简洁,因而更容易理解和发展。我已经看到了MediaWiki的链接您发布,这似乎证实了我的怀疑,EBNF开箱的是适合这个任务不好。因此,我要寻找一个解析引擎,处理维基标记的凌乱语法清晰易懂像EBNF,也能干。

有帮助吗?

解决方案

在任何一般意义解析的mediawiki含量是几乎不可能使用短的mediawiki本身。为了解析它,你需要能够完全解析HTML和CSS(因为它们可以嵌入),以及处理全模板实例化和扩展,以及在培训相关的内容可能已使用任何解析器的补充。即模板实例相当于一个预处理器。

有在某种意义上类同解析C ++除了解析器也处理畸形输入和由解析器扩展制成任意的语法添加。实际的mediawiki实现是一个很像Perl 5中,原来的实施是没有那么糟糕,因为所有的边缘情况正好落在了不过的事情联系在一起,但实际上获得任何后续的实施做同样的事情,真的很复杂,尤其是因为行为是经常出现的和无证,没有设计。

如果您不需要的网页100%工作或能够提取你也许可以凑齐一起的东西,为你工作的所有内容,正如你已经注意到有一些程序做到这一点。简短了解您的实际需求,准确的,我怀疑任何人都可以给你如何分析它基本上更好的答案。如果您需要能够在每一页上工作,正确地分析一切,你最好有一个相当大的团队,几年来工作,即使如此,你仍然有很多小的边缘情况。

因此,在短期,没有一个EBNF语法是不适合的mediawiki解析标记,但没有什么是...

其他提示

您是正确的维基媒体不借给自己EBNF明确定义grammers。

您将要看看,这将回溯到能够解析维基工具

btyacc其是回溯YACC。 http://www.siber.com/btyacc/

您可以看看口音。比更好的Yacc http://accent.compilertools.net/

或者你可能要崩溃,学习序言和你自己卷一番风味。不管你做什么,你有一个有趣的学习今后一段时期的你。

好运

我曾经试图写 Boost.Quickbook解析器时,其基本上与由维基百科使用维基文本。

这是一个非常繁琐的过程,只是为了得到一些基本的工作,但我认为它最终将有可能写的EBNF语法它。如果你有兴趣,我的部分分析器是可在线(语法被嵌入在DOC-字符串)。

这答案是有点过分了,但什么渲染文本,然后才能找出不同的维基成分解析HTML DOM。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top