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

nutch中文分词

阅读更多

经过了几天的折磨solr,公司又要求修改以前的一个nutch项目,这次修改的东西比较多了,涉及到索引字段和日期索引等,这个我们下次再讲,今天我们来讲一下nutch的中文分词。这时,我还是用了IKAnalyzer,再次感谢作者的辛劳。提醒一下,这时用到的NUTCH是1.2版本。

废话不多说,我们现在开始进入正题:

1)在我们修改之前,我们先去下载一个工具,javacc,一个JAVA编译器,可以到这里来下载,http://java.net/projects/javacc/downloads,下载完成后当然要解压啦(废话,呵呵),然后设置path把解压的路径添加到后面,确定可以从cmd进入。

2)我们需要添加中文分词,首先需要找到org.apache.nutch.analysis包内的NutchAnalysis.jj这个文件,找到| <SIGRAM: <CJK> >,把它修改为<SIGRAM: (<CJK>)+ >。

3)当我们修改完成后,我们需要把它进行重新编译,我们先把NutchAnalysis.jj拷到另外一个文件夹,免得生成的文件跟原有文件混淆了。在cmd中进行拷贝的文件夹,例如我们拷到temp,在temp目录内运行javacc NutchAnalysis.jj这个命令,它会在当前目录下生成好几个文件,把这几个文件复制到org.apache.nutch.analysis包内(文件列表如下),直接覆盖即可:

注意,生成的文件NutchAnalysis.java会有错误,只要抛出异常即可。

修改完这时后,summary-basic的main函数会报错,同样也是异常的抛出问题,只要在这时进行捕获就可以了。

代码修改如下:

  Query query = null;
	try {
		query = Query.parse(queryBuf.toString(), conf);
	} catch (ParseException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	}

4)当我们修改完成后,剩下来的一个就是修改NutchDocumentAnalyzer.java中的tokenStream()方法,修改如下:

public TokenStream tokenStream(String fieldName, Reader reader) {
    Analyzer analyzer;
    /*if ("anchor".equals(fieldName))
      analyzer = ANCHOR_ANALYZER;
    else
      analyzer = CONTENT_ANALYZER;*/
    analyzer = new IKAnalyzer();
    TokenStream tokenStream = analyzer.tokenStream(fieldName,reader);
    tokenStream.addAttribute(TypeAttribute.class);
    tokenStream.addAttribute(FlagsAttribute.class);
    tokenStream.addAttribute(PayloadAttribute.class);
    tokenStream.addAttribute(PositionIncrementAttribute.class);

    return tokenStream;
  }

这时是添加IKAnalyzer作为分词器,当然需要先把这个添加到lib目录下。

5)完成完上面的步骤,也许有些人就以为搞定了,但事情并没这么简单,也许当我们搜索的时候会突然报出一个什么没有该Field的错误,有点抱歉,这个错误不能重现了。

如果查询时报什么错误,我们可以试着在summary-basic插件的源码中修改如下:

添加修改getSummary方法:

if (highlight.contains(t.term())) {
            excerpt.addToken(t.term());
            if(offset < t.startOffset()){
	            excerpt.add(new Fragment(text.substring(offset, t.startOffset())));
	            excerpt.add(new Highlight(text.substring(t.startOffset(),t.endOffset())));
            }else{
            	excerpt.add(new Highlight(text.substring(offset,t.endOffset())));
            }
            offset = t.endOffset();
            endToken = Math.min(j + sumContext, tokens.length);
          }

  添加的为这段代码

 if(offset < t.startOffset()){
	            excerpt.add(new Fragment(text.substring(offset, t.startOffset())));
	            excerpt.add(new Highlight(text.substring(t.startOffset(),t.endOffset())));
            }else{
            	excerpt.add(new Highlight(text.substring(offset,t.endOffset())));
            }

  这是修改getSummary时会出现数组溢出的错误。

修改完代码之后,我们需要修改build.xml,在war标签的lib标签内添加<include name="IKAnalyzer3.2.5Stable.jar" />在生成的war包内添加IK的jar包。

当完成这一系列操作之后,我们就可以在nutch目录中用ant命令进行编译。编译会重新生成所有jar包和job包。可以在build目录下找到。

我们需要把最主要的nutch-X.jar和nutch-X.job拷贝到需要进行爬取和nutch目录下进行覆盖。(其中的X为nutch的版本)

接下来,我们就可以重新运行nutch crawl urls -dir crawl -depth 4 -threads 10 -topN 50 >&crawl.log,这样生成的索引就已经是经过中文分词的。

大家可以下这个文档来了解一下NUTCH的部署和运行命令

http://download.csdn.net/source/619615

  • 大小: 5.7 KB
0
0
分享到:
评论
2 楼 cxshun 2011-10-21  
可以啊,我修改后是可以正常分词的。你修改后有没有重新打包。并且重新编译生成job文件,那个job文件很关键。打包完成后需要重新爬取的。如果再不行你发一下你的步骤,我看看。
1 楼 kjj 2011-10-21  
请问你测试了你的nutch 能正常分词运行么!!!
我上次也是根据这个方式改的,发现爬行哦建立索引后搜索结果分词仍然是单字分词的!

相关推荐

    Nutch中文分词插件的编写与配置

    Nutch中文分词插件的编写与配置,由于Internet的迅猛发展,使得用户查找信息犹如大海捞针,而搜索引擎则能帮用户很好的解决这个问题。 Nutch是用java语言开发的,基于Lucene的完整的网络搜索引擎,并采用插件机制进行...

    基于Nutch中文分词的研究与实现

    作为舆情监测系统的一部分,本文的目标是基于Nutch,同时,结合目前最常用中文分词技术,根据不同的中文分词方法,实验并得出不同分词方法在性能以及使用环境上的优缺点,以此为舆情监测系统选择合适的中文分词方法...

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

    本实验的目标是利用开源工具Nutch和IKAnalyzer构建一个中文分词搜索引擎,旨在理解搜索引擎的基本工作流程,掌握网页爬取、分词处理以及搜索功能的实现。实验中,主要涉及的技术包括搜索引擎基础、Nutch的使用、...

    nutch的中文分词词库文件

    用于Nutch的中文分词,效果向单簧管得得好,强烈建议支持这种格式的数据,这是一个里程碑

    论文研究-基于Nutch的中文分词插件实现 .pdf

    基于Nutch的中文分词插件实现,张文龙,刘一伟,中文分词是中文垂直搜索引擎中的一个关键技术,分词的好坏直接影响提取文本的精确度。Nutch是一个开源的Web搜索引擎,它为英文用户�

    基于Java的搜索引擎Nutch中文搜索技术研究

    ### 基于Java的搜索引擎Nutch中文搜索技术研究 #### 摘要与背景介绍 随着互联网技术的发展,搜索引擎已成为人们获取信息的重要途径之一。Nutch作为一个优秀的基于Java的开源搜索引擎,其英文搜索功能非常强大,但在...

    nutch开发资料 搜索引擎

    Nutch支持多种中文分词工具,如HanLP、jieba和IK Analyzer等,这些工具能够将中文句子分割成有意义的词语,为后续的索引和查询提供基础。 4. **Nutch工作流程**:Nutch的工作流程主要包括URL发现(抓取种子URL并...

    中文分词工具word-1.0,Java实现的中文分词组件多种基于词典的分词算法

    word分词是一个Java实现的中文分词组件,提供了多种基于词典的分词算法,并利用ngram模型来消除歧义。 能准确识别英文、数字,以及日期、时间等数量词,能识别人名、地名、组织机构名等未登录词。 同时提供了Lucene...

    Nutch入门教程 高清 带书签

    5. **分词与索引**:使用Analyzer进行中文或英文等语言的分词,然后将分词结果建立倒排索引。 6. **存储**:Nutch使用HDFS(Hadoop分布式文件系统)存储抓取的数据和索引。 7. **检索**:通过Solr或Elasticsearch等...

    apache-nutch-2.3

    9. **多语言支持**:Nutch 不仅支持英语,还可以通过插件支持其他语言的抓取和索引,如中文、日文等。 10. **搜索接口**:Nutch 提供了一个简单的搜索接口,用户可以通过该接口查询索引库中的内容,实现基本的搜索...

    nutch的插件机制

    6. **Analyzer插件**:针对特定语言的文本分析器,如英文或中文分词器,提供文本预处理功能。 Nutch插件系统的优点包括: - **可扩展性**:通过简单的接口实现,开发者可以轻松地增加新功能,而无需修改Nutch的...

    Nutch_插件深入研究

    本部分将简要介绍Nutch插件的实际应用案例,包括中文分词插件、索引字段增强插件等。通过具体实例,读者可以更好地理解Nutch插件是如何在实际场景中发挥作用的,以及如何根据自身需求开发和集成插件。 #### 五、在...

    apache-nutch-1.5.1

    4. **分词与索引**:Nutch 集成了Lucene库,对提取的内容进行分词,并创建倒排索引。这使得搜索操作可以快速定位到包含特定关键词的文档。 5. **插件架构**:Nutch 具有强大的插件体系,用户可以根据需求定制各种...

    Nutch搜索引擎·Nutch浅入分析(第5期)

    其能够整合其他中文信息处理和信息检索技术,通过不断的迭代和更新,为用户提供更为高效和准确的搜索体验。在理解Nutch的基本原理和工作流程后,开发者可以更好地掌握其运行机制,进而利用Nutch进行更加深入的搜索...

Global site tag (gtag.js) - Google Analytics