【网页正文识别及提取算法】基于HTML标记用途分析

网站 普遍拥有相似的结构如下:

<html><head>
网页标题及其它与网页标题无关的信息
</head><body>
正文标题,正文内容及其它与网页正文标题,正文内容无 关的信息
</body></html>

对普遍拥有相似结构的网页进行分块,先将整个网页分成 head 和 body 两个区域块,然后分别对这两个区域块中的 HTML 标 签语义进行分析,删除无用的标签元素及其内容,进而提取出 网页的正文内容。

该算法的分析和处理过程由 3 大环节构成:

  1. 删除 head 区域块中与网页标题无关的内容
  2. 确定 body 区域块中网页 正文标题的位置
  3. 删除 body 区域块中与网页正文无关的内容

删除 head 区域块中与网页标题无关的内容

在<head></head>区域块中,如果在<title></title>或<hn></hn>或<div></div>或 <ul>或</ul>或<p></p>或<b></b>或 <strong></strong>里没有 href、src 或 link 出现,就将这些标签中 的内容作为网页标题保留,其余的标签与内容全部删除。因 为head区域块主要用于存放网页标题以及被浏览器所识别而不显示在网页正文内容里的用来描述所属页面的基本属性, 或者用于存放网页标题以及被搜索引擎查找该网页但不显示 在网页正文内容里的信息。

确定 body 区域块中网页正文标题的位置

定义:

标题相似率 = 正文标题长度/网页标题长度

<DIV id = ArticleTit></DIV>(出现几率大约 60%)
<H1 id = ArticleTit></H1>(出现几率大约 30%)
<p></p>(与下面 3 组标签一起出现的几率大约 10%)
<strong></strong>
<ul></ul>
<b></b>

如果这些标签中不包含,href 或 link 标签,并且上
面 6 种标签之一中的文档内容长度与在 2.1 节中的获得的网 页标题长度的标题相似率范围在 51%~100%之内,那么就把该 标签内的文档内容作为网页正文标题保留。通过第一、第二 个条件,就确定了网页正文标题的位置。

删除 body 区域块中与网页正文无关的内容

确定了网页正文标题的位置后,就把位于标签与 网页正文标题之间的所有内容全部删除,因为这些内容都是 LOGO 链接、脚本,样式表等与网页正文无关的信息。在网页 正文标题后就是网页正文区域块。接着,将按照下面两种方法删除网页正文区域块中与正文内容无关的内容。

网页正文区域中文字链接的处理

网页正文区域块里的文字链接处理起来相对比较简单, 当搜索到“[hyperlink text]”形式的 链接区块时,如果“[hyperlink text]”在正文里出现超过 2 次,就 认为该链接是正文内容,需要保留下来,否则就清除包括 的所有内容。

网页正文区域块里的图像主要用两种方式在网上发布:
句内的(inlined)图片链接和引用的(referenced)图片链接。对两 者之一或其综合出现情况,其 HTML 格式是不一样的。一般 地,存在如下需要区别处理的 3 种情况:

  • 对于句内的或嵌入的图片链接,图像是在网络文件内, 文件里有下面的代码<imgsrc=绝对地址URL alt=[alttext]>这里,URL 给出了图像的绝对地址。可选的 alt 标签标明 当浏览器正在载入图像的内容说明。一般情况下这种格式的 图像是正文图像,可用下面给出的第二个条件进一步判断是 否是正文图像,以提高准确率。
  • 对于引用的图像是来自父页面的引用的情况,一般用 下面的代码表示:
    <a><img href = 相对地址 URL>[hyperlink text]</a>
    这里,可选的[hyperlink text]提供描述超链接所指向的图 像的内容说明。这种格式的图像可能是正文图像,也可能是与正文无关的链接图像,也需要下面给出的第二个条件进一 步判断是否是正文图像。
  • 对于句内的和引用的图片链接同时出现的综合情况, 文件里有下面的代码:<a><img src = 绝对地址 URL1 href = 相对地址 URL2></a> <a href = 相对地址 URL1><img src = 绝对地址 URL2></a> 这种格式的图像可能是正文图像,也可能是与正文无关的链接图像,仍需要下面给出的第二个条件进一步判断是否 是正文图像。

在上述 3 类情况中,给出的是处理图像链接内容的第一 个判断条件。因为HTML网页中图像链接的处理相对比较复 杂,所以对上述 3 类情况,还需用下面给出的第二个判断条件 进行判断才能决定是保留或是删除该图像。
第二个判断条件:在上述 3 种情况中,如果 src 的绝对地 址中是 gif,wmf,swf(动画文件格式)等格式的图像,一般情况 下都是与正文内容无关的按钮图像,要删除。如果是以 jpg, jpeg,jpeg2000,png,bmp,svg 等格式结尾的图像一般是正文图 像,则要保留。

算法实现过程描述

  • 将网页的HTML代码以文本形式读入字符串str中
  • 将str中的字符全部小写化,便于后面的字符匹配
  • 通过扫描 str,将 HTML 网页划分成 Head 和 Body两大区域块
  • 调用文中的“删除与正文无关的内容块”子过程,对 str 进行净化
  • 调用文中的“转义字符转换处理”子过程,把 str 里面的转义字符转化成正常字符
  • 依次保存str中网页信息,其即为网页的正文部分
删除与正文无关的内容块

按照文中的分析处理方法,在分析查找到网页标题、网页
正文标题和网页正文后,先删除这些内容之外的所有信息,然 后保留这些内容到清空后的字符串 str 中。
在待删除的无关内容中,一般地可能包括有style、script、 link 等元素及其内容。这是因为 Style 元素主要用来改善网页 的显示效果,它的内容主要是设计网页显示的属性,和网页正文无关;script元素是脚本程序,用来设计动态网页,它的内容也和网页正文无关。因此要将这两个标签及其之间的内容全 部删除。至于超链接元素 a 也要被删除,因为本文只是研究 网页的主体正文提取。超链接里面的内容需要根据上面的分 析判断不是网页正文内容才能被删除。
由于style元素,script元素,a元素,是必须有结束标签的, 所以很容易定位这些元素所对应的子字符串在字符串 str 中 的位置和长度,但考虑到很多网页的不规范性,为提高程序的 容错性能,本文采用了如下描述给出的一种标签配对方法,将 这些要删除的元素各部分补齐,然后再进行匹配删除。
标签配对方法:由于在 style 元素、script 元素和 a 元素的 内容中,可能还会出现其它的标签,因此从开始标签向后查 找,并记住查到的每一个标签的位置,在其它标签之前插入结 束标签即可完成标签配对。
虽然 HTML 协议允许出现元素的交叉,即<element1> <element2></element1></element2>的情况,但因 table 元素,div 元素,style元素,script元素和a元素不会出现这种情况,故在 此不再考虑这种情况。

转义字符转换处理

转义字符串也称字符实体。在 HTML 中,定义转义字符
串的原因有两个:第一个原因是像“<”和“>”这类符号已经用 来表示 HTML 标签,因此就不能直接当作文本中的符号来使 用。为了在HTML文档中使用这些符号,就需要定义它的转 义字符串。当解释程序遇到这类字符串时就把它解释为真实 的字符。在输入转义字符串时,要严格遵守字母大小写的规 则。第二个原因是,有些字符在 ASCII 字符集中没有定义,因 此需要使用转义字符串来表示。

发布了166 篇原创文章 · 获赞 7 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/LU_ZHAO/article/details/104956202
今日推荐