基于视觉信息的网页分块算法(VIPS) - yysdsyl的专栏 - 博客频道 - CSDN.NET

2012-07-29 15:22 1233人阅读 评论(1) 收藏 举报

VIPS: a Vision-based Page Segmentation Algorithm.pdf下载

           这篇论文的主要思想:

           从人类的角度来看,当一个用户观察web页面的时候,它总是会自然而然的把一个语义块作为一个单一对象来看待,而不会管web页面的内部结构是如何描述的。因此一些视觉因素,比如背景颜色、字体颜色和大小、边框、逻辑块和逻辑块之间的间距等等可用来分辨语义块,充分的利用web页面的视觉提示,并结合DOM树进行页面语义分块,可以达到更加理想的效果。VIPS算法的首先从DOM树中提取出所有的合适的页面块,然后根据这些页面块检测出它们之间的所有的分割条,包括水平和垂直方向。最后基于这些分割条,Web页面的语义结构将被重新构建。对于每一个语义块又可以使用VIPS算法继续分割为更小的语义块。

vips算法流程图

           其中,节点分割依据有

           1、DOM结点本身的属性。比如当前DOM结点的标签,结点的背景色,当前结点所代表的页面块的大小,形状。

           2、当前DOM结点的孩子结点。比如孩子结点的标签,孩子结点所代表的区域的背景色,前景色,区域的大小以及不同类型的孩子的数目等等。

           节点的分割原则如下

           1、标签提示
           一些标签如<HR>通常用来从视觉上分隔不同主题的内容, 因此如果DOM结点中包含这些标签,该结点允许被继续分割;
           如果inline结点的孩子结点存在line-break结点,那么该结点 将被倾向于被分割;
           2、色彩提示
           如果当前结点的孩子结点中有一个结点的背景色与它的背 景色不同,分割该DOM结点。同时,具有不同背景色的节 点在本次循环中不再被分割。分割由下一次迭代完成
           3、文本提示
           如果当前结点的大部分孩子结点都是文本结点或者是虚拟 文本结点,不再继续分割该结点
           4、尺寸提示
           对不同的结点类型预定义一个门槛尺寸(结点的大小与整个 页面大小的比较),如果结点的相对尺寸小于门槛大小,那 么分割就停止

           分割条检测步骤如下:
           1、初始化分隔条列表。最早的分隔条列表中仅仅存在一个分隔条,起始和终止坐标为(Pbe,Pee),分别对应整个Web页面的起始坐标和终止坐标
           2、页面块被包含在分隔条中,此时,该分隔条将从页面块的边缘裂变为多个分隔条
           3、页面块与分隔条发生部分重合,那么根据页面块的边界重新调整分隔条的参数
           4、页面块跨越分隔条,那么此时移除该分隔条
           5、移除页面边缘的分隔条

           分割条检测步骤图

           语义块重构过程:
           从最小权重的分隔条开始,该分隔条两侧的页面块将合并在一起组成一个新的页面块。该合并过程不停的进行迭代,直到遇到权重最高的分隔条为止。对于每一个新的语义块,相应的DOC也被相应设置,参见下图:

            另外,分隔条用于区别不同语义的页面块,因此基于给定分隔条两边的语义块的在视觉上的差异,设置分隔条的权重。如果分隔条的权重越重,该分隔条两侧的页面属于不同语义块的可能性就越大。分割块权重的设置有以下几个原则:

           1、分隔条两边的页面块的距离越远,该分隔条的权重 就越高
           2、如果某个分隔条是通过检测HTML标签获取的,比 如<HR>,那么该分隔条的权重就越高
           3、 如果分隔条两侧的页面块的背景色是不相同的,那 么该分隔条的权重将相应增高
           4、 对于水平分隔条而言,如果分隔条两侧的页面块的 字体属性,比如字体大小,字体重量是不同的,那 么该分隔条的权重将增加。而且如果分隔条上侧的 页面块的体小于分隔条下侧的页面块的字体,那 么分隔条的权重将增加
           5、对于水平分隔条而言,当分隔条两侧的页面块的结 构非常相似,比如文本,那么该分隔条的权重将递减

基于视觉信息的网页分块算法(VIPS) - yysdsyl的专栏 - 博客频道 - CSDN.NET的更多相关文章

  1. 解决基于BAE python+bottle开发上的一系列问题 - artwebs - 博客频道 - CSDN.NET

    解决基于BAE python+bottle开发上的一系列问题 - artwebs - 博客频道 - CSDN.NET 解决基于BAE python+bottle开发上的一系列问题 分类: python ...

  2. JS获取整个HTML网页代码 - Android 集美软件园 - 博客频道 - CSDN.NET

    JS获取整个HTML网页代码 - Android 集美软件园 - 博客频道 - CSDN.NET JS获取整个HTML网页代码 分类: Android提高 2012-01-12 23:27 1974人 ...

  3. 基于libevent, libuv和android Looper不断演进socket编程 - 走向架构师之路 - 博客频道 - CSDN.NET

    基于libevent, libuv和android Looper不断演进socket编程 - 走向架构师之路 - 博客频道 - CSDN.NET 基于libevent, libuv和android L ...

  4. 基于Microsoft Azure、ASP.NET Core和Docker的博客系统

    欢迎阅读daxnet的新博客:一个基于Microsoft Azure.ASP.NET Core和Docker的博客系统   2008年11月,我在博客园开通了个人帐号,并在博客园发表了自己的第一篇博客 ...

  5. 基于视觉的 SLAM/Visual Odometry (VO) 开源资料、博客和论文列表

    基于视觉的 SLAM/Visual Odometry (VO) 开源资料.博客和论文列表 以下为机器翻译,具体参考原文: https://github.com/tzutalin/awesome-vis ...

  6. 欢迎阅读daxnet的新博客:一个基于Microsoft Azure、ASP.NET Core和Docker的博客系统

    2008年11月,我在博客园开通了个人帐号,并在博客园发表了自己的第一篇博客.当然,我写博客也不是从2008年才开始的,在更早时候,也在CSDN和系统分析员协会(之后名为"希赛网" ...

  7. 一个基于Microsoft Azure、ASP.NET Core和Docker的博客系统

    2008年11月,我在博客园开通了个人帐号,并在博客园发表了自己的第一篇博客.当然,我写博客也不是从2008年才开始的,在更早时候,也在CSDN和系统分析员协会(之后名为“希赛网”)个人空间发布过一些 ...

  8. Python开发爬虫之动态网页抓取篇:爬取博客评论数据——通过Selenium模拟浏览器抓取

    区别于上篇动态网页抓取,这里介绍另一种方法,即使用浏览器渲染引擎.直接用浏览器在显示网页时解析 HTML.应用 CSS 样式并执行 JavaScript 的语句. 这个方法在爬虫过程中会打开一个浏览器 ...

  9. 搞IT,算法编程不错的学习网址 & 一些专栏博客大神的地址(汇总)

    博客专栏大神 王晓华(算法的乐趣) 算法系列:http://blog.csdn.net/orbit/article/category/830251 PostgreSQL深入理解内核系列:http:// ...

随机推荐

  1. nginx代理配置

    server {     listen       80;     server_name  api.colortrip.cn;     client_max_body_size 10m;     a ...

  2. [php]php时间戳当中关于时区的问题

    PHP_VERSION = 5.5.11 话说php函数 time() 的起始时间戳是从:GMT 1970-01-01 00:00:00 开始算起的 写了点测试代码: $gmt1 = strtotim ...

  3. javascript prompt示例

    <html lang="en"> <head>   <title>Date example</title> <script t ...

  4. sqlserver 分页sql语句

     select * from (select *,row_number() over(order by CONTENT_ID ) as rnum from ArchiveContents) t whe ...

  5. GDB调试方法(转)

    一:列文件清单 1. List (gdb) list line1,line2 ************************************************************* ...

  6. MVC入门

    MVC开始是存在于桌面程序中的,M是指业务模型,V是指用户界面,C 则是控制器,使用MVC的目的是将M和V的实现代码分离,从而使同一个程序可以使用不同的表现形式.比如一批统计数据可以分别用柱状图.饼图 ...

  7. FAQ: Python中if __name__ == '__main__':作用

    #hello.pydef sayHello(): str="hello" print(str); if __name__ == "__main__": prin ...

  8. MySQLdb autocommit

    MySQLdb 中 autocommit 默认是关闭的,下面是例子. import MySQLdb conn = MySQLdb.connect(host='127.0.0.1',user='root ...

  9. Storm csdn

    blog.csdn.net/lonelytrooperblog.csdn.net/leytton http://my.oschina.net/apdplat/blog/308396

  10. Qt窗口的标题栏自绘

    因个人需要,要修改Qt Widget的标题栏,网上找了大半天,没有得到答案,但发现问的人比较多 所以现将找到的此文分享一下. (原文:http://www.qtsoftware.com/develop ...