`
softkid
  • 浏览: 100854 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

Nutch使用入门(四)——添加中文分词

    博客分类:
  • java
阅读更多
/** 
 *本人亦初学者,如有不正确的地方请多多指教。谢谢! 
javacc NutchAnalysis.jj  *部分内容参考自互联网,如有冒犯,请见谅。
 **/ 

 基本信息

 本文介绍了如果为Nutch添加中文分词,详细描述了添加中文分词的步骤和应该注意的问题。

 

 准备工作

  1.Nutch,到http://nutch.apache.org/ 下载nutch-1.0.tar.gz,下载后直接解压缩即可。

  2.javacc,到https://javacc.dev.java.net/ 下载javacc-5.0.zip,下载后同样解压缩,将“javacc路径/bin”添加到环境变量path,在windows命令窗口中输入javacc,未提示错误表示javacc安装成功。

  3.ant,到http://ant.apache.org/ 下载ant,下载后解压缩,将"ant路径/bin"添加到环境变量path,在windows命令窗口输入ant,未提示错误表示ant安装成功。

  4.IKAnalyzer,到http://code.google.com/p/ik-analyzer/downloads/list 下载IKAnalyzer,本例使用版本是3.1.1GA。

 

  为Nutch添加中文分词

  1.让Nutch支持中文分词。

    在Nutch目录下,找到src\java\org\apache\nutch\analysis\NutchAnalysis.jj文件,复制到其他的一个目录下,最好该目录下没有java文件,修改NutchAnalysis.jj文件,修改如下:

line 130:
| <SIGRAM: <CJK> >


change to:
| <SIGRAM: (<CJK>)+ > 

将windows命令环境切换到改目录下,执行如下命令:

javacc NutchAnalysis.jj

 生成了7个java文件,其中NutchAnalysis.java 58行抛出异常,捕获异常即可。将这7个java文件替换掉src\java\org\apache\nutch\analysis目录下相同名称的文件。

 

  2.添加IKAnalyzer。

    将下载好的IKAnalyzer3.1.1Stable.jar复制到Nutch目录下的lib文件夹中,修改src\java\org\apache\nutch\analysis目录下NutchDocumentAnalyzer.java文件,添加import语句,修改tokenStream方法。代码如下:

import org.wltea.analyzer.lucene.IKAnalyzer;
 
 public TokenStream tokenStream(String fieldName, Reader reader) {
    Analyzer analyzer;
    analyzer = new IKAnalyzer();
    return analyzer.tokenStream(fieldName, reader);
  }

 

  3.重新编译Nutch。

   修改Nutch目录下build.xml文件,在195行后加入如下代码:

<include name="IKAnalyzer3.1.1Stable.jar"/>

    将命令环境切换到Nutch目录下,执行ant命令。出现如下错误:

Buildfile: build.xml

init:

BUILD FAILED
D:\nutch\nutch-1.0\build.xml:62: Specify at least one source--a file or resource
 collection.

Total time: 0 seconds

    解决办法有两个:

    (1). 从SVN下载缺失的 config/*.template文件。
    (2).修改 build.xml,去掉62-64行,让它不再需要template文件。

 

   将编译生成的build文件夹下的nutch-1.0.job文件替换掉Nutch目录下的nutch-1.0.job文件。

   将编译生成的build\classes下文件打包成nutch-1.0.jar,替换掉Nutch目录下的nutch-1.0.jar文件。打包命令如下:

jar cvf nutch-1.0.jar org

    将nutch-1.0.war包中的nutch-1.0.jar替换为刚刚生成的nutch-1.0.jar,并且加入IKAnalyzer3.1.1Stable.jar.

 

    至此,全部工作都已经完成。接下来爬行和搜索工作可以参考我的其他两篇入门文章:

   Nutch 使用入门(一)——准备工作及Intranet抓取    

    Nutch 使用入门(二)——互联网抓取

 

分享到:
评论
3 楼 commanderhyk 2010-07-15  
刚才看了看nutch生成的代码,好像是缺失了一些属性。我试着补上
Analyzer 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;

经过试验通过。可以查出数据了,但不知到原理为什么这么做。
2 楼 commanderhyk 2010-07-15  
最近nutch发布了1.1,在学习中。基本的配置例子都跑通了,正在学习更换切词器,按照您上述的方式都成功的部署了,但是最后查询时候抛出了异常
java.lang.IllegalArgumentException: This AttributeSource does not have the attribute 'org.apache.lucene.analysis.tokenattributes.TermAttribute'.
我开始用 3.2.3后来改成3.1.1都不行。目前不知道如何解决,希望能帮我看看这个问题,如何解决。谢谢了
javaeye上有类似的错误说是能解决,但是没有给出解决办法,以下是连接
http://www.iteye.com/topic/476897?page=2
1 楼 softkid 2010-05-31  
请注意中文分词的版本,我自己就只是用来IKAnalyzer3.1.1Stable,网友试了3.2也行。还有,他试了最新的,但是不行。

相关推荐

Global site tag (gtag.js) - Google Analytics