【数据自动采集】VIPS: A VIsion based Page Segmentation Algorithm

作者:張張張張
github地址:https://github.com/zhanghekai
【转载请注明出处,谢谢!】

《VIPS: A VIsion based Page Segmentation Algorithm(基于视觉信息的网页分块算法)》是Deng Cai等人与2003年发表的论文,该论文在网页信息采集方面有巨大的影响。
原文地址
为 方 便 书 写 与 理 解 , 本 博 客 正 文 中 出 现 的 “ 我 们 ” 均 为 该 论 文 作 者 , 而 本 人 的 一 些 浅 谈 理 解 写 入 蓝 底 注 释 框 中 ! \color{red}{为方便书写与理解,本博客正文中出现的“我们”均为该论文作者,} \\ \color{red}{而本人的一些浅谈理解 写入蓝底注释框中!} 便

一、网页的基于视觉的内容结构

\qquad 与[Chen et al. 2001]相似,我们将基本对象定义为DOM树中无法再分解的叶节点。 在本文中,我们提出了基于视觉的内容结构,其中每个节点(称为块)是一个基本对象或一组基本对象。 重要的是要注意,基于视觉的内容结构中的节点不一定与DOM树中的节点相对应。类似于 [Tang et al. 1999]中对文档表示的描述,基于视觉的网页内容结构的基本模型描述如下:
\qquad 对于每一个页面而言,我们可以将其看作一个三元组 Ω = ( O , Φ , δ ) \Omega=(Ο,\Phi,\delta) Ω=(OΦδ),其中:

  • O = ( Ω 1 , Ω 2 , ⋯   , Ω N ) Ο=(\Omega^1,\Omega^2,\cdots,\Omega^N) O=(Ω1Ω2,,ΩN),表示给定页面上的所有的语义块的集合,这些语义块之间没有重叠覆盖,而每一个语义块 Ω i \Omega^i Ωi又可以被定义为前面所描述的三元组 Ω i = ( O i , Φ i , δ i ) \Omega^i = (Ο^i,\Phi^i,\delta^i) Ωi=(OiΦiδi),如此迭代循环;
  • Φ = ( Φ 1 , Φ 2 , ⋯ , Φ T ) \Phi=( \Phi^1,\Phi^2,\cdots,\Phi^T ) Φ=(Φ1Φ2ΦT),表示当前页面上的所有的分隔条的集合,包括水平分隔符和垂直分隔符。每个分隔符都有一个表示其可见性的权重,并且同一 Φ \Phi Φ集合中的所有分隔符都具有相同的权重。

事实上,一旦确定了一个页面上的两个语义块,那么这两个语义块之间的分隔条也就被确定了。当然,VIPS中的分隔条并不是真正存在的分隔条,而是虚拟。

  • δ \delta δ描述了 O Ο O集合中两个语义块之间的关系,这种关系可以用下面的式子描述: δ = O × O → Φ ∪ N U L L δ =Ο×Ο→Φ∪{NULL} δ=O×OΦNULL例如: 假设 Ω i \Omega^i Ωi Ω j \Omega^j Ωj是集合 O Ο O中的两个对象, δ ( Ω i , Ω j ) ≠ \delta (\Omega^i, \Omega^j) \neq δ(ΩiΩj)= N U L L NULL NULL表明 Ω i \Omega^i Ωi Ω j \Omega^j Ωj被分隔符 δ ( Ω i , Ω j ) \delta (\Omega^i, \Omega^j) δ(ΩiΩj)直接分割,或者我们可以说这两个对象彼此相邻,否则,两个块 Ω i \Omega^i Ωi Ω j \Omega^j Ωj之间还有其他对象。

举例说明:
【数据自动采集】VIPS: A VIsion based Page Segmentation Algorithm_第1张图片
【数据自动采集】VIPS: A VIsion based Page Segmentation Algorithm_第2张图片
\qquad 上图演示了Yahoo页面的基于视觉的Web页面内容结构。它同时给出了页面的布局结构和基于视觉的内容结构。在第一层,整个原有的页面被分割为四个对象(可视化块)VB1-VB4,同时在这四个对象之间检测出了三个分隔条 φ 1 \varphi_1 φ1~ φ 3 \varphi_3 φ3(原来有五个,最上面的和最下面的被舍弃)。如上图(d)所示。
\qquad 检测出的四个可视对象并不是这轮分割的最终的局部。最终得到的语义块必须根据检测出的四个可视对象和三个分隔条进一步构建而成,如上图(e)所示。其中可能需要合并一些语义块,舍弃一些分隔条等等。


\qquad 对于每一个可视化块,VIPS算法都定义一个连贯程度(Degree of Coherence,DoC)与之对应。该值的大小反映了当前语义块内部内容联系的紧密程度。它具有下面两个重要的特性:

  • DoC的值越大,则语义块内部的内容之间的联系紧密程度就越大,它们之间关系就越连续,反之越小。
  • 在层次树中,语义块子块的DoC的值肯定要比父块的值大。

\qquad 在 VIPS算法中,DoC的值位于1到10之间。不过这个范围是可以更改的。在对Web页面进行语义分割之前,我们首先设定一个预定义DoC值 PDoC(Permitted Degree of Coherence),通过该值来限定分割的语义块的粗糙程度。当语义块的DoC值达到PDoC之后,迭代分割就停止。PDoC越小,则分割的语义块就越 粗糙,反之,分割的语义块就越精细。 比如上图中,如果给出一个适当的PDoC的值,VB2_1块将变的不再允许分割。不同的应用程序可以设置不同的 PDoC值来达到自己的要求。

\qquad 基于视觉的页面分割最主要的目的就是对给定的页面进行语义分割,因此分割后生成的基于视觉的内容结构中的结点通常总是一定的语义单位,包含一定的语义。比如在图1(a)中,我们可以看到VB2_1_1表示Yahoo宠物商店的目录链接,而VB2_2_1和VB2_2_2则表明了两种不同的 comics。

二、VIPS算法描述

【数据自动采集】VIPS: A VIsion based Page Segmentation Algorithm_第3张图片
\qquad 这部分我们将详细介绍VIPS算法。整体来说,页面的基于视觉的内容结构是结合DOM树以及一些视觉提示信息而得到的。分段过程如图2所示。它具有三个步骤:页面块提取、分隔条提取以及语义块重构。 这三个步骤总体上视为一轮。 该算法是自顶向下的。 首先将网页分为几个大块,并记录该级别的层次结构。 对于每个大块,递归地执行相同的分段过程,直到获得的DoC值大于预定义PDoC的为止。

\qquad 在每次迭代循环中,都从Web浏览器获得其可视信息对应于当前块(第一回合的页面)的DOM树,如图3所示。然后,从DOM树的根结点开始,开始可视块提取过程,以根据视觉提示从DOM树中提取块。每一个DOM结点(图3b中的结点1,2,3,4,5,6,7)都会被检查它能否构成一个单独的语义块。如果不能,比如图3b 中的 1,3,4结点,那么它的子结点将被执行同样的检查。对于每一个提取出来的页面块,比如图3b中的2,5,6,7结点,我们都会根据当前页面块的内部可视属性赋予一个DoC值。当本次迭代过程中所有的页面块都被检测出来之后,它们将被保存到页面块池中。基于这些页面块,分隔条检测过程将开始工作。这些页面块之间的所有的水平分隔条和垂直分隔条最终将被识别出来并且赋予一定的权重。基于这些分隔条,页面的布局层次将被重新构建。一些页面块将被合并, 形成语义块。最终,本次迭代过程中的所有语义块都被检测出来。
【数据自动采集】VIPS: A VIsion based Page Segmentation Algorithm_第4张图片

\qquad 迭代过程是否需要继续进行取决于本层次的语义块中是否存在DoC值小于PdoC的语义块。对于那些DoC>=PdoC的语义块,分隔过程将停止,否则分隔过程将继续。比如再下图中,语义块C的DoC值小于PdoC,那么该语义块将被作为新的子Web页面,继续执行分割算法,最终又被分割为两部 分:C1 和C2,如图4a和4b所示:
【数据自动采集】VIPS: A VIsion based Page Segmentation Algorithm_第5张图片

\qquad 当所有的语义块被提取出来后,最终整个Web页面的基于视觉的内容结构也就构建完成。在上面的例子中,我们最终获取的内容层次结构如图5所示。在下面的部分我们将详细的描述语义块的检测、分隔条的检测以及内容结构重建过程。
【数据自动采集】VIPS: A VIsion based Page Segmentation Algorithm_第6张图片

三、可视块提取

\qquad 在这一步中,我们旨在查找当前子页面中包含的所有合适的可视块。 通常,DOM树中的每个节点都可以代表一个可视块。 但是,某些“巨大”节点(例如

)仅用于组织目的,不适合表示单个可视块。 在这些情况下,当前节点应进一步划分并由其子节点代替。 而且,由于HTML语法的灵活性,许多网页不能完全遵守W3C HTML规范,因此DOM树不能始终反映出不同DOM节点的真实关系。
\qquad 对于提取出来的每一个可视块,我们将根据它的内部的视觉差异设置它的DoC值。重复此过程,直到找到所有合适的节点代表当前子页面中的可视块为止。整个迭代提取过程可以用下面的算法描述:
【数据自动采集】VIPS: A VIsion based Page Segmentation Algorithm_第7张图片

\qquad 节点分割依据: 我们基于以下考虑判断DOM节点是否可以划分:

  • DOM结点本身的属性。比如当前DOM结点的标签,结点的背景色,当前结点所代表的可视块的大小,形状。
  • 当前DOM结点的孩子结点。比如孩子结点的标签,孩子结点所代表的区域的背景色,前景色,区域的大小以及不同类型的孩子的数目等等。

\qquad 基于WWW HTML规范4.0,我们将DOM结点分为两大类:inline结点line-break结点

  • 所谓inline结点是指:如果该结点的标签能够影响文字的外观同时不会引起换行的话,那么这类结点我们称之为Inline结点,比 如 等等,这类结点通常仅仅影响文字的外观而不会影响文字的布局。
  • 所谓line-break结点: 则就是除了inline结点之外的所有结点。

\qquad 根据节点在浏览器上的外观以及该节点的子级属性,我们给出一些定义:

  • 有效结点(Valid node): 如果一个结点能够在浏览器中表现出来,那么这个结点就是有效结点。通常有效结点的长度和宽度都不为零。另外如果一个结点内部没有任何有用的信息,我们也称之为无效结点。比如图7中的第二个和第四个TR结点都是无效结点;
  • 文本结点: 这类结点通常是指HTML中的文字,通常它们不被任何标签所包围;
  • 虚拟文本结点(这个定义是递归定义):
    • 如果一个结点是文本结点,那么它自然就是虚拟文本结点;
    • 如果一个结点是inline结点,并且它的所有子结点要么是文本结点,要么是虚拟文本结点,那么这个结点也就是虚拟文本结点。

如果一段文字加上了等标签之后,该文字只是在浏览器中的显示外观发生了变化而已,并不影响这段文字本质上为文字的属性,VIPS中将之称之为虚拟文本结点,并不难理解。


\qquad 可视语义块的提取算法DivideDomtree如图6所示。在该算法中用于产生启发式规则的一些重要线索包括:

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

\qquad 基于上面的这些提示信息,我们给出一些推理规则用以判断当前的结点是否应该被分割。如果一个结点不需要再分割,那么该结点块将被提取出来,同时设置相应得DoC值,并保存到页面块池中。推理规则如下表所示:

  1. 如果当前结点不是文本结点,同时它又没有任何有效的孩子结点,那么该结点将不被分割,并且从结点集合中删除。
  2. 如果当前结点只有一个有效的孩子结点,同时该孩子结点不是文本结点,那么当前结点将被分割。
  3. 如果当前的DOM结点是整个子DOM树的根结点(与页面块对应),同时只有一个子DOM树与当前的页面块关联,那么分割该结点。
  4. 如果当前结点的所有的孩子结点都是文本结点或者是虚拟文本结点,那么不分割该节点。如果当前所有孩子结点的字体大小和字体重量都是相同的,那么该页面块的DoC设置为10,否则设置为9。
  5. 如果当前DOM结点的孩子结点中有一个line-break结点,那么该结点将被继续分割。
  6. 如果当前结点的孩子结点中存在
    结点,那么该结点将被继续分割。
  7. 如果所有孩子节点的尺寸之和大于DOM树节点的尺寸,那么分割该节点。
  8. 如果当前结点的背景色与它的所有子结点中的某个的背景色不相同,那么该结点将被分割,同时具有不同颜色的子结点在本次迭代中不分割,分割在下轮迭代中进行。与此同时,孩子结点的DoC的值根据标签和尺寸的不同设置为6-8。
  9. 如果结点至少具有一个文本或者虚拟文本子结点,同时结点的相对大小小于门槛大小,那么这个结点不再分割,同时根据标签的不同,DoC的值设置为5-8。
  10. 如果当前结点的所有子结点中最大的尺寸也小于门槛大小,那么该结点将不再分割,同时DoC值根据HTML标签和结点大小设置。
  11. 如果前一个兄弟结点没有被分割,那么该结点也不会被继续分割。
  12. 分割该结点。
  13. 不分割该结点,同时基于当前结点的标签和大小设置DoC值。

\qquad 对于不同的DOM结点,我们使用不同的推理规则:
【数据自动采集】VIPS: A VIsion based Page Segmentation Algorithm_第8张图片

\qquad 图7(b)显示的是一个表格,该表格是整个Web页面的一部分。它的DOM树结构显示在左边的部分。在页面块的提取过程中,当遇到

结点的时候,它只有一个有效的孩子结点。根据规则2,我们进入标签。 该结点具有五个结点将被分割,而第一 个结点被保存到可视块池中。第二个和第四个结点为无效 结点,因此它们将被删除。对于第三个和第五个
孩子结点,但是它们中只有三个是有效结点。而且第一个孩子结点的背景颜色与父亲结点的颜色不同。 根据规则8,该
结点在本次迭代中不进行分割。第一个
结点,根据推理规则11,在本次迭代中不再分割,因此最终我们得到三个页面块 VB2_1,VB2_2和VB2_3。
【数据自动采集】VIPS: A VIsion based Page Segmentation Algorithm_第9张图片

四、分隔条检测

\qquad 当所有的页面块被提取出来之后,它们都被保存在页面块池中以便进行分隔条检测。在VIPS算法中,分隔条是Web页面中的垂直的或者水平的行。从视觉的角度而言,分隔条在描述页面的不同语义信息方面具有很好的指示作用。在VIPS中,一个可视的分隔条可以用二维向量(Ps,Pe)描述,其中,Ps是分隔条的起始坐标,而Pe则是分隔条的终止坐标。坐标的单位全部为像素pixel。根据Ps和Pe,很容易计算当前分隔条的宽度和高度。

4.1 分隔条检测

分隔条的检测算法如下描述:

  1. 初始化分隔条列表。最早的分隔条列表中仅仅存在一个分隔条,它的起始和终止坐标为 ( P b e , P e e ) (P_{be},P_{ee}) (Pbe,Pee),分别对应整个Web页面的起始坐标和终止坐标。
  2. 对于可视块池中的每一个可视块,它与分隔条的关系包括下面三种:
    a. 可视块被包含在分隔条中,此时,该分隔条将从页面块的边缘裂变为多个分隔条;
    b. 可视块与分隔条发生部分重合,那么根据可视块的边界重新调整分隔条的参数;
    c. 可视块跨越分隔条,那么此时移除该分隔条。
  3. 移除页面边缘的四个分隔条。

举例说明:
\qquad 图8演示了分隔条的检测过程,其中黑色块代表页面中的可视块。为了简单起见,我们仅仅演示水平分隔条的检测过程。开始的时候我们只有一个大的分隔条,它的起始和终止位置就是整个页 面的起始和终止位置(既整个可视块池)。当我们将第一个可视块放入到池中的时候,由于该可视块被包含在分隔条内部,此时原有的分隔条将裂变为S1和S2。同理当第二个和第三个可视块放入到池中的时候,四个分隔条S1,S2,S3和 S4被检测出来。当第四个页面块放入到池中的时候,它跨越了S3分隔条,同时与S2分隔条有部分重合,此时S3分隔条将被删除,同时S2将被调整,从图中可以看出,调整后,S3明显的变细了。

【数据自动采集】VIPS: A VIsion based Page Segmentation Algorithm_第10张图片

4.2 设置分割条的权重

分隔条通常用于区别不同语义的页面块,因此基于给定分隔条两边的语义块的在视觉上的差异,我们可以设置分隔条的权重。如果分隔条的权重越重,该分隔条最终成为分隔条的可能性就越大。

下面的规则可以用来设置分隔条的权重:

  • 分隔条两边的可视块的距离越远,该分隔条的权重就越高。
  • 如果视觉分隔符与某些特定的HTML标签(例如
    HTML标签)重叠,则其权重将设置为较高。
  • 如果分隔条两侧的可视块的背景色是不相同的,那么该分隔条的权重将相应增高。
  • 对于水平分隔条而言,如果分隔条两侧的可视块的字体属性,比如字体大小,字体重量是不同的,那么该分隔条的权重将增加。而且如果分隔条上侧的页面块的字体小于分隔条下侧的页面块的字体,那么分隔条的权重将增加。
  • 对于水平分隔条而言,当分隔条两侧的可视块的结构非常相似,比如文本,那么该分隔条的权重将递减。

\qquad 考虑图7中的第三个

。与该结点对应的子页面如图9(b)所示,同时它的DOM树结构如图9(a)所示。我们可以看到根据我们的定义,该DOM树中的很多结点都是无效的,它们无法在浏览器中显示出来,在可视块的提取过程中,这些结点将被忽略。当这些页面块提取出来之后,六个页面块将保存到池中,同时五个水平分隔条也被检测出来。同时,基于 上面的五个分隔条规则,这些分隔条的权重将被设置。在本例中,可视块2和3之间的分割条要比页面块1和页面块2之间的分割条权重高,这是因为字体不同的原因。同样的原因,4和5之间的分隔条权重也高一些。最终的分隔条以及它们的权重如图9(c)所示,其中较粗的线表示较高的权重。
【数据自动采集】VIPS: A VIsion based Page Segmentation Algorithm_第11张图片

五、内容结构构建

\qquad 当分隔条被检测出来,同时权重设置完毕后,相应的内容重建过程就可以开始了。构建过程从最小权重的分隔条开始,该分隔条两侧的可视块将合并在一起组 成一个新的可视块。该合并过程不停的进行迭代,直到遇到权重最高的分隔条为止。对于每一个新的可视块,相应的DoC也被相应设置。

\qquad 当可视块最终合并成为语义块之后,本轮的迭代也就结束了。对于这些语义块,每一个语义块的DoC都会与PdoC进行对比,如果DoC的值小于 PdoC,那么新的迭代过程将重新开始:页面块检测,分隔条检测以及内容结构重构。当所有的语义块的DoC的值都不大于PdoC,迭代过程将停止。同时针对整个Web页面的内容结构将构建出来。

\qquad 以图9为例,在第一轮迭代中,第一,三以及五个分隔条 将被选择出来,同时页面块1和2被合并为新的语义块VB2_2_2_1。同样的合并发生在页面块3和4上,它们被合并为新的语义块VB2_2_2_2,页面块5和6最终合并为VB2_2_2_3。新的语义块VB2_2_2_1,VB2_2_2_2以及VB2_2_2_3是语义块VB2_2_2的子结点。对于每一个页面结点,比如VB2_2_2_2_1_1,VB2_2_2_1_1以及VB2_2_2_2_1它们的DoC的值将被检查,以便确定是否满足 PdoC的值。最终的内容结构构建完毕。

\qquad 综上,提出的VIPS算法利用视觉线索获得网页的基于视觉的内容结构,从而成功地弥合了DOM结构和语义结构之间的鸿沟。 该页面基于可视分隔符进行分区,并按层次结构进行组织。 这种语义层次在某种程度上与人类的感知相一致。 VIPS也非常有效。 由于我们跟踪用于可视块提取的DOM结构,并且没有分析每个基本的DOM节点,因此该算法完全是自顶向下的。

VIPS算法的首先从DOM树中提取出所有的合适的页面块,然后根据这些页面块检测出它们之间的所有的分割条,包括水平和垂直方向。最后基于这些分割条,Web页面的语义结构将被重新构建。对于每一个可视块又可以使用VIPS算法继续分割为更小的可视块。

Conclution

\qquad 该文章提出了一种基于视觉表示的Web内容结构提取新方法。生成的Web内容结构对于Web适应,信息检索和信息提取等应用程序非常有用。通过基于视觉布局信息识别Web内容的逻辑关系,Web内容结构可以有效地表示网页的语义结构。提出了一种自上而下,与标签树无关的可伸缩算法来检测Web内容结构。它模拟用户如何根据其视觉表示来理解网页的布局结构。与传统的基于DOM的分割方法相比,我们的方案利用了有用的视觉提示在语义级别获得了更好的页面划分。它也独立于物理实现,即使物理结构与视觉表示形式有很大差异,它也可以很好地工作。该算法在大数据集上进行了手动评估,并且还用于在Web信息检索的伪相关反馈过程中选择良好的扩展项,两者均取得了非常令人满意的性能。


【参考文献】

  • VIPS:基于视觉的Web页面分页算法
  • 基于视觉信息的网页分块算法(VIPS)

\qquad 由于该论文年份较早,没有找到python可以运行的代码,但目前研究课题需要,所以我接下来会用python将该论文复现。如果大家谁有或谁知道该论文或vips类似的可视化块论文的代码,还劳烦留言告知一下~感激不尽!

你可能感兴趣的:(网页自动采集研究)