pyList

利用文本及符号密度来提取新闻网页正文

在项目中需要收集相关行业新闻,发现一种基于文本及符号密度的网页正文提取方法,准确率挺高,依赖又少,特别推荐。

利用文本及符号密度来提取新闻网页正文

这种方法是对论文《基于文本及符号密度的网页正文提取方法》的实现。如果你感兴趣,可以前往阅读论文原文 http://mag.ieechina.com/oa/pdfdow.aspx?Sid=201807113 18

这篇论文中描述的算法看起来简洁清晰,并且符合逻辑。里面一个比较有用的判断标准:

        Ti - LTi
SbDi = --------------
        Sbi + 1
    SbDi: 符号密度
    Sbi:符号数量

如果一个节点里面的文本的符号出现次数越多,符号密度SbDi的值就越小,但是文档里说会越大,如何解 ?

因为它这里考虑的是一个『合乎逻辑』的正文。而不是为了欺骗这个程序而特意构造的文本。在一篇正常的文章中,文章越长,标点符号就阅读,这是自然而然的情况。 而你可能以为,会不会有一篇新闻,里面某一个栏目没有汉字,直接写了几百个标点符号。这种情况当然可以欺骗这个程序,但是那属于『特意构造』出来的bad case。

在一篇正常的文章中,标点符号越多,那么正文的文字也就越多。分子分母同时增加。而显然,文字增长会比标点符号增长快,所以这个比值会变大。

根据 GNE 26 作者 kingname 的测试使用该算法对今日头条、网易新闻、游民星空、观察者网、凤凰网、腾讯新闻、ReadHub、新浪新闻做了测试,几乎能够达到100%的准确率。个人在使用中体验,只要合理添加 noise_node_list,也能取到正文(除了一些SEO过度的页面)。

算法实现

目前有pythonnodeJS两个实现,依赖都很少

python 版还提供了很实用的 noise_node_list 参数,可以根据实际页面排除无关内容。

功能限制

因为只针对新闻类网页作提取,如果要提取其它类型的内容可能不行,但可以尝试多添加过滤 XPath 试试。

在线版本

这里以在线版 https://pylist.com/tools/gne 40 说明使用过程

需要输入两个内容:

  • 网页的 html 代码
  • 过滤的 xpath

因为不提供爬虫功能,可以通过 Chrome 开发者工具的 Copy OuterHTML 获取页面 HTML 代码和 Copy XPath 来获取排除的元素。

使用 Copy OuterHTML 来复制整个网页 HTML 代码。

Copy OuterHTML

如果提取到的内容不是自己想要的,可以选择提取到的元素,点 Copy XPath,然后粘贴到过滤 XPath ,可以是多个 XPath,用英文逗号 , 来隔开。

Copy XPath

输入效果

提取新闻

提取到新闻信息

  • 标题
  • 作者
  • 发布日期
  • 内容
  • 图片列表

效果如下:

新闻提取

在线版测试 https://pylist.com/tools/gne 40 在线版提取到的图片可能会有防盗链功能,显示不了。

参考

本文标签: 网页 文本 正文 提取 新闻
本文网址: https://pylist.com/t/1576112934 (转载注明出处)
如果你有任何建议或疑问可以在下面 留言
精彩评论
  • kingname
    2019-12-20 01:29

    我是GNE的作者,原本想做一个这样的在线测试页面,发现你已经先做了。请问有兴趣一起合作吗?

发表评论
验证码图片
相关推荐