`
sysu_zeh
  • 浏览: 28594 次
  • 性别: Icon_minigender_1
  • 来自: 广州
最近访客 更多访客>>
社区版块
存档分类
最新评论

java获取网页主信息之四:抽取信息块

阅读更多

从已经建立完成的html树中抽取主信息。

  1. package Source;   
  2.   
  3. public class ChooseBlock   
  4. {   
  5.     //构造方法,设置允许错误率   
  6.     public ChooseBlock(double th)   
  7.     {   
  8.         threshold = th;   
  9.     }   
  10.     //获取一棵html树中的内容   
  11.     public String getContent(HTree tree)   
  12.     {   
  13.         int maxIndex = 0;   
  14.         String str = "";   
  15.         String contBlock[] = tree.getBlock();   
  16.         sizeBlock = getSizeBlock(contBlock);   
  17.         int len = sizeBlock.length;   
  18.         int aid[] = new int[len];   
  19.         staBlock = new boolean[len];   
  20.         iniStaBlock();   
  21.         double val = calError();   
  22.         //方差必须大于阈值,才认为有主要内容   
  23.         if(val < threshold) return null;   
  24.         int i = 0;   
  25.         double max = 0.0;   
  26.         do  
  27.         {   
  28.             //获得当前最可能的块   
  29.             int index = getIndex();   
  30.             aid[i] = index;   
  31.             setBlock(index);   
  32.             double tmp = val;   
  33.             val = calError();   
  34.             double err = tmp - val;   
  35.             if(err > max)   
  36.             {   
  37.                 max = err;   
  38.                 maxIndex = i;   
  39.             }   
  40.             if(err > val) break;   
  41.             i++;   
  42.         } while(true);   
  43.         //选出来的块信息集合   
  44.         for(i = 0; i <= maxIndex; i++)   
  45.         {   
  46.             int index = aid[i];   
  47.             str = (new StringBuilder(String.valueOf(str))).append("\n").append(contBlock[index]).toString();   
  48.         }   
  49.         return str;   
  50.     }   
  51.   
  52.     //获取每一信息块长度   
  53.     private int[] getSizeBlock(String contBlock[])   
  54.     {   
  55.         int len = contBlock.length;   
  56.         int sizeBlock[] = new int[len];   
  57.         for(int i = 0; i < len; i++)   
  58.             sizeBlock[i] = contBlock[i].length();   
  59.         return sizeBlock;   
  60.     }   
  61.        
  62.     //设置已被处理块   
  63.     private void setBlock(int index)   
  64.     {   
  65.         staBlock[index] = true;   
  66.     }   
  67.        
  68.     //初始化块   
  69.     private void iniStaBlock()   
  70.     {   
  71.         int len = staBlock.length;   
  72.         for(int i = 0; i < len; i++)   
  73.             staBlock[i] = false;   
  74.     }   
  75.        
  76.     //计算错误率,以方差记   
  77.     private double calError()   
  78.     {   
  79.         int sum = 0;   
  80.         int num = 0;   
  81.         int len = sizeBlock.length;   
  82.         //获得还未被选取块个数及其总长度   
  83.         for(int i = 0; i < len; i++)   
  84.             if(!staBlock[i])   
  85.             {   
  86.                 num++;   
  87.                 sum += sizeBlock[i];   
  88.             }   
  89.         //定义还未被选取块平均长度   
  90.         double avg = (double)sum / (1.0 * (double)num);   
  91.         //计算方差   
  92.         double err = 0.0;   
  93.         for(int i = 0; i < len; i++)   
  94.             if(!staBlock[i])   
  95.             {   
  96.                 double val = (double)sizeBlock[i] - avg;   
  97.                 val *= val;   
  98.                 err += val;   
  99.             }   
  100.         //归一化   
  101.         return Math.sqrt(err) / (1.0 * (double)num);   
  102.     }   
  103.        
  104.     //获取最大未被选块的下标   
  105.     private int getIndex()   
  106.     {   
  107.         int index = 0;   
  108.         int max = 0;   
  109.         int len = sizeBlock.length;   
  110.         for(int i = 0; i < len; i++)   
  111.             if(!staBlock[i] && sizeBlock[i] > max)   
  112.             {   
  113.                 max = sizeBlock[i];   
  114.                 index = i;   
  115.             }   
  116.         return index;   
  117.     }   
  118.   
  119.     private double threshold;   
  120.     int sizeBlock[];   
  121.     boolean staBlock[];   
  122. }   
分享到:
评论

相关推荐

    HTMLParser抽取Web网页正文信息

    这不仅能够优化用户体验,节省浏览时间,还能提高用户获取信息的效率,进而提升Web的可用性。 在使用HTMLParser时,首先需要从指定的源下载HTMLParser的jar文件,如`http://HTMLParser.sourceforge.net/`,并将该...

    基于机器学习的网页文本抽取技术.pdf

    在实际应用中,基于Java的文本抽取系统可以通过以下步骤构建:(1) 数据收集,获取大量网页样本;(2) 数据预处理,清洗HTML标签,提取纯文本;(3) 特征工程,提取文本特征,如词频、TF-IDF值等;(4) 训练模型,使用...

    HTMLParser抽取Web网页正文信息.doc

    通过上述方法,HTMLParser可以帮助开发者构建一个高效的信息抽取系统,准确地提取网页的正文信息,提高用户获取信息的效率,提升Web的可用性。在实际应用中,开发者可以根据具体需求进一步定制过滤规则和内容相关性...

    网页正文内容抽取类源代码(VB.NET)

    根据哈工大信息检索实验室陈鑫童鞋的《基于行块分布函数的网页正文内容提取》和其实现的JAVA代码改写而来,此版本为VB.NET~~~~喜欢的童鞋可以下载了~~~多多支持啊~~~有什么建议可以联系偶~~~QQ:99217290,小志~~~

    基于Java的在线考试系统的设计与实现.pdf

    根据给定的文件信息,本篇文档主要内容围绕“基于Java的在线考试系统的设计与实现”展开,讨论了从系统设计到实现的整个过程。文档中提到了多个与Java在线考试系统相关的技术点和概念。 知识点一:系统设计与实现的...

    webservice 获取图片

    流是一种处理大量数据的方式,特别是对于大文件如图片,它允许数据逐块传输而不是一次性加载到内存中,这样可以有效避免内存溢出。Java中的InputStream和OutputStream类是处理流的关键。 3. **Web服务获取图片的...

    Java开发实战1200例(第1卷).(清华出版.李钟尉.陈丹丹).part3

    书名:《Java开发实战1200例(第I卷)》(清华大学出版社.李钟尉,陈丹丹) PDF格式扫描版,全书分为24章,共817页。2011年1月出版。 全书压缩打包成4部分,这是第3部分 注:本系列图书的第I、II卷再版时均相应改名为...

    架构脑图.pdf

    - **反射技术**:Java反射机制允许程序在运行时动态获取类的信息,并操作类的对象。 - **封装**:将数据和操作数据的方法绑定在一起,隐藏内部实现细节。 - **继承**:子类继承父类的特性,实现代码复用。 - **多态*...

    简易网络爬虫的实现

    网络爬虫,也称为网页蜘蛛,是一种自动浏览互联网并提取网页信息的程序。在这个项目中,我们将探讨如何构建一个简单的网络爬虫,它能解析网页、抽取其中的数据,并将这些数据保存到文本文件中。此外,为了提高效率,...

    计算机英语

    - **JDK (Java Development Kit)**:Java开发工具包,包含了编译、运行Java程序所需的所有工具。 - **IDE (Integrated Development Environment)**:集成开发环境,是用于提供全面设施来创建、调试和维护应用程序的...

    分布式爬蟲

    - 使用Cookie(人工申请)获取网页内容。 #### 三、分布式爬虫架构设计 ##### 1. 主从架构 - **组成部分**: - 主控制器(Master):统一管理整个爬虫系统的运行状态。 - 终端(Slave):负责具体的信息采集,...

    油煎面包块:ClojureHTML解析库

    对于数据分析任务,它可以快速抽取网页中的关键数据。 了解并掌握Crouton库,对于Clojure开发者来说,意味着能更好地驾驭HTML处理,提高生产力,并为处理Web相关的任务提供强大支持。使用Crouton时,可以通过官方...

    web报表B/S

    Web报表B/S系统采用这种模式,使得用户只需打开网页就能查看和操作报表,降低了对客户端环境的要求。 2. **报表设计**:Web报表通常包含多种图表、表格和图形,以直观地展示复杂的数据。设计工具支持拖拽式布局,...

    PHPWeb开发技术指南——pdf格式

    1.3.7 抽取单独的代码块 16 1.4 使用文件将函数分类 16 1.5 编写文档 17 1.6 一个API设计实例 18 1.7 小结 22 第2章 高级语法 23 2.1 PHP语法 23 2.2 定义常量 24 2.3 数组函数 25 2.4 PHP和OOP 31 2.4.1 类:...

    PHP4.0 高级篇

    1.3.7 抽取单独的代码块 16 1.4 使用文件将函数分类 16 1.5 编写文档 17 1.6 一个API设计实例 18 1.7 小结 22 第2章 高级语法 23 2.1 PHP语法 23 2.2 定义常量 24 2.3 数组函数 25 2.4 PHP和OOP 31 2.4.1 类:...

    IText学习资料

    IText是一款广泛使用的Java库,专门用于处理PDF文档。它提供了丰富的API,使得开发者能够创建、编辑、解析和展示PDF文档。在这个“IText学习资料”压缩包中,你将找到一系列关于如何利用IText进行PDF和Word操作的...

    《计算机英语词汇表》(高清晰pdf版)

    "annotation"(注解)在Java等语言中用于提供元数据,帮助编译器或开发工具进行代码分析。"persistent"(持久的)指的是数据能够跨程序或系统重启保持其状态,如数据库中的数据。"transient"(瞬时的)则相反,指不...

Global site tag (gtag.js) - Google Analytics