tol*_*uju 9 java parsing antlr ebnf wikitext
我试图解析(在Java中)维基百科上的Wikiimedia标记.有许多现有的包用于此任务,但我没有发现任何特别适合我的需求.我使用过的最好的软件包是Mathclipse Bliki解析器,它在大多数页面上都做得不错.
但是,此解析器不完整,无法解析某些页面或无法正确解析其他页面.可悲的是,代码相当混乱,因此修复此解析引擎中的问题非常耗时且容易出错.
在尝试找到一个更好的解析引擎时,我已经研究过使用基于EBNF的解析器来完成这项任务(特别是ANTLR).经过一些尝试后,似乎这种方法并不特别适合这项任务,因为维基媒体标记相对宽松,因此不能轻易地融入结构化语法.
我对ANTLR和类似解析器的经验非常有限,因此可能是我的经验不足导致问题,而不是这样的解析器天生就不适合这项任务.任何对这些话题有更多经验的人都可以在这里说点吗?
@Stobor:我已经提到我已经查看了各种解析引擎,包括谷歌查询返回的引擎.到目前为止我发现的最好的是Bliki引擎.问题是修复这些解析器的问题变得非常繁琐,因为它们本质上都是条件和正则表达式的长链,导致意大利面条代码.我正在寻找更类似于EBNF解析方法的东西,因为该方法更清晰,更简洁,因此更容易理解和发展.我已经看过你发布的mediawiki链接,似乎证实了我怀疑开箱即用的EBNF不适合这个任务.因此,我正在寻找一个像EBNF一样清晰易懂的解析引擎,但也能够处理wiki标记的混乱语法.
如果不使用 mediawiki 本身,解析任何一般意义上的 mediawiki 内容几乎是不可能的。为了解析它,您需要能够完全解析 HTML 和 CSS(因为它们可以嵌入),并处理完整的模板实例化和扩展,以及相关内容可能使用的任何解析器添加。该模板实例化相当于一个预处理器。
它在某种意义上类似于解析 C++,只不过解析器还处理格式错误的输入和由解析器扩展进行的任意语法添加。实际的 mediawiki 实现很像 Perl 5,最初的实现并没有那么糟糕,因为所有的边缘情况都会出现,但是事情是链接在一起的,但实际上让任何后续实现来做同样的事情确实很复杂,特别是因为行为通常是突发的、没有记录的,而不是经过设计的。
如果您不需要 100% 的页面才能工作或能够提取所有内容,您也许可以拼凑出一些适合您的内容,正如您所注意到的,有一些软件包可以做到这一点。在不了解您实际的精确需求的情况下,我怀疑任何人都可以就如何解析它为您提供更好的答案。如果您需要能够在每个页面上工作并正确解析所有内容,那么您最好拥有一个相当大的团队和几年的工作时间,即使如此,您仍然有很多小的边缘情况。
简而言之,没有一个 EBNF 语法不太适合解析 mediawiki 标记,但实际上没有什么是......
| 归档时间: |
|
| 查看次数: |
1318 次 |
| 最近记录: |