• 学前教育
  • 小学学习
  • 初中学习
  • 高中学习
  • 语文学习
  • 数学学习
  • 英语学习
  • 作文范文
  • 文科资料
  • 理科资料
  • 文档大全
  • 当前位置: 雅意学习网 > 英语学习 > 正文

    基于c#图书馆管理系统 基于C#的网页正文信息提取

    时间:2019-04-08 03:17:26 来源:雅意学习网 本文已影响 雅意学习网手机站

      摘要:快速有效的获取有用的信息是一个具有相当挑战性的课题,在传统的信息提取过程中,使用正则表达式提取网页正文信息,可以快速的获得网页的主要信息,缺点是夹杂了不必要的噪声信息。在此基础上提出了基于解析DOM树结构的网页正文信息提取方法,本文使用的方法在此基础上又做了一些改变,即使用逆序解析DOM树的方法来获取网页正文信息,在对网页内容进行净化处理后通过逆序解析达到了效率和速度相对较优的处理结果。
      关键词:DOM树 网页正文信息 C#1、引言
      信息服务商使用网络爬虫抓取互联网中的网页,分析和整理网页中的信息内容呈献给用户,在此过程中,提取网页正文信息是一个重要环节。传统的方法中,通过快速的正则表达式直接提取网页内容,但容纳了太多的噪声信息。为精确提取正文信息,提出了基于DOM树的页面分析方法。本文提取网页正文的方法建立在正文信息以块形式聚集的分布规律之上,为消除夹杂的噪音,假定正文信息以相近链路尝试聚集。由于正文信息聚集在一起,并在DOM树中的同一个子树中,若能确定任意一块,就能根据正文信息块之间的相似性从最近的信息块中提取其它的正文信息,并不需访问整个DOM树,甚至不用解析整个DOM树,因此采用基于C#的逆序解析DOM树算法。逆序解析算法是依据给定标记序列,从最后一个结束标记依次向前解析并不断补全缺省标记的过程。
      2、网页解析方法设计及实现
      2.1 DOM结构
      DOM的全称是Document Object Model(文档对象模型),它是来自W3C的官方标准。DOM的工作方式是:首先将XML文档一次性的装入内存,然后根据文档中定义的元素和属性在内存中创建一个“树型结构”也就是一个文档对象模型,即是把文档对象化,文档中每个节点对应着模型中一个对象,在Application中正是使用这组对象访问XML文档进而操作XML文档。
      DOM是在内存中创建树型结构视图进而提供编程接口,用下面这个XML片段来说明DOM是如何创建树型结构:
      <parent>
      <child id=”123”>text here</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是结束标记栈,
      // Active_Node为当前节点
      if(Current _Tag是文本信息或者独立标记){
      Create_Node New_Node=Current _Tag; //创建以文本信息为内容的叶子节点;
      Active_Node.Child= New_Node; //新叶子节点添作为Active_Node的第一个孩子;
      Return;}
      if(Current _Tag是一个结束标记){
      Create_Node New_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_Node New_Node=Current _Tag;//创建以Active_Node为名的新节点;
      Active_Node.Child= New_Node;//新节点添作为Active_Node的第一个孩子;
      Return;}
      Create_Node New_Node=Current _Tag;//创建以当前标记为名的新节点;
      设Active_Node为Active_Node的双亲节点;
      Active_Node.Child= New_Node;//新节点添作为当前节点的第一个孩子;
      Return;
      3、小结
      网页正文信息的提取大都基于DOM树结构解析,无论是使用节点统计方法还是链路比较方法。本文介绍了DOM树结构,使用C#语言应用逆序解析DOM树的算法对网页正文信息进行提取分析,达到了解析网页的目的。
      参考文献:
      [1](美)Karli Watson Christian Nagel .C#入门经典(第4版).清华大学出版社,2009.
      [2](美)内格尔(Nagel).C#高级编程(第6版),清华大学出版社,2009.
      [3]周陟.网页设计解析,清华大学出版社,2009.
      [4]杨涛,王建桥,杨晓云.图灵程序设计丛书·Web开发系列,人民邮电出版社,2007.

    推荐访问:提取 网页 正文 信息

    • 文档大全
    • 故事大全
    • 优美句子
    • 范文
    • 美文
    • 散文
    • 小说文章