Nutch1.2 添加IKAnalyzer中文分词

原版nutch中对中文的处理是按字划分,而不是按词划分,我们可以为其添加一些中文分词插件,例如IKAnalyzer。参看了网上很多教程,最后也没能成功,最后综合了几个教程的内容,最终成功。

首先作以下几点说明,以方便理解:

(1)目前,Nutch中文分词方式大致有两种方式:
一是修改源代码。这种方式是直接对Nutch分词处理类进行修改,调用已写好的一些分词组件进行分词。
二是编写分词插件。这种方式是按照Nutch定义的插件编写规则重新编写或者添加中文分词插件。
以上两种方式都是可取的。目前,由于开源社区的活跃,已经有很多种分词组件的出现,无论是修改源代码的方式还是编写分词插件的方式,都是依赖于这些分词组件的。如IK、JE、庖丁等。

(2)NutchAnalysis.jj文件用于搜索时;NutchDocumentAnalyzer.java 用于索引时。

(3)用到了javacc、ant两种工具。javacc用于编译NutchAnalysis.jj文件,该文件最好拷贝到其它目录编译,编译后再把生成的7个文件拷贝回原目录,如果在原目录下编译的话只会生成4个文件。

(4)build.xml文件是ant的配置文件

(5)ant、javacc工具的使用方法类似,解压后把bin目录的路径加到系统目录(path)中,重启计算机即可。详看:Ant、Javacc 等安装与使用

 

好了,下面是具体过程:

一、准备工作:

把IKAnalyzer3.2.8.jar文件拷入nutch/lib目录下

 

二、代码修改:

1. NutchAnalysis.jj

在nutch/src/java/org/apache/nutch/analysis目录

在该文件里找到 | <SIGRAM: <CJK> >,这代表按字划分,修改为 | <SIGRAM: (<CJK>)+ >

用javacc工具生成NutchAnalysis.jj的源代码,将生成的所有java源代码(7个文件)全部覆盖到 src/java/org/apache/nutch/analysis包下.

javacc的使用方法:cmd进入命令行,切换到NutchAnalysis.jj所在目录(最后把它拷贝到其它目录进行编译,如D盘),D:,输入命令

javacc NutchAnalysis.jj

就会生成7个文件了。

 

2. NutchAnalysis.java

在nutch/src/java/org/apache/nutch/analysis目录

(1)在import区域加入下面的代码(不确定需不需要这步)

import org.wltea.analyzer.lucene.IKTokenizer;
(2)在两个位置加入ParseException异常捕捉命令,否则ant时会提示。下面的代码已经添加

public static Query parseQuery(String queryString, Configuration conf) throws IOException,ParseException { return parseQuery(queryString, null, conf); }

public static Query parseQuery(String queryString, Analyzer analyzer, Configuration conf) throws IOException,ParseException { NutchAnalysis parser = new NutchAnalysis( queryString, (analyzer != null) ? analyzer : new NutchDocumentAnalyzer(conf)); parser.queryString = queryString; parser.queryFilters = new QueryFilters(conf); return parser.parse(conf); }

 

3. NutchDocumentAnalyzer.java

(1)引入IK包

import org.wltea.analyzer.lucene.IKAnalyzer; //tjt update
import org.apache.lucene.analysis.tokenattributes.*;

(2)修改public TokenStream tokenStream(String fieldName, Reader reader) {函数为:

public TokenStream tokenStream(String fieldName, Reader reader) { /* Analyzer analyzer; if ("anchor".equals(fieldName)) analyzer = ANCHOR_ANALYZER; else analyzer = CONTENT_ANALYZER; return analyzer.tokenStream(fieldName, reader); */ Analyzer analyzer = new org.wltea.analyzer.lucene.IKAnalyzer(); return analyzer.tokenStream(fieldName, reader); }

 

4. nutch/build.xml

(1)在 <target name="war" depends="jar,compile,generate-docs"></target>的<lib></lib>之间<include name="log4j-*.jar"/> 下(約200行),加入下面的命令使的编译war文件的时候加入je-analysis的jar文件,注意IKAnalyzer3.2.8.jar的版本号

<include name="IKAnalyzer3.2.8.jar"/>

(2)修改<targe tname="job" depends="compile">,改为<target name="job" depends="compile,war">这样编译后能自动在bulid文件夹下生成nutch-1.2.job,nutch-1.2.war,nutch-1.2.jar文件了。(注:不这样也可以,最后直接ant war, ant jar 就能生成nutch-1.2.war,nutch-1.2.jar)

 

5. ant

cmd进入命令行,切换到nutch所在目录,执行ant命令,就会开始ant工作。完成后会在nutch目录下生成build目录

 

6.文件替换

(1)将build/nutch-1.2.job替换nutch目录下文件

(2)将build/nutch-1.2.jar替换nutch目录下文件

(3)将build/nutch-1.2.war替换nutch目录下文件,这步不需要的

注:如果ant后没有在build目录下生成nutch-1.2.jar和nutch-1.2.war文件,则命令行执行命令 ant jar 和 ant war生成这两个文件

 

7. 重新爬行与建立索引

注意需要配置好环境(conf/nutch-site.xml,crawl-urlfilter.txt,urls目录等,详看环境配置 )

bin/nutch crawl urls -dir csdn -threads 4 -depth 2 -topN 30  爬行
bin/nutch org.apache.nutch.searcher.NutchBean csdn   检索

 

8.查看结果

用Luke查看索引,如果已变成词组,则索引成功;也可以直接用Nutch自带的NutchBean命令检索网页中含有的词组,如果有结果说明成功,如

bin/nutch org.apache.nutch.searcher.NutchBean '引擎' 

注:需要在conf/nutch-site.xml文件中如下配置,E:/nutch/csdn为搜索结果目录

<property>
<name>searcher.dir</name>
<value>E:/nutch/csdn</value>
<description></description>
</property>

 

9.Tomcat搜索

(1)将新生成的nutch-1.2.war拷贝到Tomcat 7.0/webapps目录,启动Tomcat服务后,会自动在该目录下生成一个nutch文件夹。

(2)将新生成的nutch-1.2.jar文件和分词包(IKAnalyzer3.2.8.jar)拷贝到tomcat中WEB-INF/lib下面

(3)http://localhost:8080/nutch 搜索测试

注意:Tomcat/webapps/nutch/WEB-INF/classes/nutch-site.xml 配置

 

其它说明:

(1)关于NutchDocumentAnalyzer的修改,网上有分成多步骤的,一开始我也没搞清楚哪个对,仔细看了下,发现是一样的,只是把变量定义等单独成一行命令而已。http://blog.csdn.net/laigood12345/archive/2010/12/12/6071046.aspx

 (2)上面的步骤是直接修改源码方式的,其它的还有插件方式的,如例子http://blog.csdn.net/oprah_7/archive/2011/03/09/6234296.aspx

 

以下参考自:   

讓 Nutch 支援中文分詞 方法教學 Nutch 1.0 + IK-Analyzer 3.1.6 中文分詞庫http://trac.nchc.org.tw/cloud/wiki/waue/2010/0715

已不能访问,可以到我的百度文库查看

 

選項:加入字典檔

    將 nutch-*.job 的檔案,用zip 工具解開,並將以下兩個檔案放入nutch-*.job 中即可

    IKAnalyzer.cfg.xml

    <properties> 
      <comment>IK Analyzer</comment>
      <entry key="ext_dict">/mydic.dic</entry>
    </properties>

    mydic.doc

    國家高速
    國家高速網路
    國家高速網路與計算中心

 

网上略显麻烦的或错误的资讯:

(1)将build/classes打包成nutch-1.2.jar

cd $nutch-1.0/build/classes
jar cvf nutch-1.0-ika.jar .

或者(jar cvf e:/nutch/build/classes)

麻烦,可以直接用ant jar命令,或者按第4步第(2)小步的操作进行

(2)即使用原始的nutch所crawl下來的資料,將 重編後的nutch-1.0.jar nutch-1.0.job IKAnalyzer3.1.6 正確放到你原本的nutch搜尋網頁中,重新啟動tomcat後,也可直接享用有分詞的結果 (不正確)

(3)將 IKAnalyzer3.1.6GA.jar 的 /org/wltea/analyzer/dic/ 資料夾內 ,放入你要得字典檔,可以參考同資料夾內的 main.dic (不正確,沒用)

 

参考资料:

1. 讓 Nutch 支援中文分詞 方法教學 Nutch 1.0 + IK-Analyzer 3.1.6 中文分詞庫

http://trac.nchc.org.tw/cloud/wiki/waue/2010/0715

 

2.Nutch1.2增加IKAnalyzer中文分词

http://blog.csdn.net/laigood12345/archive/2010/12/12/6071046.aspx

 

3. Nutch中文分词 (插件方式JE分词)

http://blog.csdn.net/oprah_7/archive/2011/03/09/6234296.aspx

 

4. Nutch 分词 中文分词 paoding 疱丁 (插件方式)

http://blog.csdn.net/mutou12456/archive/2010/04/01/5439935.aspx

 

5. 为Nutch 1.0添加JE中文分词 (修改源码)

http://yjiezhao.blog.163.com/blog/static/1152322392009101983837179/

 

Nutch中文分词IK-Analyzer搜索修改问题

在创建index 索引的时候已经把 分词加进去了

Java code
    
    
    
    
/** * 往创建的初始化索引中添加内容,StandarAnalyzer表明用lunece自带的标准分词机制。 * false标示不覆盖原来该目录的索引 */ IndexWriter indexWrite = new IndexWriter(indexDir, new StandardAnalyzer(), true );



而在搜索时,在创建 query 时也要把这个分词加进去,而且这个分词必须要和你创建索引时用的一样才可以

Java code
    
    
    
    
String[] fields = { " title " , " body " }; /* 下面这个表示要同时搜索这两个域,而且只要一个域里面有满足我们搜索的内容就行 */ BooleanClause.Occur[] clauses = { BooleanClause.Occur.SHOULD, BooleanClause.Occur.SHOULD }; /** * MultiFieldQueryParser表示多个域解析 */ Query query = MultiFieldQueryParser.parse(searchString, fields, clauses, new StandardAnalyzer());

你可能感兴趣的:(tomcat,ant,String,jar,query,import)