加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

在PHP中解析维基百科标记的最佳方法是什么?

发布时间:2020-12-13 16:23:05 所属栏目:PHP教程 来源:网络整理
导读:我试图以结构化的方式解析特定的维基百科内容.这是一个示例页面: http://en.wikipedia.org/wiki/Polar_bear 我取得了一些成功.我可以检测到这个页面是一个“specie”页面,我也可以将Taxobox(右侧)的信息解析成一个结构.到现在为止还挺好. 但是,我也试图解析
我试图以结构化的方式解析特定的维基百科内容.这是一个示例页面:

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

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

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

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

{{转换| 350 | – | 680 |公斤|简称=上}}

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

我的困境如下:

>我可以继续我目前的半结构化解析路径
有很多工作删除不需要的元素以及“模仿”
需要渲染的模板.
>或者,我可以从呈现的HTML输出开始并解析它,但我担心的是,以结构化方式解析它同样脆弱和复杂

理想情况下,有一个库来解决这个问题,但我还没有找到一个可以解决这个问题的工具.我也看过像DBPedia这样的结构化维基百科数据库,但那些只有我已经拥有的相同结构,他们没有在Wiki文本本身提供任何结构.

解决方法

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

wiki syxtax非常复杂,有很多怪癖,没有正式的规范.这意味着创建自己的解析器太多了,你应该使用MediaWiki中的解析器.

因此,我认为通过the MediaWiki API获取解析的HTML是最好的选择.

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读