【发布时间】:2011-12-24 10:29:46
【问题描述】:
我正在尝试以结构化的方式解析特定的维基百科内容。这是一个示例页面:
http://en.wikipedia.org/wiki/Polar_bear
我取得了一些成功。我可以检测到这个页面是一个“物种”页面,我还可以将 Taxobox(右侧)信息解析为一个结构。到目前为止一切顺利。
但是,我也在尝试解析文本段落。这些由 API 以 Wiki 格式或 HTML 格式返回,我目前正在使用 Wiki 格式。
我可以阅读这些段落,但我想以特定方式“清理”它们,因为最终我将不得不在我的应用程序中显示它并且它没有 Wiki 标记的意义。例如,我想删除所有图像。通过过滤掉 [[Image:]] 块相当容易。然而,也有一些我根本无法删除的块,例如:
{{convert|350|-|680|kg|abbr=on}}
删除整个块会破坏句子。并且有几十个这样的符号具有特殊的含义。我想避免编写 100 个正则表达式来处理所有这些,看看如何以更智能的方式解析它。
我的困境如下:
- 我可以继续我目前的半结构化解析路径 有很多工作删除不需要的元素以及“模仿” 确实需要渲染的模板。
- 或者,我可以从呈现的 HTML 输出开始并对其进行解析,但我担心以结构化方式解析它同样脆弱和复杂
理想情况下,有一个库可以解决这个问题,但我还没有找到适合这项工作的库。我还查看了结构化的 Wikipedia 数据库,例如 DBPedia,但那些只有我已经拥有的相同结构,它们不提供 Wiki 文本本身的任何结构。
【问题讨论】:
-
您可能想查看 mediawiki 解析器的工作原理:svn.wikimedia.org/svnroot/mediawiki/trunk/phase3/includes/…
-
@sjngm。它不是重复的。我知道如何解析维基百科页面的结构化数据,我说的是非结构化部分。
-
@Mearlyn。这看起来很有趣。是否还有任何文档、示例用法等?
-
n/m,找到它:svn.wikimedia.org/doc/classParser.html#_details 看起来像个野兽,有点怀疑它是否可行,但会试一试。
标签: php wikipedia wikipedia-api