标点符(钱魏 Way)

网页正文信息抽取新方法

一、基于中文标点符号和HTML 树

结构的网页正文信息抽取方法H TML

 ( hyper text markup language) 是超文本标记语言, 是基于标准通用标记语言(SGML) 的一个庞大的文档处理系统. SGML 的基本思想是采用描述标记( Tag) 来提供描述文档结构的附加信息. HTML 利用SGML 定义了一些标记,如<html>、<title>等,用于描述文本的显示方式,并对这些标记的使用都做了格式定义,对于实体符号的显示和标记元素的结构也做了规范,使得HTML 网页在文本格式和结构上存在一定的规律,也为网页信息的提取提供了方便.

1. 1  中文标点符号在网页中的分布特征

网页可以分成两类:一类是导航型网页,该网页主要是超链接导航信息,如各种门户网站;另一类是正文型网页,是指包含有主题内容的网页. 本文只对正文型网页进行处理,因为导航型网页含有大量的超链接,很容易被处理和识别. 本文将正文网页划分为5 个部分:网页导航信息、网页正文、内容相关链接、内容不相关链接以及版权信息. 选取10 个不同的门户网站,如新浪、网易、搜狐等,每个网站随机选取10 个正文型网页,以统计中文标点符号在网页正文中出现的次数N1 和在网页页面中出现的次数N2 .由表1 可见,约有96 %的中文句号出现在网页正文中,是所有中文标点符号中分布最高的. 究其原因,主要在于网页正文部分大多由一个个句子组成,所以句号出现比较多;导航信息大多是两字短语;链接部分一般都取自所链接文章的标题,标题中一般不会出现句号;版权部分也基本都没有成行的句子,所以句号较少.

由此可见,使用中文标点符号,尤其是句号,可以作为网页正文区别于其他部分的特征.

1. 2  网页内容结构化表示

HTML 文件是自描述的半结构化数据,数据的结构和内容混在一起,没有明显的区分;它们具有一定的结构性,但这些结构化的信息并没有提供足够的语义信息. 由于半结构化的数据很难被应用程序直接使用,为了从HTML 文件中提取信息,必须先将其结构化.一般情况下, HTML 元素相互嵌套,因此最适合用树型结构存放. 但由于HTML 元素并不完全递归嵌套,允许有交叉的情况,而且有些元素可以没有结束标记,在将H TML 文件组织成树型结构之前,需要先规整化,使其元素完全递归嵌套 . 规范化的要求如下:

(1)“<”和“>”只能用来包含网页标记,当在其他地方出现这两个符号时应该用“ &lt ;”和“&gt ;”代替.

(2) 所有的标记必须匹配,即每个开始标记都对应一个结束标记.

(3) 所有标记的属性值都必须放在引号中,如<table height =“400”>.

(4) 所有的标记必须是正确嵌套的. 如<A>⋯<B>⋯</ A>⋯</ B>是不正确的嵌套,正确的嵌套形式应该是<A>⋯<B>⋯</ B>⋯</ A>.

(5) 由于文字内容有可能被修饰标记如<a><st rong>等标记隔断,为保持数据内容与修饰标记的顺序性,需要增加自定义标记〈text〉来嵌套文字内容.

在规范化之前,可以先删除<form>、<script>和<style>等用于控制HTML 文件的交互性和显示的标记,这些标记不包含主题内容,剔除后可加快处理速度. 使用HTML Tidy 工具对网页进行规范化可以实现完整的HTML 树结构的显示,但没有针对性和可操作性,所以编写了用于本文研究的HTML 规范化程序,然后通过HTML 树解析程序将规范的HTML 文件解析成HTML树,树中的每个结点包含了一对标记间的所有字符,结点的名字为对应标记的名字,如图1 所示.

1. 3  正文内容的结构特征

一个网页的正文内容具有很好的连续性,结构都非常相似,都具有同一个祖父结点和相似的父结点. 所以如果能根据字符特征确定一部分正文信息,找到其对应的树结点,则可以在该类结点附近寻找到结构与之相似但字符特征不明显的其他正文信息. 本文是通过提取从根结点到正文结点的链路结构并比较链路结构的相似性来分辨正文内容和噪音信息的. 以图1 为例,网页中有3 块<text>文本信息,它们对应的链路结构分别是:

“HTML Tree”: html →head →title →text ;

“你好!”: html →body →table →t r →td →text ;

“这是一棵HTML 树。”: html →body →table →t r →td →text

对比3 条链路很容易发现“你好!”和“这是一棵HTML 树。”具有相同的链路结构. 如果可以通过某种特征确定“这是一棵HTML 树。”是正文信息, 则可以认为“你好!”也是正文信息,“H TML Tree”属于噪音信息.然而在一般的网页结构中,正文内容的不同部分的链路并不是完全相同的,比如正文中的链接内容,或被强调的标题内容都比一般的正文信息多一层修饰标记. 为避免将这些被修饰的正文内容视为噪音信息, 需要建立一个指标Ki , j 来衡量链路i 与链路j 的相似程度. 首先从根结点到叶结点依次比较链路结构i、j 各个结点信息, 记结点相同的个数为Ni , j , 记链路i、j 的长度分别为L i 、L j ,有. 该指标具有遗传性, 既与链路的祖亲程度有关, 又与两叶结点的深度有关. 显然当它们的根结点不相同时Ki , j = 0 ;当两链路各结点都匹配,而且长度相等时, Ki , j = 1.

1. 4  网页正文内容的提取步骤

(1) 整个正文内容的提取过程都是在网页HTML 树中进行的,所以首先要对整个网页数据进行处理,提取出HTML 树结构.

(2) 遍历H TML 树,提取所有的<text>结点,同时记录从根结点到每个<text>叶结点的链路.在这里,使用递归算法遍历HTML 树,递归函数如图2 所示.

(3) 检查每段文字内容,记录各自的中文句号数,并选择句号数最大的文字内容对应的链路为结构样本.

(4) 选取其他中文句号较多的文字内容,将其与结构样本进行链路结构的比较,以确定结构样本的正确性.

(5) 选择阈值,将每段文字对应的链路与结构样本作比较,选取相似度大于阈值的链路结构作为正文内容. 相似度阈值的选择主要是考虑正文内容中经常出现的链接和被修饰的文本块. 考虑到最坏的情况,就是一部分文本块同时被链接和修饰,则该结点对应的链路结构与样本链路结构匹配的结点数目减少1 ,链路长度和增加2 ,从而相似度为

其中L0 为样本正文的链路长度.

二、实验结果与分析

为了验证该方法的实际效果,本文选取了10个具有代表性的综合门户网站,包括新浪、搜狐、雅虎等网站,用此方法提取网页的正文内容,程序均由Python 语言实现. 通过与人工提取出的正文内容做比较分析,得出实验结果如表2 所示.

由表2 可知,用基于中文标点符号的网页正文信息抽取方法进行网页正文提取的准确率最高为98 % ,最低为84 % ,平均为94 % ,适用于绝大多数网站,保持了较高的准确性.

码字很辛苦,转载请注明来自标点符《网页正文信息抽取新方法》

评论

  1. simpx #1

    感谢分享。请问能给出具体的python代码做参考吗?大致算法明白了,但细节上还是有些模糊。谢谢!

    回复
    2011-01-6
    • 标点符

      不好意思 不懂具体的实现方式,只是为做SEo学习做参考的。

      回复
      2011-01-7
  2. tsoit #2

    因需要无规则采集工作,看到这篇文章,你现在还在做SEO吗?不知是否可以认识以下,本人目前在正保教育负责流量相关事宜
    QQ:839982812

    回复
    2014-09-12