日志标签 ‘正文抽取’

正文抽取方法总结

2012年8月15日

如果是做正文抽取的话,想要做到很精准的效果是难的(尤其是准确剔除掉正文周边内容),尤其是来自一些不正规的站点网页。网页信息抽取的方法有很多,比如从算法上分:基于模板的,基于信息量、基于视觉的、基于语义挖掘的、基于统计的。从HTML处理上分为:基于行块、基于DOM树。

  • 1.一般方法,基于文本信息(行密度、行长度、链接文字比、文本中标点符号比例、图片、视频等),计算正文在源码哪些行上分布较多,取正文较多的行;有算法是根据行的正文密度来计算的,简单点说就是正文长度/标签数量。一般的程序编写,就是建立Dom树,把再计算Dom树上某个节点的评估函数。
    对于大多数新闻类网站,这个方法会工作得很好。但是需要考虑以下问题:1、文章长度比较短、信息比较分散的内容   2、版权信息或者网站说明的过滤。
  • 2. 基于视觉的页面分割算法,是基于分块的算法的一种具体实现方式,这是微软亚洲研究院的一个算法。一是根据视觉来分块,二是根据视觉来进行块合并。基于视觉处理较复杂,需要用到CSS、Javascript等引擎,需要用浏览器内核库来处理HTML,性能可能不高。另外,这个算法的结果只是告诉大家网页大概可以分为多少块,每一块的位置、大小是什么,而哪块和哪块是正文还需要进一步计算。计算量和下载量都比较大。
  • 3. 基于语义的正文抽取,根据锚文本和页面标题等不容易出错的信息去发现正文块,这类算法有效,但是仍有局限性。实际很少采用这种方案。
  • 4. 基于统计的,基于分块和统计相结合的新闻正文抽取 和 基于同层网页相似性去除网页噪音。前者利用统计是找到同一网页里面的正文块,后者是链接同一路径下的不同网页的相似度去除噪音,两者是有区别的。基于统计,可以减少个别网页的差异带来的误差,提高准确度。

主要的开源程序:

Readability  https://code.google.com/p/arc90labs-readability/ ,javascript语言

Readability  C#、Python、Node.js、Objective-C 版代码见http://blog.arc90.com/2009/06/20/readability-now-available-in-three-delicious-flavors/

cx-extractor      基于行块分布函数的通用网页正文抽取:线性时间、不建DOM树、与HTML标签无关 https://code.google.com/p/cx-extractor/

boilerpipe  Boilerplate Removal and Fulltext Extraction from HTML pages  https://code.google.com/p/boilerpipe/

Python 一句话抓取百度搜狗的热词

2012年6月19日
  • 需要依赖 python, pyquery

[gist]https://gist.github.com/xddaijun/3115077[/gist]