本论文是一篇关于节点方面论文答辩开场白,关于基于C#的网页正文信息提取相关专科毕业论文范文。免费优秀的关于节点及参考文献及信息方面论文范文资料,适合节点论文写作的大学硕士及本科毕业论文开题报告范文和学术职称论文参考文献下载。
摘 要:快速有效的获取有用的信息是一个具有相当挑战性的课题,在传统的信息提取过程中,使用正则表达式提取网页正文信息,可以快速的获得网页的主要信息,缺点是夹杂了不必要的噪声信息.在此基础上提出了基于解析DOM树结构的网页正文信息提取方法,本文使用的方法在此基础上又做了一些改变,即使用逆序解析DOM树的方法来获取网页正文信息,在对网页内容进行净化处理后通过逆序解析达到了效率和速度相对较优的处理结果.
关 键 词:DOM树网页正文信息C#1、引言
信息服务商使用网络爬虫抓取互联网中的网页,分析和整理网页中的信息内容呈献给用户,在此过程中,提取网页正文信息是一个重要环节.传统的方法中,通过快速的正则表达式直接提取网页内容,但容纳了太多的噪声信息.为精确提取正文信息,提出了基于DOM树的页面分析方法.本文提取网页正文的方法建立在正文信息以块形式聚集的分布规律之上,为消除夹杂的噪音,假定正文信息以相近链路尝试聚集.由于正文信息聚集在一起,并在DOM树中的同一个子树中,若能确定任意一块,就能根据正文信息块之间的相似性从最近的信息块中提取其它的正文信息,并不需访问整个DOM树,甚至不用解析整个DOM树,因此采用基于C#的逆序解析DOM树算法.逆序解析算法是依据给定标记序列,从最后一个结束标记依次向前解析并不断补全缺省标记的过程.
节点本科论文初稿怎么写
播放:38067次 评论:5899人
有关论文范文主题研究: | 节点类论文范文 | 大学生适用: | 函授毕业论文、专科毕业论文 |
---|---|---|---|
相关参考文献下载数量: | 21 | 写作解决问题: | 写作参考 |
毕业论文开题报告: | 文献综述、论文结论 | 职称论文适用: | 职称评定、初级职称 |
所属大学生专业类别: | 写作参考 | 论文题目推荐度: | 优质选题 |
2.网页解析方法设计及实现
2.1DOM结构
DOM的全称是DocumentObjectModel(文档对象模型),它是来自W3C的官方标准.DOM的工作方式是:首先将XML文档一次性的装入内存,然后根据文档中定义的元素和属性在内存中创建一个“树型结构”也就是一个文档对象模型,即是把文档对象化,文档中每个节点对应着模型中一个对象,在Application中正是使用这组对象访问XML文档进而操作XML文档.
DOM是在内存中创建树型结构视图进而提供编程接口,用下面这个XML片段来说明DOM是如何创建树型结构:
<parent>
<childid等于”123”>texthere</child>
</parent>
DOM的关键在于它允许直接更新内存中的树型结构,而不必重定向到其他输出.
2.2算法设计及实现
C#通常使用WebClient、WebBrowser或者HttpWebRequest/HttpWebResponse三种方法获取网页内容,然后经过下图所示流程获取DOM树.
每个DOM树节点对应一对标记,而在HTMI规范中,每个标记对都有开始标记,即每个结束标记至少对应着一个树节点.所以,在逆序解析DOM树的过程中,每遇到一个结束标记则至少要构建一个树节点,并将其添加成当前节点的第一个孩子节点.而当识别到一个开始标记时,就需要进行配对.具体配对算法如图1所示.
Algorithm_Match(Current_Tag,End_Tag_Stack.Active_Node)
{
//Current_Tag是当前标记,End_Tag_Stack是结束标记栈,
本文来源:http://www.sxsky.net/benkelunwen/060329049.html
//Active_Node为当前节点
if(Current_Tag是文本信息或者独立标记){
Create_NodeNew_Node等于Current_Tag,//创建以文本信息为内容的叶子节点;
Active_Node.Child等于New_Node,//新叶子节点添作为Active_Node的第一个孩子;
Return;}
if(Current_Tag是一个结束标记){
Create_NodeNew_Node等于Current_Tag,//创建以当前标记为名的新节点
Active_Node.Child等于New_Node,//新节点添作为AetiveNode的第一个孩子I
ActiveNode等于New_Node,//设新节点为ActiveNode;
Return,)
//取End_Tag_Stack栈顶元素Top_Tag;
if(Current_Tag与Top_Tag可以配对){
设Active_Node为Active_Node的双亲节点}
删除End_Tag_Stack的栈顶元素;
Return;}
if(Active_Node有孩子节点而且Current_Tag不能被
Active_Node的第一个孩子节点所包含){
Create_NodeNew_Node等于Current_Tag,//创建以Active_Node为名的新节点;
Active_Node.Child等于New_Node,//新节点添作为Active_Node的第一个孩子;
Return