`
jayghost
  • 浏览: 440102 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

由nutch readseg -dump 中文编码乱码想到的……

 
阅读更多

两周前,我参考Hadoop权威指南2,写了一个读取SequenceFile的类,想读取Nutch抓取下来的segments文件。当时如果Nutch抓取的是utf8编码的中文页面就可以正常读取,但如果网页是中文编码的话就会出现乱码,比如我抓取了www.163.com,用

 

bin/nutch crawl urls/ -dir crawl/www.163.com/ -depth 3 -topN 50 -thread 5

 

 由于163是用的gb2312编码的,读取crawl/www.163.com/segments/下面的文件就有乱码。同样可以用readseg一试

 

 bin/nutch readseg -dump crawl/www.163.com/segments/20120513192613/ crawl/www.163.com/readseg-result1

 

 查看readseg-result1/dump文件发现Content::中的网页源码信息中的中文是乱码,但观察其上方的ParseData::和ParseText::却不是乱码,于是我看了Nutch的readseg命令的源代码:org.apache.nutch.segment.SegmentReader

 

找到其map和reduce方法,想进行改造重新实现一个MySegmentReader,在map方法:

 

public void map(WritableComparable key, Writable value, OutputCollector<Text, NutchWritable> collector,
		Reporter reporter) throws IOException {
	// convert on the fly from old formats with UTF8 keys.
	// UTF8 deprecated and replaced by Text.
	if (key instanceof Text) {
		newKey.set(key.toString());
		key = newKey;
	}
	collector.collect((Text) key, new NutchWritable(value));
}

 和reduce方法:

 

public void reduce(Text key, Iterator<NutchWritable> values, OutputCollector<Text, Text> output, Reporter reporter)
		throws IOException {
	StringBuffer dump = new StringBuffer();

	dump.append("\nRecno:: ").append(recNo++).append("\n");
	dump.append("URL:: " + key.toString() + "\n");
	while (values.hasNext()) {
		Writable value = values.next().get(); // unwrap
		if (value instanceof CrawlDatum) {
			dump.append("\nCrawlDatum::\n").append(((CrawlDatum) value).toString());
		} else if (value instanceof Content) {
			dump.append("\nContent::\n").append(((Content) value).toString());
		} else if (value instanceof ParseData) {
			dump.append("\nParseData::\n").append(((ParseData) value).toString());
		} else if (value instanceof ParseText) {
			dump.append("\nParseText::\n").append(((ParseText) value).toString());
		} else if (LOG.isWarnEnabled()) {
			LOG.warn("Unrecognized type: " + value.getClass());
		}
	}
	output.collect(key, new Text(dump.toString()));
}

 我尝试了多种转换编码的方式,然后重新执行MySegmentReader,却总是得到同样的结果Content::中的网页源码信息中的中文始终是乱码。

 

我想为什么不直接用ParseText::中的编码正确的信息呢?

根据reduce中

 

 else if (value instanceof ParseText) {
	dump.append("\nParseText::\n").append(((ParseText) value).toString());
}

 的提示,我想可以重新写一个解析类的reduce方法,专门用于生成这种纯文本的ParseText的文件,然后交给Mahout的org.apache.mahout.text.SequenceFilesFromDirectory类 去处理。

 

今天我又用之前写的读取SequenceFile的类来读取了crawl/www.163.com/segments/20120513192613/parse_text/part-00000/data的信息,就是正常的无乱码的文本:

bin/hadoop jar ~/Desktop/SequenceFileReader.jar segments/20120513192613/parse_text/part-00000/data segdata-parse-text

 产生的结果如下:

      [7261*]    http://news.163.com/12/0511/16/8183GF9B0001124J.html    

 

 

 

 

 

 

 

 

 

 

 

 

 

分享到:
评论
5 楼 sleeper_qp 2013-08-19  
lz是在源码上修改的么?  源码的话你重新编译一遍了么?  可能是这个原因额
4 楼 shenjian430 2013-06-16  
请问你改好的程序在写在哪了?
3 楼 jayghost 2013-03-19  
gongshijun1 写道
我要的不是你写好的能运行的程序

机器人?
2 楼 gongshijun1 2013-03-19  
我要的不是你写好的能运行的程序
1 楼 gongshijun1 2013-03-19  

相关推荐

    Nutch相关框架视频教程 讲义 杨尚川

    bin/nutch readseg-dump data/segments/20130325042858 data/segments/20130325042858_dump-nocontent-nogenerate-noparse-noparsedata –noparsetext ``` 10. **查看内容**: ``` bin/nutch readseg-dump data...

    apache-nutch-2.3.1-src.tar.gz

    Nutch 是由 Apache Software Foundation 维护,它提供了完整的网络爬虫解决方案,包括数据采集、预处理、文本分析以及搜索功能。`apache-nutch-2.3.1-src.tar.gz` 是 Apache Nutch 的源代码包,版本号为 2.3.1,以 ...

    apache-nutch-1.3-src.tar.gz_nutch_nutch-1.3.tar.gz

    Apache Nutch 是一个开源的网络爬虫项目,用于抓取互联网上的网页并建立索引,以便进行全文搜索。Nutch 1.3 是该项目的一个稳定版本,提供了许多关键功能和改进。这个源码包 "apache-nutch-1.3-src.tar.gz" 和 ...

    apache-nutch-1.4-bin.tar.gz

    Nutch 支持多种语言的分析,包括中文。 5. **索引器(Indexer)**:将解析和分析后的数据存储到索引库中,以便于快速查询。Nutch 可以与多种存储和索引系统集成,如Apache Solr 和Hadoop HDFS。 6. **搜索接口...

    nutch2.2.1-src

    Apache Nutch 是一个开源的网络爬虫项目,用于抓取互联网上的网页并建立索引,是大数据和搜索引擎技术的重要组成部分。Nutch 2.2.1 是该项目的一个稳定版本,包含了许多优化和改进。源码的提供使得用户可以深入理解...

    nutch配置nutch-default.xml

    nutch配置nutch-default.xml

    apache-nutch-1.6-bin.tar.gz最新版

    nutch不用安装,是个应用程序,下载后为nutch-1.6.tar.gz,双击桌面上的cygwin快捷方式;执行以下命令: $ cd D:/Downloads/Soft $ tar zxvf nutch-1.0.tar.gz 在e盘下面出现nutch-0.9文件夹说明解压成功了.然后环境...

    apache-nutch-1.7-src.tar.gz

    Nutch是由Apache软件基金会开发并维护的,其目标是提供一种可扩展、可靠的全网搜索解决方案。Nutch 1.7是该项目的其中一个稳定版本,包含了丰富的功能和优化。 在“apache-nutch-1.7-src.tar.gz”这个压缩包中,你...

    nutch乱码BUG修正

    Nutch默认使用UTF-8编码,但如果网页或数据库的编码与之不匹配,就会出现乱码现象。 1. **网页抓取阶段**:Nutch通过HTTP协议获取网页内容,服务器返回的Content-Type头可能指定不同的字符编码。如果Nutch没有正确...

    apache-nutch-1.5.1-bin.tar.gz

    Nutch是一款刚刚诞生的完整的开源搜索引擎系统,可以结合数据库进行索引,能快速构建所需系统。Nutch 是基于Lucene的,Lucene为 Nutch 提供了文本索引和搜索的API,所以它使用Lucene作为索引和检索的模块。Nutch的...

    nutch1.5-官方包

    Nutch 是一个高度可扩展的搜索引擎系统,由Apache软件基金会开发。它集成了网页抓取、分析、索引和搜索等功能,支持分布式处理,能够在大规模数据集上高效工作。Nutch 1.5 是其一个重要版本,相对于之前的版本,...

    apache-nutch-2.3.1-src

    apache-nutch-2.3.1-src.tar ,网络爬虫的源码, 用ivy2管理, ant runtime 编译 apache-nutch-2.3.1-src.tar ,网络爬虫的源码, 用ivy2管理, ant runtime 编译

    apache-nutch-1.4

    Apache Nutch是一个由Java编写的开源软件,主要分为两个核心部分:爬虫和索引。爬虫负责抓取互联网上的网页,而索引器则对抓取的数据进行处理,构建可用于搜索的索引。Nutch的目标是提供一个可扩展、高效的搜索解决...

    apach-nutch-1.9-bin.tar.gz

    Apache Nutch 是一个开源的网络爬虫框架,用于构建大规模的全文搜索引擎。Nutch 1.9 是一个较旧但稳定的版本,相比2.x系列,它不需要依赖像HBase这样的非关系型数据库,因此在部署和维护上可能更加简单。这个压缩包 ...

    实验报告(利用Nutch和IKanalyzer构造中文分词搜索引擎)

    同时,针对中文乱码问题,分别在server.xml和cached.jsp中调整编码设置,确保中文能正确显示。 接下来,注意到Nutch的默认分词器是以单字为基础,且未处理停用词。通过Luke工具查看索引文件,确认了这一现象。为了...

    apache-nutch-1.6-src.tar.gz

    Apache Nutch 是一个开源的网络爬虫项目,用于抓取互联网上的网页并建立索引,以便于搜索引擎进行高效的信息检索。Nutch 1.6 是该项目的一个稳定版本,提供了丰富的功能和良好的性能。这个`apache-nutch-1.6-src.tar...

    apache-nutch-1.4-bin.tar.gz.part2

    apache-nutch-1.4-bin.tar.gz.part2

    Eclipse中编译Nutch-0.9

    ### Eclipse中编译Nutch-0.9:详解与步骤 #### 核心知识点概览 在本篇文章中,我们将深入探讨如何在Eclipse环境中编译Nutch-0.9,一个开源的网络爬虫项目,用于抓取互联网上的网页信息。文章涵盖的关键知识点包括...

    nutch-1.0-dev.jar

    nutch-1.0-dev.jar nutch devlope

Global site tag (gtag.js) - Google Analytics