这几天一直在搞nutch中文分词,也转载了好几篇文章,但是都写的比较简单而且有错误,估计原作者肯定也是实现了,今天终于搞定了,介绍一下我实现的方法。
1 nutch有两种方式可以实现自定义的分词:
1>,直接修改源代码,对默认的分词器代码进行修改使其使用自定义中文分词程序。
2> ,插件机制,可以在不修改源代码基础上,以插件形式集成自定义中文分词功能。这中法可以参考nutch已经集成的德语和法语分词插件,只需作相应修改便可以完成。
2 我主要介绍一下直接修改源代码方式
关于修改原理可以参考前面的几篇文章,这里不再详述,我直接介绍添加JE分词方法
工具:eclipse javacc ant
2.1 首先下载JE分词包和nutch源代码,解压,导入eclisep工程,同时将JE分词包添加到Nutch的lib目录下,并导入到工程中,在eclisep下调试通过,注意需要2个包,
下载地址:
将下载的中文分词包放到lib目录下,改名为analysis-zh.jar(当然,你也可以不用改)。找到下面文件
src\java\org\apache\nutch\analysis\NutchDocumentAnalyzer.java
加入信息的分析类,你需要将该类导入。使用如下语句。
import jeasy.analysis.*;
修改tokenStream方法如下
public TokenStream tokenStream(String fieldName, Reader reader) {
Analyzer analyzer;
analyzer= new MMAnalyzer();
return analyzer.tokenStream(fieldName, reader);
}
2.3 对查询所用分析部分的修改
src\java\org\apache\nutch\analysis\中的NutchAnalysis.jj文件
将 <SIGRAM: <CJK> >
改为:| <SIGRAM: (<CJK>)+ >
使用javacc工具将NutchAnalysis.jj生成java文件,共会生成7个java文件,将他们拷贝到下面的文件夹中替 换原有文件。
同时需要修改ParseException.java,把Exception改为IOException
2.4 重新编译工程文件
修改nutch根目录下的文件build.xml文件
在build.xml添加一条指令(在第195行的下面加入一行),使的编译war文件的时候加入je-analysis的jar文件。 build.xml
命令:进入nutch根目录执行 ant 会在build目录下生成nutch-1.0.job文件
然后执行:ant war 会在build目录下生成nutch-1.0.war web发布包
最后执行: ant jar
会在buil目录下生成nutch-1.0.jar包
将这三个包拷贝出来替换原来的相应的包,或者重新解压一个nutch包拷贝到nutch目录下替换相应的包(注意把那个je-analysis-1.*.jar包要拷贝到lib目录下)
至此加入je分词完成
3 实验验证
配置nutch,执行crawl命令抓取网页,然后 部署刚才产生的nutch-1.0.war包到web服务器下,注意要配置nutch-site.xml文件
打开浏览器输入:http://localhost:8080/nutch-1.0
查查看,分词效果不错~~!!!
下一步研究重点:利用hadoop实现分布式抓取和分布式检索同时改进分词性能
1 nutch有两种方式可以实现自定义的分词:
1>,直接修改源代码,对默认的分词器代码进行修改使其使用自定义中文分词程序。
2> ,插件机制,可以在不修改源代码基础上,以插件形式集成自定义中文分词功能。这中法可以参考nutch已经集成的德语和法语分词插件,只需作相应修改便可以完成。
2 我主要介绍一下直接修改源代码方式
关于修改原理可以参考前面的几篇文章,这里不再详述,我直接介绍添加JE分词方法
工具:eclipse
2.1 首先下载JE分词包和nutch源代码,解压,导入eclisep工程,同时将JE分词包添加到Nutch的lib目录下,并导入到工程中,在eclisep下调试通过,注意需要2个包,
下载地址:
http://nutch.cvs.sourceforge.net/nutch/nutch/src/plugin/parse-mp3/lib/
http://nutch.cvs.sourceforge.net/nutch/nutch/src/plugin/parse-rtf/lib/
这部分可以参考nutch wiki站点:http://wiki.apache.org/nutch/RunNutchInEclipse1.0
2.2 对建立索引所用分词工具的修改将下载的中文分词包放到lib目录下,改名为analysis-zh.jar(当然,你也可以不用改)。找到下面文件
src\java\org\apache\nutch\analysis\NutchDocumentAnalyzer.java
加入信息的分析类,你需要将该类导入。使用如下语句。
import jeasy.analysis.*;
修改tokenStream方法如下
public TokenStream tokenStream(String fieldName, Reader reader) {
Analyzer analyzer;
analyzer= new MMAnalyzer();
return analyzer.tokenStream(fieldName, reader);
}
2.3 对查询所用分析部分的修改
src\java\org\apache\nutch\analysis\中的NutchAnalysis.jj文件
将 <SIGRAM: <CJK> >
改为:| <SIGRAM: (<CJK>)+ >
使用javacc工具将NutchAnalysis.jj生成java文件,共会生成7个java文件,将他们拷贝到下面的文件夹中替 换原有文件。
同时需要修改ParseException.java,把Exception改为IOException
2.4 重新编译工程文件
修改nutch根目录下的文件build.xml文件
在build.xml添加一条指令(在第195行的下面加入一行),使的编译war文件的时候加入je-analysis的jar文件。 build.xml
<include name="lucene*.jar"/>
<include name="taglibs-*.jar"/>
<include name="hadoop-*.jar"/>
<include name="dom4j-*.jar"/>
<include name="xerces-*.jar"/>
<include name="tika-*.jar"/>
<include name="apache-solr-*.jar"/>
<include name="commons-httpclient-*.jar"/>
<include name="commons-codec-*.jar"/>
<include name="commons-collections-*.jar"/>
<include name="commons-beanutils-*.jar"/>
<include name="commons-cli-*.jar"/>
<include name="commons-lang-*.jar"/>
<include name="commons-logging-*.jar"/>
<include name="log4j-*.jar"/>
<include name="je-analysis-*.jar"/> <!-- add this line -->
</lib>
然后重新用ant编译
<include name="taglibs-*.jar"/>
<include name="hadoop-*.jar"/>
<include name="dom4j-*.jar"/>
<include name="xerces-*.jar"/>
<include name="tika-*.jar"/>
<include name="apache-solr-*.jar"/>
<include name="commons-httpclient-*.jar"/>
<include name="commons-codec-*.jar"/>
<include name="commons-collections-*.jar"/>
<include name="commons-beanutils-*.jar"/>
<include name="commons-cli-*.jar"/>
<include name="commons-lang-*.jar"/>
<include name="commons-logging-*.jar"/>
<include name="log4j-*.jar"/>
<include name="je-analysis-*.jar"/> <!-- add this line -->
</lib>
命令:进入nutch根目录执行 ant
然后执行:ant war
最后执行:
将这三个包拷贝出来替换原来的相应的包,或者重新解压一个nutch包拷贝到nutch目录下替换相应的包(注意把那个je-analysis-1.*.jar包要拷贝到lib目录下)
至此加入je分词完成
3 实验验证
配置nutch,执行crawl命令抓取网页,然后 部署刚才产生的nutch-1.0.war包到web服务器下,注意要配置nutch-site.xml文件
打开浏览器输入:http://localhost:8080/nutch-1.0
查查看,分词效果不错~~!!!
下一步研究重点:利用hadoop实现分布式抓取和分布式检索同时改进分词性能