当前位置:文档之家› 正文finalversion

正文finalversion

北京邮电大学本科毕业设计(论文)
第一章
绪论
本章共分四个小节.在第一小节我们将从不同的角度说明网页解析的研究意义; 在第二个小节,我们将介绍目前国内外在这方面的研究成果;第三小节,我们将就论文 中使用的一些术语进行说明;第四小节给出本论文的组织安排.
1.1
研究意义
1.1.1 对于一般网络用户
随着 Internet 以及相关技术的发展与成熟,Internet 逐渐成为人们发布和获取信 息的常用平台. 从网络上收集信息资源已经成为当今乃至未来社会人们获取信息的重要 手段.试想十年前,我们想获取某些知识时,我们首先想到的地方是图书馆---去图书 馆查阅相关资料. 显然这种方法有时是相当费时的. 而今, 我们想了解某领域的知识时, 一般会采用百度,Google 之类的相关引擎"搜搜" .诚然,互联网不愧是一本包罗万象 的百科全书.然而,Internet 上的信息浩海如烟,而且增长速度越来越快,想要从海量 信息中找到自己需求的目的信息,是一项繁杂的工作.因此一些基于各种算法的 WEB 信 息提取策略应运而生. 1.1.2 对于 PDA 用户
互联网及其技术的迅速发展,Web 已经成为当今最庞大的信息库.但是 Web 界面通 常含有很多用户不关心的信息,如广告链接和图像等,它们分布于网页四周,甚至附着 在正文旁边,文档主题很不明确,使用户部能迅速定位所需信息.这一问题对于使用低 端设备,尤其是使用 PDA 和手机的用户来说最为突出,他们需要花费很长时间来操作滚 动条,跳过大量无关的图片和文字,这是很难令人接受的.经研究表明,通过提取主题 信息可以减少一半浏览时间,提高用户获取信息的速度,从而增强 Web 的可用性. 1.1.3 对于搜索引擎系统的开发人员
现代大规模高质量搜索引擎一般采用如下图的三段式工作流程,即:搜集,预处理 和服务.如下图所示.
搜集
预处理
服务
1

北京邮电大学本科毕业设计(论文)
图 1-1 搜索引擎工作示意图
在网页预处理阶段,需要提取网页中的关键词,也需要对网页的链接进行抽取和分 析.在服务阶段,我们需要生成一个有序的条目列表,每一个条目有三个基本的元素: 标题,网址和摘要,其中的摘要需要从网页正文中生成.从以上说明可以看出网页解析 是搜索引擎系统开发中十分重要的一环,它几乎贯穿了搜索引擎的各个部分模块. 1.1.4 对于从事自然语言处理相关研究的研究人员
信息抽取(Information Extraction)技术是近十几年发展起来的新领域,它起源于 文本理解,属于自然语言处理研究的领域.信息抽取是直接从自然语言文本中抽取事实 信息,并以结构化形式描述信息,适用于信息查询,文本深层挖掘,问题自动回答等方 面的应用.Web 信息进行抽取(Web Information Extraction, WebIE)是将 Web 作为信 息源的信息抽取, 其核心是抽取分散在 Internet 上的半结构化的 HTML 页面中隐含的信 息. 万维网飞速发展,其上的信息资源随之日益丰富.但是,Web 页面中经常含有广告 链接,导航条,版权等非网页主题信息的内容,页面所要表达的主要信息经常被隐藏在 无关的内容和结构中,限制了 Web 信息的可用性.正确提取网页正文信息,实际上就是 提取页面要表达的主要内容.它是信息搜索(Information Search),数据挖掘(Data Mining),机器翻译(Machine Translation)和文本摘要(Text Digest)等 Web 信息处理 技术的基础. 互联网的飞速发展给自然语言处理的研究带来新的机遇和挑战.把自然语言处理技 术应用到网页处理中,对网络中的信息进行深层次的加工处理,有效地从浩瀚的信息海 洋中挖掘可以为人所用的各种知识,提取人们所需的信息,已成为很多研究人员的研究 目标.根据用途不同,一个网页中的内容可以分为两类,一类是提供给浏览器用的标记 信息,另一类是提供给用户阅读的信息.自然语言处理技术针对的是后者.因此,要对 网页中的内容运用自然语言处理技术,必须先把网页中的标记信息去掉.从内容上分, 一个网页一般是由导航信息, 网页正文, 广告信息, 版权信息, 相关链接等部分组成的. 自然语言处理技术适用的部分是网页正文.所以,如何提取网页中的正文,并把它转换 成纯文本文件的技术是连接自然语言处理技术和网页信息的桥梁 (纯文本文件是指不包 含网页标记信息的文本文件) .
2

北京邮电大学本科毕业设计(论文)
1.1.5
小结
综上,网页解析技术是一些其他技术得以实现的基础.为其他技术的实现起到了铺 垫和桥梁的作用.
1.2
国内外研究现状
传统的网页数据抽取方法通常是由包装器(Wrapper)完成的,但是,获取包装器
中信息模式识别的知识是一个瓶颈问题. 采用半自动化方法获取知识规则的 XWRAP 系统 在进行抽取前,检查网页并进行预处理,最后将网页表示成一课树. 王琦等人[1]基于 DOM 规范,提出了基于语义信息的 STU-DOM 树模型,将 HTML 文 档转换为 STU-DOM 树,并对其进行基于结构的过滤和基于语义的剪枝,完成了对网页主 题信息的提取. 这种方法能够迅速自动地从网页中提取出主题信息, 不依赖于网页结构, 对于异构信息源具有很高的通用性,而且不改变源网页的结构和内容,可靠性和可扩展 性高.因此,该方法具有可观的应用价值,它既能适合移动用户的即时访问需求,又可 应用于信息检索领域的自动文摘和自动分类系统. Kristina Leman 等人[2]提出了通过对行和列的分组,从 List 和 Table 中自动提 取 Web 数据的方法.但它只在一些假定条件成立的情况下才能进行,并且需要分析许多 网页之后,才能从单一的一个 List 中提出信息. 催继馨等人[3]提出了基于 DOM 的 Web 信息抽取方法.该方法采用人工方式对样本 页面附加语义信息,然后对样本页面中的样本记录进行标记,并通过机器学习的方法产 生信息抽取规则;利用这些规则完成对相似结构网页的信息抽取.由于该方法需要人工 参与,使得系统的可用性降低. 孙承杰等人[4]提出了基于统计的网页正文提取方法.它根据网页中的 HTML 标记 将网页表示成一棵树, 然后利用树中的每个节点包含的中文字节数从中选择包含正文信 息的节点.该方法适用于网页中所有正文信息均放在一个 td(td 是 HTML 语言提供的表 格标记)中的情况下的网页正文提取. 于满泉等人[5]提出了基于分块的新闻网页信息解析方案 TVPS(Table and View Page Segment).该算法将利用页面的视觉特征进行解析的方法和利用 TABLE 标记的布 局特性进行解析的方法结合起来,能够有效地区分出"内容页"和"索引页" ,以及页 面中的"内容块"和"索引块" ,是一种简单易行的好方法.但是它适用于内容均嵌套 在 table 当中的网页.对于像 https://www.doczj.com/doc/667737660.html,/a/20090526/000848.htm 这样将内
3

北京邮电大学本科毕业设计(论文)
容放在 div 容器的网页,这种算法便无法再大显身手. 赵欣欣等人[6]提出的基于标记窗的网页正文提取方法不仅适合于处理一个网页 中的正文均放在一个 td 中的情况,也适合于处理网页正文放在多个 td 中的情况.尤其 重要的是,它能够解决非 table 结构网页提取问题.该方法可以提高网页正文提取的准 确率,适用性强.但是由于它在判断标记窗(即 html 标记对)中的字符串是否是正文 内容时采用的方法是计算标题词序列和标记窗中字符串词序列之间的 Levenshtein 距 离, 所以它无法处理网页源码 title 标记中的字符串并不是网页标题或是标题中运用了 一些修辞手法,导致标题词序列中的词根本没有在网页正文中出现这样的网页.当然, 这种方法也无法提取"索引页面"中的正文.
1.3
文章使用术语说明
HTML 元素:是指包括开始标签以及属性,结尾标签,以及开始标签和结尾标签之
间的内容的字符串. 标签: 分为开始标签和结尾标签. 开始标签是指由 "<" ">" 和 括起来, 并包括 "<" 和">"的字符串;结尾标签是指由"<\"和">"括起来,并包括"<\"和">" 的字符串. 元素内容:开始标签和结尾标签之间的字符串. 元素名:如 A,TR,TD,UL 等. 元素嵌套:也就是一个元素中包含有其他的元素.
1.4
本论文组织安排
在第二章中我们将介绍网页解析的基础知识.给出一个最简单的网页解析方案,
其目的在于承上启下,为后续算法研究做铺垫.在第三章中,我们将归纳出各大新闻 网站的新闻网页的一般结构.从第四章开始,我们将详细探讨新闻网页解析系统的实 现方案.第四章将详细介绍基于模板的新闻网页解析系统的实现.第五章将详细介绍 基于结构分析的新闻网页解析系统的实现方案,并将该方案与上一章的解析方案进行 对比分析,同时我们还会将利用我们的解析方案提取到的解析结果与网上一个正在叫 卖的解析方案提取到的解析结果进行对比. 在第六章, 将总结毕设过程中进步与不足, 以及对未来提出设想和展望.
4

北京邮电大学本科毕业设计(论文)
第二章
网页解析入门
本章我们从介绍网络信息抽取开始,阐释网页解析的基本概念,以及网页解析的基 本手段.最后我们提出了一种网页解析的基本方案,它能够有效处理简单页面,同时它 也是后续方案的基础.
2.1
什么是网络信息抽取?
网络信息抽取亦被称作网络数据抽取.属于网络内容挖掘(Web content mining)
研究的一部分,主要包括结构化数据抽取(Structured Data Extraction),信息集成 (Information integration)和观点挖掘(Opinion mining)等. 结构化数据抽取(Structured Data Extraction)的目标是从 Web 页面中抽取结构 化数据.这些结构化数据往往存储在后台数据库中,由网页按一定格式承载着展示给 用户.例如论坛列表页面,Blog 页面,搜索引擎结果页面等. 信息集成(Information integration)是针对结构化数据而言的.其目标是将从不 同网站中抽取出的数据统一化后集成入库.其关键问题是如何从不同网站的数据表中 识别出意义相同的数据并统一存储. 观点挖掘(Opinion mining)是针对网页中的纯文本而言的.其目标是从网页中抽取 出带有主观倾向的信息. 大多数文献中提到的网络信息抽取往往专指结构化数据抽取.
2.2
网络数据抽取工具简介
传统的网络数据抽取是针对抽取对象手工编写一段专门的抽取程序,这个程序称
为包装器(wrapper).包装器是一种软件构件,一个包装器一般针对某一单一数据源中 的一类页面,负责将数据和查询请求由一种模式转换成另一种模式.在 Web 环境下,包 装器负责将隐含在 HTML 文档中的信息提取出来,并且转换成能够被进一步处理的以某 种数据结构储存的数据.形式化地,一个包装器实际上是一类页面到该页面所含元组集 合的函数.近年来,越来越多的网络数据抽取工具被开发出来,替代了传统的手工编写 包装器的方法.目前的网络数据抽取工具可分为以下几大类(实际上,一个工具可能会 归属于其中若干类):
5

北京邮电大学本科毕业设计(论文)
开发包装器的专用语言(Languages for Wrapper Development):用户可用这些专 用语言方便地编写包装器.例如 Minerva,TSIMMIS,Web-OQL,FLORID,Jedi 等. 以 HTML 为中间件的工具(HTML-aware Tools):这些工具在抽取时主要依赖 HTML 文档的内在结构特征.在抽取过程之前,这些工具先把文档转换成标签树;再根据标签 树自动或半自动地抽取数据.代表工具有 Knowlesys,MDR. 基于 NLP(Natural language processing)的工具(NLP-based Tools):这些工具通 常利用 filtering,part-of-speech tagging,lexical semantic tagging 等 NLP 技术 建立短语和句子元素之间的关系,推导出抽取规则.这些工具比较适合于抽取那些包含 符合文法的页面.代表工具有 RAPIER,SRV,WHISK. 包装器的归纳工具(Wrapper Induction Tools):包装器的归纳工具从一组训练样 例中归纳出基于分隔符的抽取规则.这些工具和基于 NLP 的工具之间最大的差别在于: 这些工具不依赖于语言约束,而是依赖于数据的格式化特征.这个特点决定了这些工具 比基于 NLP 的工具更适合于抽取 HTML 文档.代表工具有:WIEN,SoftMealy,STALKER. 基于模型的工具(Modeling-based Tools):这些工具让用户通过图形界面,建立文 档中其感兴趣的对象的结构模型, "教"工具学会如何识别文档中的对象,从而抽取出 对象.代表工具有:NoDoSE,DEByE. 基于本体的工具(Ontology-based Tools):这些工具首先需要专家参与,人工建立 某领域的知识库, 然后工具基于知识库去做抽取操作. 如果知识库具有足够的表达能力, 那么抽取操作可以做到完全自动. 而且由这些工具生成的包装器具有比较好的灵活性和 适应性.代表工具有:BYU,X-tract.
2.3
网络数据抽取技术流程的实现
其具体步骤如下(以最通用的'Knowlesys 采集'步骤为例) 第一步:确立采集目标,即由用户选择目标网站. 第二步:提取特征信息,即根据目标网站的网页格式,提取出采集目标数据的通用
性. 第三步:网络信息获取,即利用工具自动的把页面数据把存到数据库.
2.4
什么叫做网页解析及其基本的技术手段
网页信息解析的目的是从网页中分析提取出真正想要的信息,排除噪声的干扰.一
般地,可以将页面划分成多个语义不相关的部分,各个部分构成了网页的不同板块,称
6

北京邮电大学本科毕业设计(论文)
之为语义块;而每个块内,各条记录格式基本相同,叫做记录条.所谓网页信息解析, 就是指从网页 C 中发现隐含的模式 p,如果将 C 看作输入,将 p 看作输出,那么网页信 息解析的过程就是从输入到输出的一个映射ζ: C->p;其中, 主要就是页面内的不同语 p 义块及每个块内不同的记录条. 大多数 Web 网页都是采用 HTML 语言书写而成的, 这些网页由普通文本和 HTML 标记 组成.宏观上,可以简单地将页面看成一个线性的字符串;微观上,这个字符串包含着 很多互相嵌套的标记,标记决定了页面的结构属性,包括:页面的视觉特征(颜色,字 体大小,字体粗细等)和页面的版式特征(段落的长短,标题的位置,段落之间的距离 等) ;并且,各个标记的级别是不一样的,标记的分步有一定的规律,在使用习惯上也 存在着差异.这些都是网页信息解析可以利用的重要特征. 由于 HTML 标记的嵌套特性,一般采用 DOM(Document Object Model)树来表示 HTML 文档的内部结构.基于 DOM 树,针对不同的页面结构类型,可以采取不同的技术手段. 2.4.1 利用 HTML 标记分布规律进行解析
网页中 HTML 标记有一定的使用习惯和规则,尤其是在各条记录的边界处.各条记 录和记录边界处出现的标记往往呈现一定的规律, 这些规律可以帮助确定出记录的边界. 为此,人们利用这种信息,从格式较为简单的诸如"腾讯新闻--国内评论"类网页 中抽取各个记录的条目.这种网页一般具有以下特征:1)网页中只有一个板块,含有多 条记录;2)每个记录间至少有一个分隔符.针对网页的特点,可采用简单的启发式规则 来做. 例如:文献[7]采用了五个启发式规则:1)把出现次数最多的"候选"分隔符作为 记录的边界;2)把从训练集中学习到的边界分隔符作为记录的边界;3)把所夹字符数标 准偏差小的"候选"分隔符作为记录边界;4)把同现次数多的两个或多个标记处作为记 录的边界.5)根据所处理问题本体内的关键字段来确立记录的边界.文献[8]在处理这 类多记录网页时,仅采用一条启发知识:每条记录的格式是基本相同的.然后,利用这 条启发知识从网页中分析出记录的格式,进而确定出记录的边界. 单纯利用 HTML 标记的分布规律对页面进行解析,在处理格式简单的诸如"论文网 页"时比较有效;然而,由于基本启发知识的限制,在应对格式复杂或缺少共同表示特 征的 Web 网页中就显得力不从心. 2.4.2 利用 HTML 标记间的关系进行解析
7

北京邮电大学本科毕业设计(论文)
HTML 语言中的标记不是独立的,它们之间存在着一定的层次地位关系;而且,每个 标记对页面产生的作用也不同:有的只对视觉特征起作用;有的只对结构层次化显示起 作用;还有的二者兼有之.一般地,根据标记是否对 HTML 文件的结构化产生作用,可 以把标记分成两类. 2-1 列举了对结构化显示产生作用的标记, 图 并给出了标记间的优 先级排序.
图 2-1 对结构化产生作用的标记
图 2-1 中,符号">>"左边的标记在结构层次上的重要度比右边的标记大.文献[9] 就利用 HTML 标记间的这种关系,只分析图 2-1 中列举的这些标记,力图通过一系列具 体的整合规则,把这些标记构成的结构树变换整合为语义树的形式. 如果单纯利用 HTML 标记间的关系对 HTML 文档进行解析, 对于特定领域的结构简单 规范的网页来说, 会用比较好的效果; 然而现今流行的网页结构往往是复杂而不规则的, 基于精细分析 HTML 标记的方法就显得很脆弱,无法正确整合文档的结构.因此,这种 思想适合与其他方法结合起来使用. 2.4.3 利用页面的视觉特征进行解析
在 HTML 文件中,很多标记的使用不仅是为了内容的组织,还可以用来表示页面的 外观,例如"table""P"等.为了对页面进行解析,页面显示的外观提供了大量的线 , 索.这些视觉特征包括不同的行,空白区域,字体不同的大小和颜色,段落的长短等. 所以,页面的视觉特征会对页面的解析有很大的帮助.文献[10]提出了一种基于视觉特 征的解析方法,并把它应用在了 TREC2003 的评测中,取得了较好的效果. 利用视觉特征对页面进行解析,能在一定的程度上满足复杂页面对算法的要求.但 由于视觉特征的复杂性,运用的启发知识往往较为模糊,需要人工来不断地总结调整规 则, 需要的规则往往非常多, 一条规则的加入会对已经成功分析的网页产生影响, 因此, 如何保证规则集的一致性是一大难点. 2.4.4 利用 TABLE 标记的布局特性进行解析
随着互联网的深入发展,网页的格式越来越复杂,共同的特征越来越少.现在,每 个网页几乎都包含网站分类栏,各个主题的导航栏,正文栏,相关链接栏,版权声明栏
8

北京邮电大学本科毕业设计(论文)
和广告信息栏.然而,由于标记"table"有良好的布局特性,格式复杂的页面往往都 采用"table"标记来进行页面的格式布局.因此可利用"table" 标记对页面进行解析. 如图 2-2 所示,整个页面用一个大的 table A 来布局,它的每 一个表单项 "td" 里边又嵌套不同的 table.这样不断地嵌套, 直至最底层的 table 里面包含着具体的记录项. 文献[11]就利用标 记"table"来对页面进行解析,把页面分割成不同的块.
图 2-2 页面格式布局
虽然思路简单,但用 table 标记进行挖掘,对网页开发工具制作出来的格式特别复 杂的页面来说,是比较有效的,它往往能胜任其他方法所应付不了的复杂网页.所以, 在处理门户网站中的网页时,这种思想是比较可取的.
2.5
网页规范化
HTML 用一对预定义的标记来描述包含在其间的文本的表示方式,要求标记成对出
现.事实上,有许多 HTML 文档中的标记不符合 HTML 语法要求,比如缺乏结束标记等. 这些错误影响对 HTML 文档的正确解析,因此,为了便于解析,首先要对 HTML 文档进行 整理,将其转换成 XHTML 文档,XHTML 严格建立在 XML 基础之上,并且明确定义了格式 良好的文档规则. 对 HTML 文档的整理主要是以下四个方面: ① ② 在除了网页标记 tag 外的地方出现的"<"和">"用<和>代换. 所有标记的属性值放在引号中,如.
③ 所有标记都是匹配的,即每个开始标记均对应着一个结束标记,如 ④ 所有标记都是正确嵌套的,如
.
2.6
一个简单的网页正文提取方案
对于源码复杂度小, 页面结构简单即页面内容几乎全部是目标内容或正文内容的网
页,可将网页源码看成是一个字符串,用处理字符串的基本函数去除格式化标签,提取 正文内容. 基本思路如下: ①先把注释去掉. ②对标签的处理分为两类:
9

北京邮电大学本科毕业设计(论文)
一类是只将元素起始标签(包括元素属性) ,结束标签去掉,保留元素内容.例如: , ,

,

等; 另一类需要将元素的起始标签 (包括元素属性) , 结束标签以及元素内容通通去掉.如,等.所以程序中要 重载两个删除标签的操作. ③转义字符的处理: 打算做这样一个程序:输入为 HTML 文本文件,输出为 TXT 文件.所以,在进行标 签去除工作后还有一个重要的工作要做,即:将提取的 HTML 文本中的转义字符进 行替换,让这些信息可以在 TXT 格式的文档中得到正确的显示. 其中第二步是关键步骤,也是此算法的核心.采用 MFC CString 类实现算法如下 删除仅删除元素标签而保持元素内容的算法 void CWebExtracterView::DeleteSymbol(void) { int pos1=m_prostr.Find("<"); //找到标签例如

开始处 int pos2=m_prostr.Find(">");//找到标签例如

结束处 //去除

int length=m_prostr.GetLength(); CString temp1=m_prostr.Left(pos1); CString temp2=m_prostr.Right(length-pos2-1); m_prostr=temp1+temp2; //查找去除标签后的源码中是否还有没有去干净的HTML标签 int npos1=m_prostr.Find("<"); int npos2=m_prostr.Find(">"); //如果有,则递归调用函数DeleteSymbol()删除剩下的标签. if((npos1!=-1)&&(npos2!=-1)) { DeleteSymbol(); } }
删除元素标签及其内容的算法 void CWebExtracterView::DeleteAll(CString symbol) { CString tmp=""; //找到元素开始标签开始位置 int pos1=m_prostr.Find("<"+symbol);
10

北京邮电大学本科毕业设计(论文)
//找出元素结尾标签所在位置 int pos2=m_prostr.Find (""); //如果找不到开始标签则返回 if(pos1==-1)return; //计算上面的开始标签和结尾标签之前开始标签的数目 int n1=CountSymbol(pos1,pos2,symbol); int n2=1; int length=m_prostr.GetLength(); int len=tmp.GetLength(); //如果开始标签的数目和结尾标签的数目不一致, 找到当前结束标签后面的下一个 结束标签, //直到同名标签能够正确嵌套匹配为止 while((n1!=n2)&&(pos2!=-1)) { pos2=m_prostr.Find("",pos2+1); n2++; n1=CountSymbol(pos1,pos2,symbol); } if(n1!=n2)return; //去除整个元素 CString temp1=m_prostr.Left(pos1); CString temp2=m_prostr.Right(length-pos2-len); m_prostr=temp1+temp2; //查看处理后的网页源码中是否还有这种标签,如还有则继续调用该函数进行去除 操作 int npos_start=m_prostr.Find("<"+symbol); if(npos_start!=-1) DeleteAll(symbol); }
采用该方案的提取结果如下:
11

北京邮电大学本科毕业设计(论文)
图 2-3 待解析的网页视图
图 2-4 解析后的结果视图
以上解析结果说明:这种最简单的网页解析方法很适用结构简单的网页.在毕设过 程中笔者也曾试图用这种方法解析腾讯新闻网页.但由于算法中大量运用了递归函数, 所以程序运行起来很慢,提取结果也不尽人意.从下一章开始我们将开始介绍新闻网页 结构,以及针对新闻网页的解析策略.
12

北京邮电大学本科毕业设计(论文)
第三章
新闻网页一般结构
本章主要展示新闻网页二级索引页面的结构,以及末级页面的结构.为第四章提出 的基于模板的解析方案和第五章提出的基于结构的解析方案,提供素材依据.
3.1
新闻网页分两类
可以将新闻页面分成两类:一类以超链接文字为主,这类网页仅提供一个目录,给
内容上有关联的零散网页提供一个公共的入口,这类网页称之为"索引页面" :还有一 类网页本身还有实际的内容,一般是显示具体信息的末级页面,我们称之为"内容页 面" .
3.2
索引页面结构
13

北京邮电大 大学本科毕业设 设计(论文)
②导航区 ② ①正文区
③广告区 广
图 3-1 索引 引网页页面结 结构
14

北京邮电大 大学本科毕业设 设计(论文)
图 3-2 索 索引网页正文区 区清晰图
从上 上图可以看 看出新闻索引页面的一 一般特点:拥 拥有新闻标 标题和发布时间.由于 于新闻的 时效性较 较强,绝大 大多数新闻网页上的新 新闻发布时间能够精确 确到分.在第 第四章我们 们介绍的 索引页正文提取算 算法中,将会用这一特 特点作为分类的特征向 向量.
3.3
内容页面 面结构
15

北京邮电大学本科毕业设计(论文)
③广告区
①正文区
② 导 航
图 3-3 内容网页页面结构
经过调研, 一般新闻网站内容网页的全部正文是放在一个 div 块中. 如腾讯, 凤凰, 新浪,网易等.当然也有一部分新闻网站的内容网页的全部正文是放在一个 table 中. 如新华网的部分网页(https://www.doczj.com/doc/667737660.html,/politics/rdgc.htm) .
16

北京邮电大学本科毕业设计(论文)
第四章
基于模板的网页解析系统设计
本章开始处简要介绍了模板制作中使用的两种工具:正则表达式和 Winista.HTMLParser. 其余部分将详细介绍基于模板的网页解析器设计方案. 笔者在毕设 过程中曾经针对腾讯,凤凰,水木清华新闻版设计不同的解析模板.本章将详细介绍笔 者在这一方面的工作.同时,笔者也是在设计基于模板的网页解析系统的过程中,得到 了启示,有了设计"通用模板"的网页解析器的想法.
4.1
什么是基于模板的解析方案?
同一网站,同一版面的各个网页之间视图结构具有相似性,其网页源码也具有一定
程度的相似性. 基于模板的解析方案就是先观察各个相似网页的源码, 从中归纳出模板, 然后利用此模板解析出目标信息.
4.2
正则表达式和 HTML Parser 库简介
4.2.1 正则表达式简介
正则表达式是由数学家 Stephen Kleene 于 1956 年提出的.他的描述与 Chomsky 提 出的三型文法,即线性文法等价,主要通过字符的格式匹配进行词法分析.后来,被推 广为在静态文本中查找和替代的一种标准. 正则表达式是对一类字符串共性描述的规则,是由普通字符(例如字符 a 到 z)以 及特殊字符(称为元字符)组成的文字模式.它描述了满足一定模式的字符串的集合. 例如: "X+Y"表示一个以上 X 后面跟一个 Y 的字符串的集合, "\[\t]$"表示匹配一个 空白行等.在典型的搜索替换操作中,必须提供要查找的确切文字.这种技术对于静态 文本中的简单搜索和替换任务可能足够了.但是由于它缺乏灵活性,因此在搜索动态文 本时就要困难,甚至是不可能的.使用正则表达式就可以:(1)测试字符串的某个模式. 例如,可以对一个输入的字符串进行测试,看该字符串是否存在一个电话号码模式或一 个信用卡号码模式.这称为数据的有效性验证.(2)查找.根据模式匹配从字符串中提取 子字符串.可以用来在文本或输入字段中查找特定文字.(3)替换文本.可以在文档中使 用一个正则表达式来标识特定文字,然后可以全部将其删除,或者替换为别的文字. 正则表达式在本系统中主要用于识别简单特征信息及部分复杂特征信息. 由于很多
17

北京邮电大学本科毕业设计(论文)
简单特征信息的字符构成有很大的共性,因此可以用正则表达式加以概括.对于每个部 同的特征信息生成不同的一个或多个正则表达式, 用于在文本串中定位相应的特征信息. 一些复杂特征信息的各个条目中,也可以用正则表达式进行匹配.这些对应于不同特征 信息的正则表达式将会和相应的特征标识相关联,储存于特征标识库中. 4.2.2 4.2.2.1 Winista.HTMLParser dll 简介 背景知识
该类库目前分为 Utltimate,Pro,Lite 和 Community 四个版本,前三个版本都是 收费的.只有 Community 版本可以免费下载并查看所有的源码. 4.2.2.2 1. 功能和特性
可以在任何.net 语言中使用(C#,https://www.doczj.com/doc/667737660.html,,J#等).
2. 可以解析几乎所有的 HTML 标签,并且可以通过标签类别,属性或正则表达式 来搜索标签.有些甚至在 java 版本中无法支持的标签也在这个版本中得到了支持. 3. 设置可扩展的过滤器来过滤结果集中不需要的标签.
4. 高性能的 API 接口使得你能处理许多常见问题,如:那些页面是外部链接?那 些是图片?哪些是不同的表格?页面中有错误的连接吗等等问题. 5. 一个基于 Http 协议引擎的配置文件使得你能通过一个指定的 URL 地址来获得 该页面内容.该爬虫可以遵循 robot.txt 协议文件来获得组织和允许访问的列表. 6. Http 协议引擎能够完整地处理来自任何站点的反馈. 词法分析的工作原理
4.2.2.3
HTMLParser 的词法分析器对 HTML 进行了 4 级封装,从低级到高级的顺序为: ParserStream,Source,Page,Lexer.ParserStream 负责从文件中获得二进制数据, 但不做任何处理. Source 把二进制文件转换成相应的字符序列, 储存一组未加工的字符 序列. Page 可以看成是一个 string 数字按行存储一个 Source 文本的每一行的第一个字 符开始的位置索引.Lexer 包含了词法分析代码,从 Page 里读取字符串,用 Cursor 记 录当前字符所在位置,通过状态机来生成 Nodes 节点. 4.2.2.4 三种使用方法比较
1.使用 Lexer 词法分析器直接解析 HTML 这样的方法较为底层, 只能返回一个线性的 Node 节点序列, 通过 Lexer.NextNode()
18

北京邮电大学本科毕业设计(论文)
方法获得下一个 Node 的信息.虽然不够方便,但有时可以完成一些较为灵活的工作. 2.使用 Filter 结点过滤模式 如果有一些很明确的结点需要提取,那么就该使用 Filter 结点过滤模式.系统定义 了 17 种具体的 Filter,根据不同的过滤条件来获取需要的结点. 包括依据结点父子关系的 Filter,连接 Filter 组合的 Filter, 依据网页内容匹配情况的 Filter 等. 我们也可以继承 Filter 做自己的 Filter 来提取结点. 3.使用 Visitor 结点访问模式 如果你希望 HTMLParser 遍历所有的结点,并按结点的不同类型(StringNode , RemarkNode,TagNode)和不同的访问过程来进行不同的操作的话,可以使用 Visitor 模 式.NodeVistor 是一个抽象类,分别定义了如下方法: BeginParsing():解析前进行的操作 VisitTag():访问到开始标签时的操作 VisitEndTag():访问结束标签时的操作 VisitStringNode():访问文本结点时的操作 VisitRemarkNode():访问注释结点时的操作 自己定义一个类并继承 NodeVistor 类,实现以上几个方法,也即完成了 Visitor 访问类
4.3
系统最终实现目标
1.能根据定制的模板,将相应新闻网站的索引页正文与内容页正文提取出来. 2.索引页要把目标新闻的 URL,标题,发表时间提取出来. 3.内容页正文提取后要能在程序中按照网页上的格式显示出来. 4.如果新闻有下一页,则下一页新闻也要提取,即提出的新闻要内容完整,而不只
是仅提当前页(一般是新闻首页) . 5.提取后的信息能够以.txt 的形式保持到电脑硬盘上, 并且能够在程序中正确回显.
19

北京邮电大学本科毕业设计(论文)
4.4
采用面向对象的编程思想
本系统采用面向对象的编程思想实现. 声明一个 IInformationRetrival 接口用于解析.
公 有 虚 函 数 : void ItemRetrival(string url, ref Encoding encode,ref Listlisturl,ref Listlisttitle,ref Listlisttime) IInformationRetrival 公有虚函数:string GetMainText (string url,ref Encoding encode)
公有函数:string GetDataFromUrl(string url, ref Encoding encode) IInformationRetrival
公有函数:void ModifyRawText( ref string rawtext)
其 中 公 有 虚 函 数 ItemRetrival 用 于 新 闻 索 引 页 正 文 提 取 , 它 由 继 承 于 IInformationRetrival 的具体模板类实现.公有虚函数 GetMainText 用于新闻内容页的正 文提取,它亦由具体的模板类实现.公有函数 GetDataFromUrl 用于从指定的 URL 获得 网页源码,以及该网页的编码格式.公有函数 ModifyRawText 用于将提取后的信息中的 HTML 转义字符进行正常化显示.
4.5
系统工作模式
20

相关文档 最新文档