基于视觉信息的网页分块算法(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. 处理date类型对象的方式

    在jsp中通过key属性映射到编译后jsp页面的name属性,通过model中的 setxxxx()方法将jsp页面通过wdatepicker插件产生的string类型的数据转换为timestamp类 ...

  2. seajs 学习笔记

    seajs的作者是玉伯,具体好处优点等详见官方网址 介绍 1 模块定义define define(function(require,exports,module){ //require 引入需要的模块 ...

  3. C#学习日志 day7 --------------LINQ与Lamda语句的初步尝试以及XML的生成

    LINQ是一种集成在计算机语言里的信息查询语句,是c#3.0中最惹人瞩目的功能. 在C#中,LINQ语句有两种写法. 第一种写法与SQL语句类似: IEnumerable<Customer> ...

  4. otl库(以前不知道有这个库,并且还可以在Unix下使用)

    OTL介绍:OTL 是 Oracle, Odbc and DB2-CLI Template Library 的缩写,是一个C++编译中操控关系数据库的模板库,它目前几乎支持所有的当前各种主流数据库,例 ...

  5. NOI2015 Day2

    NOI2015 Day2 荷马史诗 题目描述:给出\(n\)个数,要求\(n\)个\(k\)进制数来对应这\(k\)个数(允许有前导零),\(n\)个\(k\)进制数互不为前缀,求\(n\)个数乘以对 ...

  6. 浅析指针(pointer)与引用(reference)

    在c++函数中,形式参数用引用和用指针都可以起到在被调用函数中改变调用函数的变量的作用.什么时候用引用作参数?什么时候用指针作参数呢 void function (int *ptr); void fu ...

  7. 07.15 first与first-child的区别

    举例: $("ul li:first");  //选取第一个 <ul> 元素的第一个 <li> 元素 $("ul li:first-child&q ...

  8. poj 3680 Intervals(费用流)

    http://poj.org/problem?id=3680 巧妙的构图. 题目:给定N个区间(ai,bi)权值wi,求最大权和且每个点最多覆盖K次. 构图:将区间端点离散化,将第i个点连第i+1个点 ...

  9. WebService-06-CXF与Spring集成

    前言 自3月份到一家快递公司之后,就极少有时间来写博客了,进去的第一个周末就加班.做公司的开放平台,协助一个小伙伴写WebService接口,用的就是CXF.正好这个东西曾经使用过.如今快7月了,曾经 ...

  10. Samba在CentOS下的图形化界面的安装

    第一步:构建yum仓库(在此用的是北交大的yum仓库) 打开目录/etc/yum.repos.d下的CentOS-Base.repo文件,此处是我自己建的yum仓库,修改里面的链接地址为北交大的镜像的 ...