4

我正在尝试以结构化的方式解析特定的维基百科内容。这是一个示例页面:

http://en.wikipedia.org/wiki/Polar_bear

我正在取得一些成功。我可以检测到这个页面是一个“物种”页面,我还可以将 Taxobox(右侧)信息解析为一个结构。到现在为止还挺好。

但是,我也在尝试解析文本段落。这些由 API 以 Wiki 格式或 HTML 格式返回,我目前正在使用 Wiki 格式。

我可以阅读这些段落,但我想以特定方式“清理”它们,因为最终我将不得不在我的应用程序中显示它并且它没有 Wiki 标记的意义​​。例如,我想删除所有图像。通过过滤掉 [[Image:]] 块相当容易。然而,也有一些我根本无法删除的块,例如:

{{转换|350|-|680|kg|abbr=on}}

删除整个块会破坏句子。并且有几十个这样的符号具有特殊的含义。我想避免编写 100 个正则表达式来处理所有这些,看看如何以更智能的方式解析它。

我的困境如下:

  • 我可以继续我目前的半结构化解析路径,在那里我需要做很多工作来删除不需要的元素以及“模仿”确实需要渲染的模板。
  • 或者,我可以从呈现的 HTML 输出开始并对其进行解析,但我担心以结构化方式解析它同样脆弱和复杂

理想情况下,有一个图书馆可以解决这个问题,但我还没有找到一个可以胜任这项工作的图书馆。我还查看了像 DBPedia 这样的结构化 Wikipedia 数据库,但那些只有我已经拥有的相同结构,它们不提供 Wiki 文本本身的任何结构。

4

1 回答 1

3

使用的模板太多,无法手动重新实现所有模板,而且它们一直在变化。因此,您将需要能够处理所有模板的 wiki 语法的实际解析器。

wiki syxtax 相当复杂,有很多怪癖并且没有正式的规范。这意味着创建自己的解析器会很费力,您应该使用 MediaWiki 中的解析器。

因此,我认为通过MediaWiki API获取解析后的 H​​TML是您最好的选择。

可能更容易从 wiki 标记中解析的一件事是信息框,所以也许它们应该是一个特例。

于 2011-12-25T10:56:13.413 回答