参考:https://www.cnblogs.com/zhengyou/p/3605458.html
一个网页的内容基本包含在正文中,对于新闻类网页尤其。将网页正文之外其他的内容剔除从而降低分析的难度是一种基本的思路。同时正文内容提取的好坏直接影响到接下来分析工作的质量。
常用抽取方法
基于标签:
1. 基于标签
这是很容易想到的一种思路。基于HTML文件本身的某些结构特点和规范。这里也可以细分:
- 基于标签窗的算法: 例如<p>段落标签,一般的正文内容都会嵌套其中。<title>标题标签,一般会将论文的标题嵌入,接下来的内容很大程度上应该是正文的内容了。根据写作习惯,标题下方开始写正文,上方<p>标签就应该会频繁出现,主要的思路是标签的某种组合和标签的内容对应。
- 基于标签密度的算法:对于大多数的网页而言,正文部分的标签明显要少于非正文部分,而且正文当中的标签大部分标签应该属于修饰类标签。这就有一种基于标签统计的思路算法。从某一行开始,标签数量明显减少,到某一行又骤升,这一间隔区域很大程度上就属于网页的正文部分。
- 基于DOM树的算法:
什么叫DOM(Document Object Model)树:并没有看到对DOM树的定义,不过很容易理解,下图就很明白体现了一种对应关系。
在一个网页中标签的位置下左图所示,而对应的DOM树如下又图(图片来源:http://www.w3school.com.cn/htmldom/dom_nodes.asp)所示:
这种算法需要对网站HTML建立DOM树,然后对之进行遍历递归,去除相应的噪音信息之后再从剩余的节点中进行选择。由于要建立DOM树,算法的时间/空间复杂度均较高。
基于标签的算法都潜在默认了这样的一个信息:即网站的网页生成,制作都遵循了一定的标签使用规范。不过现在的互联网网页五花八门,很难都按常理出牌,所以这在一定程度上降低了算法的准确性和通用性。
基于结构树解析的网页正文抽取方法: https://wenku.baidu.com/view/2972cd3031126edb6f1a1079.html (已读)
2. 基于内容
网页按照内容形式分类大概分为:主题型,图片型和目录型。
对于主体型的网页,例如新闻类,博客类等,主要特点是文字内容比较多。基于这一点,另外一种正文提取思路是基于正文本身的特点。在一定程度上,正文的文字数量要比其他部分多。这在一定程度上有助于形成了区域的区分度。文字数量的骤增和骤减在一定程度上可以作为正文开始和介绍的判读点。
这类算法在本质上没有多大的差异,只是选择度量文字密度的方式不同而已。有的是基于块,有的是基于行,有的是基于转化函数。算法都很容易理解,也相对比较容易实现。下面的几篇文章就是基于网页内容的算法。
《基于行块分布函数的通用网页正文抽取》陈鑫 https://wenku.baidu.com/view/2b5c9793daef5ef7ba0d3cb5.html
《基于网页分块的正文信息提取方法》 黄 玲,陈 龙
博文《我为开源作贡献,网页正文提取--HtmlArticle2》
基于行块分布函数的通用网页正文(及图片)抽取 - Python版本:
http://blog.rainy.im/2015/09/02/web-content-and-main-image-extractor/
3. 基于视觉
想对于前面两种思路,这类算法的思路有一种"高大上"的感觉。这里不得不提到这类算法的基础:VIPS(Vision-based Page Segementation)算法。
VIPS算法:利用背景颜色,字体颜色和大小,边框,逻辑块和逻辑块之间的间距等视觉特征,制定相应的规则把页面分割成各个视觉块!(视觉效果真的是千变万化,如何制定规则集始终是个复杂的问题)
VIPS算法充分利用了Web页面的布局特征。它首先从DOM 树中提取出所有合适的页面块,然后根据这些页面块检测出它们之间所有的分割条,包括水平和垂直方向;最后基于这些分割条.重新构建Web页面的语义结构。对于每一个语义块又可以使用VIPS算法继续分割为更小的语义块。该算法分为页面块提取、分隔条提取和语义块重构3部分,并且是递归调用的过程,直到条件不满足为止.
相关文献:
《基于视觉特征的网页正文提取方法研究》安增文,徐杰锋
《A vision—based page segmentation algorithm》
4. 基于数据挖掘/机器学习
看到很多作者对这一思路的普遍评价是"杀鸡焉用牛刀"。
基本思路是使用一定数量的网页作为训练集,通过训练得到网页正文的一些特点,然后将这些特征作为网页片段是否符合网页正文的判断依据。对于数据挖掘/机器学习算法来讲,训练样本的采集很重要,然而现实是互联网中网页形式千变万化,不太可能取太多数量作为训练样本。这样这种算法的准确性和通用性就受到了制约,同时这类算法前期工作也比较复杂。
基于数据挖掘思想的网页正文研究: http://www.doc88.com/p-1465464766774.html, 我们有6千个经过验证的页面,,而该论文只用了750个国内的新闻页面训练
5. 网页正文提取工具:Readability算法: https://www.biaodianfu.com/readability.html
python-readability持续更新中 : https://github.com/buriy/python-readability
6:Newspaper:使用Python开发的新闻和文章提取程序 : http://hao.jobbole.com/python-newspaper/
code: https://github.com/codelucas/newspaper/tree/master
7:网页信息抽取RoadRunner算法:
https://blog.csdn.net/l294265421/article/details/50408558
网页信息抽取RoadRunner技术浅析_论文_百度文库: https://wenku.baidu.com/view/c862c86e31b765ce0508148f.html
8:其他方法:
一种融合话题特征的新闻内容在线抽取方法及系统: http://www.vipzhuanli.com/pat/books/201810111700.6/2.html