`
banditjava
  • 浏览: 158243 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Nutch1.0开源搜索引擎与Paoding在eclipse中用plugin方式集成(终极篇)

阅读更多

     本文主要描述的是如何将paoding分词用plugin方式集成到 nutch1.0中去,在集成之前首先要在eclipse中把nutch1.0编译通过。然后,写一个中文分词程序,配置好插件配置文件,重新打包编译。如果有linux环境,就可以直接进行编译,如果没有linux环境,还需要下载并配置cygwin等模拟linux环境。

 

     一.环境说明

         工具:myeclipse6.5 ,jdk1.6.0_14,tomcat-6.0.20

         软件:nutch1.0

         相关软件请自行google,下载安装

 

     二.配置eclipse

        新建nutch工程后,配译会报错

        1)下载缺失的包
    从http://nutch.cvs.sourceforge.net/nutch/nutch/src/plugin/parse-mp3/lib /,http://nutch.cvs.sourceforge.net/nutch/nutch/src/plugin/parse-rtf/lib /下载MP3跟rtf的jar文件,分别拷贝到src/plugin/parse-mp3/lib 和 src/plugin/parse-rtf/lib/文件夹下

 

         2)修改了@override错误
    org.apache.nutch.indexer.solr.SolrDeleteDuplicates;
    org.apache.nutch.util.domain.DomainStatistics;
        //@override错误   将override注释掉

 

        3)licensing issues修复
    到这一步,一般的工程都会有两个错误,nutch的official 1.0 release版本中,这两个问题因为licensing issues没有修复。接下来的就是最关键的部分了。
    修改src\plugin\parse-rtf\src\java\org\apache\nutch\parse\rtf下RTFParseFactory.java
    添加import org.apache.nutch.parse.ParseResult;
    将public Parse getParse(Content content) {
    改为public ParseResult getParse(Content content) {
    将return new ParseStatus(ParseStatus.FAILED,
                       ParseStatus.FAILED_EXCEPTION,
                       e.toString()).getEmptyParse(conf);
    改为return new ParseStatus(ParseStatus.FAILED,
            ParseStatus.FAILED_EXCEPTION,
              e.toString()).getEmptyParseResult(content.getUrl(), getConf());
    将return new ParseImpl(text,
                 new ParseData(ParseStatus.STATUS_SUCCESS,
                           title,
                           OutlinkExtractor.getOutlinks(text, this.conf),
                           content.getMetadata(),
                           metadata));
    改为return ParseResult.createParseResult(content.getUrl(),
                     new ParseImpl(text,
                         new ParseData(ParseStatus.STATUS_SUCCESS,
                             title,
                             OutlinkExtractor.getOutlinks(text, this.conf),
                             content.getMetadata(),
                             metadata)));

    修改src\plugin\parse-rtf\src\test\org\apache\nutch\parse\rtf下的TestRTFParser.java
    将parse = new ParseUtil(conf).parseByExtensionId("parse-rtf", content);
    改为parse = new ParseUtil(conf).parseByExtensionId("parse-rtf", content).get(urlString);
    到这一步,eclipse上面的工程就会没有错误了

 

 

         三.配置paoding插件

         1)写中文分词程序,继承NutchAnalyzer

/**
* Paoding chinese analyzer
*/
package org.apache.nutch.analysis.zh;
// JDK imports
import java.io.Reader;
// Lucene imports
import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.analysis.TokenStream;
// Nutch imports
import org.apache.nutch.analysis.NutchAnalyzer;
/**
* A simple Chinese Analyzer that wraps the Lucene one.
* @author kevin tu
*/
public class ChineseAnalyzer extends NutchAnalyzer {   
    private final static Analyzer ANALYZER =
            new net.paoding.analysis.analyzer.PaodingAnalyzer();   
    /** Creates a new instance of ChineseAnalyzer */
    public ChineseAnalyzer() { }
    public TokenStream tokenStream(String fieldName, Reader reader) {
        return ANALYZER.tokenStream(fieldName, reader);
    }

}

 

      2)配置插件目录在src/plugin下面,analysis-zh,lib-paoding-analyzers

      把上面写好的ChineseAnalyzer放到analysis-zh/src下面,

      修改plugin.xml文件

<plugin
   id="analysis-zh"
   name="Chinese Analysis Plug-in"
   version="1.0.0"
   provider-name="net.paoding.analysis">
   <runtime>
      <library name="analysis-zh.jar">
         <export name="*"/>
      </library>
   </runtime>
   <requires>
      <import plugin="nutch-extensionpoints"/>
      <import plugin="lib-paoding-analyzers"/>
   </requires>
   <extension id="org.apache.nutch.analysis.zh"
              name="Chinese Analyzer"
              point="org.apache.nutch.analysis.NutchAnalyzer">
      <implementation id="ChineseAnalyzer"
                      class="org.apache.nutch.analysis.zh.ChineseAnalyzer">
        <parameter name="lang" value="zh"/>
      </implementation>
   </extension>
</plugin>

 

         修改build.xml

         <project name="analysis-zh" default="jar-core">
  <import file="../build-plugin.xml"/>
  <!-- Build compilation dependencies -->
  <target name="deps-jar">
    <ant target="jar" inheritall="false" dir="../lib-paoding-analyzers"/>
  </target>
  <!-- Add compilation dependencies to classpath -->
  <path id="plugin.deps">
    <fileset dir="${nutch.root}/build">
      <include name="**/lib-paoding-analyzers/*.jar" />
    </fileset>
  </path>
</project>

       lib-paoding-analyzers的配置同上,不再赘述。

 

 

      3)配置src\plugin的build.xml
   <target name="deploy">
<ant dir="analysis-zh" target="deploy"/>
<ant dir="lib-paoding-analyzers" target="deploy"/>
...
   </target>

   <target name="clean">
<ant dir="analysis-zh" target="clean"/>
<ant dir="lib-paoding-analyzers" target="clean"/>
...
   </target>

4)修改nutch-default.xml,加入|analysis-(zh)|  加载paoding的jar包,和自己写的analysis-(zh) jar包
<property>
  <name>plugin.includes</name>
  <value>protocol-http|urlfilter-regex|parse-(text|html|js)|analysis-(zh)|index-basic|query-(basic|site|url)|summary-basic|scoring-opic|urlnormalizer-(pass|regex|basic)</value>
  <description>
  </description>
</property>

 

 

          5)修改nutch工程的build.xml,targe war
      <lib dir="${build.dir}/analysis-zh">
              <include name="analysis-zh.jar"/>
      </lib>  
      <lib dir="${build.dir}/lib-paoding-analyzers">
              <include name="paoding-analysis.jar"/>
      </lib>

 

      四.重新编译

       ant package

     注意:nutch1.0 需要ant1.7.1才行,主要是touch任务需要ant 1.7.1支持

 

      五.配置tomcat,修改webapps/cse/WEB-INF/classes/nutch-site.xml
<configuration>
  <property>
    <name>fs.default.name</name>
    <value>local</value>
  </property>

  <property><!--指定本地的index目录-->
    <name>searcher.dir</name>
    <value>/nutch/local/crawled</value>
  </property>
<property> 
</property>
</configuration>

 

     六.配置运行环境

     export PAODING_DIC_HOME=/nutch/dic

 

    七.运行测试

     http://localhost:8080/

 

2009-09-14 10:26:49,312 INFO  PluginRepository - Registered Plugins:
2009-09-14 10:26:49,312 INFO  PluginRepository -        the nutch core extension points (nutch-extensionpoints)
2009-09-14 10:26:49,312 INFO  PluginRepository -        Basic Query Filter (query-basic)
2009-09-14 10:26:49,312 INFO  PluginRepository -        Basic URL Normalizer (urlnormalizer-basic)
2009-09-14 10:26:49,312 INFO  PluginRepository -        Paoding Analysers (lib-paoding-analyzers)
2009-09-14 10:26:49,328 INFO  PluginRepository -        Html Parse Plug-in (parse-html)
2009-09-14 10:26:49,328 INFO  PluginRepository -        Basic Indexing Filter (index-basic)
2009-09-14 10:26:49,328 INFO  PluginRepository -        Basic Summarizer Plug-in (summary-basic)
2009-09-14 10:26:49,328 INFO  PluginRepository -        Site Query Filter (query-site)
2009-09-14 10:26:49,328 INFO  PluginRepository -        HTTP Framework (lib-http)
2009-09-14 10:26:49,328 INFO  PluginRepository -        Text Parse Plug-in (parse-text)
2009-09-14 10:26:49,328 INFO  PluginRepository -        Pass-through URL Normalizer (urlnormalizer-pass)
2009-09-14 10:26:49,328 INFO  PluginRepository -        Regex URL Filter (urlfilter-regex)
2009-09-14 10:26:49,328 INFO  PluginRepository -        Http Protocol Plug-in (protocol-http)
2009-09-14 10:26:49,328 INFO  PluginRepository -        XML Response Writer Plug-in (response-xml)
2009-09-14 10:26:49,328 INFO  PluginRepository -        Regex URL Normalizer (urlnormalizer-regex)
2009-09-14 10:26:49,328 INFO  PluginRepository -        OPIC Scoring Plug-in (scoring-opic)
2009-09-14 10:26:49,343 INFO  PluginRepository -        CyberNeko HTML Parser (lib-nekohtml)
2009-09-14 10:26:49,343 INFO  PluginRepository -        Anchor Indexing Filter (index-anchor)
2009-09-14 10:26:49,343 INFO  PluginRepository -        JavaScript Parser (parse-js)
2009-09-14 10:26:49,343 INFO  PluginRepository -        URL Query Filter (query-url)
2009-09-14 10:26:49,343 INFO  PluginRepository -        Chinese Analysis Plug-in (analysis-zh)
2009-09-14 10:26:49,343 INFO  PluginRepository -        Regex URL Filter Framework (lib-regex-filter)
2009-09-14 10:26:49,343 INFO  PluginRepository -        JSON Response Writer Plug-in (response-json)
2009-09-14 10:26:49,343 INFO  PluginRepository - Registered Extension-Points:
2009-09-14 10:26:49,359 INFO  PluginRepository -        Nutch Summarizer (org.apache.nutch.searcher.Summarizer)

 

其中hinese Analysis Plug-in (analysis-zh)就是配置好的中文分词插件啦。

 

好,大功告成,用paoding爽一爽吧,分词效果“刚刚的”。

 

 

 

 

分享到:
评论
8 楼 kjj 2010-07-31  
谢*谢*楼主了,我用1.1按照你的顺利配置好分词系统!!!
7 楼 wzjin 2010-06-01  
二.配置eclipse

        新建nutch工程后,配译会报错

        1)下载缺失的包
    从http://nutch.cvs.sourceforge.net/nutch/nutch/src/plugin/parse-mp3/lib /,http://nutch.cvs.sourceforge.net/nutch/nutch/src/plugin/parse-rtf/lib /下载MP3跟rtf的jar文件,分别拷贝到src/plugin/parse-mp3/lib 和 src/plugin/parse-rtf/lib/文件夹下

wzjin 写道
wzjin 写道
汗,我怎么老配不好,能不能把你配好的工程打包发给我一下。谢谢!

我邮箱wzjin@163.com,谢谢!

不用发了,还是配好了可以实现抓取和分词,谢谢!希望以后能共同探讨。
6 楼 wzjin 2010-05-28  
wzjin 写道
汗,我怎么老配不好,能不能把你配好的工程打包发给我一下。谢谢!

我邮箱wzjin@163.com,谢谢!
5 楼 wzjin 2010-05-28  
汗,我怎么老配不好,能不能把你配好的工程打包发给我一下。谢谢!
4 楼 biaowen 2009-10-23  
之前也在研究,不过现在放了一段时间,补习课堂知识了,哈。
当时我把网站内容爬取过来,分词时候还是默认加载英文分词了,得修改一下源码,不过你没动过源码,哈。可能是我少配置哪了。。
3 楼 banditjava 2009-10-10  
wzjin 写道
lib-paoding-analyzers的配置同上,不再赘述。
-----------------------------------------------
这个配置还是讲讲吧,不是谁都像你一样搞这个好多年的。
也谢谢你共享这样好的文章。

plugin.xml

<plugin
   id="lib-paoding-analyzers"
   name="Paoding Analysers"
   version="2.0.4"
   provider-name="net.paoding.analysis">

   <runtime>
     <library name="paoding-analysis.jar">
        <export name="*"/>
     </library>
   </runtime>

</plugin>

build.xml

<project name="lib-paoding-analyzers" default="jar">

  <import file="../build-plugin.xml"/>

  <!--
   ! Override the compile and jar targets,
   ! since there is nothing to compile here.
   ! -->
  <target name="compile" depends="init"/>

  <target name="jar" depends="compile">
    <copy todir="${build.dir}" verbose="true">
      <fileset dir="./lib" includes="**/*.jar"/>
    </copy>
  </target>

</project>


参照这个来配置吧,应该不会有问题了。
2 楼 yoyorest 2009-09-24  
期待后文,写的真好,不过有些地方地方最好多详细一点,照顾一下新手。
1 楼 wzjin 2009-09-22  
lib-paoding-analyzers的配置同上,不再赘述。
-----------------------------------------------
这个配置还是讲讲吧,不是谁都像你一样搞这个好多年的。
也谢谢你共享这样好的文章。

相关推荐

Global site tag (gtag.js) - Google Analytics