我正在尝试以结构化的方式解析特定的维基百科内容。这是一个示例页面:
http://en.wikipedia.org/wiki/Polar_bear
我正在取得一些成功。我可以检测到这个页面是一个“物种”页面,我还可以将 Taxobox(右侧)信息解析为一个结构。到现在为止还挺好。
但是,我也在尝试解析文本段落。这些由 API 以 Wiki 格式或 HTML 格式返回,我目前正在使用 Wiki 格式。
我可以阅读这些段落,但我想以特定方式“清理”它们,因为最终我将不得不在我的应用程序中显示它并且它没有 Wiki 标记的意义。例如,我想删除所有图像。通过过滤掉 [[Image:]] 块相当容易。然而,也有一些我根本无法删除的块,例如:
{{转换|350|-|680|kg|abbr=on}}
删除整个块会破坏句子。并且有几十个这样的符号具有特殊的含义。我想避免编写 100 个正则表达式来处理所有这些,看看如何以更智能的方式解析它。
我的困境如下:
- 我可以继续我目前的半结构化解析路径,在那里我需要做很多工作来删除不需要的元素以及“模仿”确实需要渲染的模板。
- 或者,我可以从呈现的 HTML 输出开始并对其进行解析,但我担心以结构化方式解析它同样脆弱和复杂
理想情况下,有一个图书馆可以解决这个问题,但我还没有找到一个可以胜任这项工作的图书馆。我还查看了像 DBPedia 这样的结构化 Wikipedia 数据库,但那些只有我已经拥有的相同结构,它们不提供 Wiki 文本本身的任何结构。