改造nutch,将原来的中文分词程序改成imdict-chinese-analyzer,这个是根据中科院的c版分词程序而来的纯java版。
我下的是imdict-chinese-analyzer-java5.zip
nutch1.0
- 下载来的imdict-chinese-analyzer-java5.zip里面只是一个eclipse工程,我们要利用这个工程生成一个jar来用,或者也可以直接放到nutch的源代码项目中。这里注意的是如果要编译imdict-chinese-analyzer-java5.zip需要在项目中加入lucene-core-2.4.0.jar 和junit-4.1.jar。
- 将jar放入nutch的类路径。
- 修改org.apache.nutch.analysis下NutchAnalysis.jj文件。
将
| <SIGRAM: <CJK> >
改成
| <SIGRAM: (<CJK>)+ >
然后用javacc编译NutchAnalysis.jj文件,编译出7个java源文件。 - 将这7个文件放到nutch的源工程中,修改org.apache.nutch.analysis.ParseException.java。
原来是
public class ParseException extends Exception
改成public class ParseException extends IOException
因为nutch原来的这个源文件就是这么写的,用jj文件编译出来的源文件就不对,不改的话会提示ParseException 未被捕获。
- 确保这7个文件放入工程后还能都编译过去。
- 修改org.apache.nutch.analysis.NutchDocumentAnalyzer.java
将源文件最后的那个函数修改为下面
就是使用了新的分词程序。
/** Returns a new token stream for text from the named field. */ public TokenStream tokenStream(String fieldName, Reader reader) { Analyzer analyzer; /* if ("anchor".equals(fieldName)) analyzer = ANCHOR_ANALYZER; else analyzer = CONTENT_ANALYZER; */ analyzer = new org.apache.lucene.analysis.cn.SmartChineseAnalyzer(true); // return analyzer.tokenStream(fieldName, reader); }
- 运行程序,本人亲自试验可以通过。