`
henry2009
  • 浏览: 90572 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

【转】从HTML文件中抽取正文的简单方案

    博客分类:
  • java
阅读更多

原文转载自http://blog.csdn.net/lanphaday/archive/2007/08/13/1741185.aspx

根据上面所说,我写了一个页面降噪的测试类,确实有效,不过对于不同网页,可能结果有偏差,特别网页文字比较少的,例如图片于文字混合的主题正文页面,等等。

package com.test.net;

import java.io.BufferedReader;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import java.util.PriorityQueue;

/**
 *
 * @author LiuZiHeng
 * @version
 * @date 2010-8-25
 */
public class GetMainContent {

	private PriorityQueue<IndexPersent> priorityQueue = new PriorityQueue<IndexPersent>(1000, new Comparator<IndexPersent>() {
		public int compare(IndexPersent o1, IndexPersent o2) {
			if(o1.persent > o2.persent) {
				return -1;
			}
			
			if(o1.persent < o2.persent) {
				return 1;
			}
			return 0;
		}
	});
	
	public void run() {
		try {
			URL url = new URL("http://view.news.qq.com/a/20100824/000039.htm");
			URLConnection connection = url.openConnection();
			connection.connect();
			InputStream in = connection.getInputStream();
			
			BufferedReader reader = new BufferedReader(new InputStreamReader(in, "GBK"));
			FileOutputStream writer = new FileOutputStream("txt/test1.html", true);
			String line = null;
			StringBuffer sb = new StringBuffer();
			List<String> contentlist = new ArrayList<String>();
			
			//获取正文内容
			while((line = reader.readLine()) != null) {
				writer.write(line.getBytes("GBK"));
				writer.write("\r\n".getBytes("GBK"));
				sb.append(line);//记录html页面内容
				contentlist.add(line);//记录每一行html页面内容
			}
			reader.close();
			writer.close();
			
			System.out.println("=============================================");
			double allens = sb.toString().getBytes("GBK").length;
			
			for(int i = 0; i < contentlist.size(); i++) {
				String linestr = contentlist.get(i);
				int linelen = linestr.getBytes("GBK").length;
				double persent = (double)linelen / allens;//计算每一行内容,在全文内容中字节数的百分比
				
				IndexPersent indexPersent = new IndexPersent();
				indexPersent.setIndex(i);
				indexPersent.setPersent(persent);
				
				this.priorityQueue.add(indexPersent);
			}
			
			//只取头五位的内容部分
			int maxsize = 0;
			while(!priorityQueue.isEmpty()) {
				IndexPersent indexPersent = priorityQueue.poll();
				System.out.println(indexPersent.getIndex() + ":" + indexPersent.getPersent());
				System.out.println(contentlist.get(indexPersent.getIndex()));
				maxsize++;
				if(maxsize >= 6) {
					break;
				}
			}
			
		} catch (MalformedURLException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
	
	public static void main(String[] args) {
		new GetMainContent().run();
	}
	
	private static class IndexPersent {
		int index;
		double persent;
		
		int getIndex() {
			return index;
		}
		
		void setIndex(int index) {
			this.index = index;
		}
		
		double getPersent() {
			return persent;
		}
		
		void setPersent(double persent) {
			this.persent = persent;
		}
		
		
	}
}
 
分享到:
评论
2 楼 henry2009 2012-01-18  
太平洋门户网 写道
能不能提供源文件下载 谢谢

你是太平洋哪位?
1 楼 太平洋门户网 2010-12-08  
能不能提供源文件下载 谢谢

相关推荐

    从HTML文件中抽取正文的简单方案.pdf

    译者导读:这篇文章主要介绍了从不同类型的HTML文件中抽取出真正有用的正文内容的一种有广泛适应性的方法。其功能类似于CSDN近期推出的“剪影”,能够去除页眉、页脚和侧边栏的无关内容,非常实用。其方法简单有效而...

    从HTML文件中抽取正文的简单方案 试验结果

    NULL 博文链接:https://hzxdark.iteye.com/blog/298004

    .NET平台上的文件抽取框架toxy.zip

    toxy是.NET平台上的文件抽取框架,主要解决各种格式的内容抽取问题,比如pdf, doc, docx, xls, xlsx等,尽管听上去支持了很多格式,但它的使用却是极其方便的,因为Toxy把复杂的抽取流程透明化,Toxy的用户根本不用...

    《基于行块分布函数的通用网页正文抽取》的Python实现方式+源代码+文档说明

    网页正文内容抽取 =================== 此代码是对论文《基于行块分布函数的通用网页正文抽取》的Python实现方式。论文的出发点是针对搜索引擎正文提取的解决方案,移除了所有的标签元素,因此我在此保留了标签元素...

    JAVA上百实例源码以及开源项目源代码

     Java实现HTTP连接与浏览,Java源码下载,输入html文件地址或网址,显示页面和HTML源文件,一步步的实现过程请下载本实例的Java源码,代码中包括丰富的注释,对学习有帮助。 Java实现的FTP连接与数据浏览程序 1个...

    正则表达式经典实例.pdf

    7.24 从Windows路径中抽取文件扩展名 7.25 去除文件名中的非法字符 第8章 标记语言和数据交换 8.1 查找XML风格的标签 8.2 把标签b替换为strong 8.3 删掉除em和strong之外的所有XML风格标签 8.4 匹配XML名称 8.5 添加...

    正则表达式经典实例

    7.24 从Windows路径中抽取文件扩展名 7.25 去除文件名中的非法字符 第8章 标记语言和数据交换 8.1 查找XML风格的标签 8.2 把标签b替换为strong 8.3 删掉除em和strong之外的所有XML风格标签 8.4 匹配XML名称 ...

    JAVA上百实例源码以及开源项目

     Java实现HTTP连接与浏览,Java源码下载,输入html文件地址或网址,显示页面和HTML源文件,一步步的实现过程请下载本实例的Java源码,代码中包括丰富的注释,对学习有帮助。 Java实现的FTP连接与数据浏览程序 1个...

    Python Cookbook

    2.27 从微软Word文档中抽取文本 97 2.28 使用跨平台的文件锁 98 2.29 带版本号的文件名 100 2.30 计算CRC-64循环冗余码校验 102 第3章 时间和财务计算 105 引言 105 3.1 计算昨天和明天的日期 111 3.2 寻找...

    XML数据集成的安全问题

    HTML 文件中的表是用HTML 语言写的,用户读起来很轻松,而计算机程序却很难获得其中的数据。并且不同的HTML表可能用不同的结构,不同的含义和不同的名字来存储数据,这给集成数据增添了很多麻烦。因此怎样从HTML 表...

    全能文本批量替换查找工具7.5

    基本介绍】 字符串的批量查找、替换、抽取和统计 ...可以保存替换定义方案并反复使用; 除了支持TEXT、HTML格式,还支持WORD、EXCEL、POWERPOINT格式; 除了支持文件内容批量替换,还可以对文件名批量改名、编号;

    ssh(structs,spring,hibernate)框架中的上传下载

     以上是Spring+Hibernate将文件二进制数据持久化到数据库的解决方案,而Struts通过将表单中file类型的组件映射为ActionForm中类型为org.apache.struts.upload. FormFile的属性来获取表单提交的文件数据。  工程...

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

    实例078 从字符串中分离文件路径、 文件名及扩展名 98 实例079 判断手机号的合法性 99 实例080 用字符串构建器追加字符 100 实例081 去掉字符串中的所有空格 101 实例082 汉字与区位码的转换 102 第5章 面向对象技术...

    数据统计和分析论文的matlab源代码

    数据仓库架构建立后,以数据仓库结构为目标对日志源进行ETL, ETL过程基于Hadoop分布式计算框架,摒弃日志文件中的多余信息,将需要的数据抽取、计算,并装载入Hive数据仓库。 随后基于Hive数据仓库及其提供的数据查询...

    PHP开发实战1200例(第1卷).(清华出版.潘凯华.刘中华).part1

    实例132 随机抽取数组中元素 161 实例133 二维数组的输出 162 实例134 获取数组当前的键名和值 162 实例135 检测数组中是否存在某个值 163 实例136 获取数组中的当前单元 164 实例137 从数组中随机取出元素 165 实例...

Global site tag (gtag.js) - Google Analytics