为Nutch 1.0添加JE中文分词

来源:互联网 发布:网络诈骗之乡 编辑:程序博客网 时间:2024/04/29 10:16

先下载Nutch 1.0的源文件:

svn co http://svn.apache.org/repos/asf/lucene/nutch/tags/release-1.0 ./nutch-1.0

更改查询语法解析部分:

改变tokenize的方式(原来为中文单字识别)

modify “src/java/org/apache/nutch/analysis/NutchAnalysis.jj”line 130:

| <SIGRAM: <CJK> >

change to:

| <SIGRAM: (<CJK>)+ >

run “javacc”

cd nutch-1.0/src/java/org/apache/nutch/analysis

/usr/local/javacc-3.2/bin/javacc NutchAnalysis.jj

3 files will be regenerated:

NutchAnalysis.java

NutchAnalysisTokenManager.java

NutchAnalysisConstants.java

中文分析部分(查询和索引):

将analyzer更换为JE中文分析器

a). copy “je-analysis-1.5.3.jar” to lib/b). modify NutchDocumentAnalyzer.java

$ svn diff src/java/org/apache/nutch/analysis/NutchDocumentAnalyzer.java

Index: src/java/org/apache/nutch/analysis/NutchDocumentAnalyzer.java

===================================================================

--- src/java/org/apache/nutch/analysis/NutchDocumentAnalyzer.java       (revision 764668)

+++ src/java/org/apache/nutch/analysis/NutchDocumentAnalyzer.java       (working copy)

@@ -27,6 +27,8 @@

 import org.apache.lucene.analysis.Token;

 import org.apache.hadoop.conf.Configuration;

+import jeasy.analysis.*;

+

 /**

  * The analyzer used for Nutch documents. Uses the JavaCC-defined lexical

  * analyzer {@link NutchDocumentTokenizer}, with no stop list. This keeps it

@@ -65,8 +67,14 @@

     /** Constructs a {@link NutchDocumentTokenizer}. */

     public TokenStream tokenStream(String field, Reader reader) {

-      return this.commonGrams.getFilter(new NutchDocumentTokenizer(reader),

-          field);

+      if ("content".equals(field) || "title".equals(field) || "DEFAULT".equals(field)) {

+        MMAnalyzer analyzer=new MMAnalyzer();

+        return analyzer.tokenStream(field, reader);

+      }

+      else {

+        return this.commonGrams.getFilter(new NutchDocumentTokenizer(reader),

+            field);

+      }

     }

   }

重新编译Nutch:

在build.xml添加一条指令(在第195行的下面加入一行),使的编译war文件的时候加入je-analysis的jar文件。build.xml

      <lib dir="${lib.dir}">

        <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>

compile:

cd nutch-1.0

export ANT_HOME=/usr/local/apache-ant-1.7.1

/usr/local/apache-ant-1.7.1/bin/ant

/usr/local/apache-ant-1.7.1/bin/ant war

使用新生成的含中文分词功能的模块:只用到刚才编译生成的下面三个文件,替换Nutch 1.0的tarball解压后的对应文件

build/nutch-1.0.jar

build/nutch-1.0.job

build/nutch-1.0.war

别忘了把“je-analysis-1.5.3.jar” 拷贝到解压后的Nutch 1.0 tarball中的lib/

That’s it.

=============================

搞了好几天的nutch中文分词,今天终于搞定了,网上的文章有两种方式,其中一种是直接修改源码的方式,另外一种是使用插件的方式。应该说这些资料的思路都是正确的,作者想必也一定弄出来过。不过,过程略显简单,对后来者的学习帮助不是很大。

下面就将中文分词的实现方法予以介绍,请注意,本文的基础是你的电脑上已经成功配置好nutch并实现了中文的单字分词。这里只是实现更为合理的非单字分词。

你需要用到的工具有:javacc 、ant、JE分词包。

1.对建立索引所用分词工具的修改

将下载的中文分词包放到lib目录下,改名为analysis-zh.jar(当然,你也可以不用改)。找到下面文件

src/java/org/apache/nutch/analysis/NutchDocumentAnalyzer.java

修改tokenStream方法如下

public TokenStream tokenStream(String fieldName, Reader reader) {
Analyzer analyzer;
analyzer= new MMAnalyzer();
return analyzer.tokenStream(fieldName, reader);
}

注意:由于加入信息的分析类,你需要将该类导入。使用如下语句。

import jeasy.analysis.*;

2.对查询所用分析部分的修改

src/java/org/apache/nutch/analysis/中的NutchAnalysis.jj文件

将 <SIGRAM: <CJK> >

改为:| <SIGRAM: (<CJK>)+ >

使用javacc工具将NutchAnalysis.jj生成java文件,共会生成7个java文件,将他们拷贝到下面的文件夹中替 换原有文件。

src/java/org/apache/nutch/analysis

如何安装与使用javacc?

下载javacc并解压,然后将javacc的主目录添加到环境变量下。进入命令行,输入javacc,如果不出现不能识别该命令之类的说法,证明安装成功。

进入NutchAnalysis.jj文件所在的目录,输入javacc NutchAnalysis.jj命令就会生成7个java文件了。

3.重新编译工程文件

这里你需要用到ant工具了,那么ant工具怎么安装呢?

ant的安装与配置与 javacc类似,下载后解压,然后在path环境变量中加如指向ant下的bin文件夹的路径。

使用:从命令行进入nutch目录中,输入ant命令,它会自动根据当前目录下的build.xml进行重建。重建完毕后会在改目录下产生一个build文件夹。

4.重建后的文件替换

一、将nutch-0.x.x.job文件拷贝出来替换nutch目录下的同名文件。

二、将/build/classes/org/apache/nutch/analysis目录下的所有文件拷贝替换nutch-0.x.x.jar中org/apache/nutch/analysis目录下的文件。

三、将nutch-0.x.x.jar文件和你的分词包(我的是analysis-zh.jar)拷贝到tomcat中WEB-INF/lib下面。

5.重新爬行与建立索引,重新启动tomcat即可。

原创粉丝点击