`
gengu
  • 浏览: 87593 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

在tomcat中运行得nutch加入中文分词后的检索

阅读更多

nutch-0.9加入中文分词之后的索引有很多博客已经讲到过

我没有使用Cygwin模拟linux环境,而是在Tomcat中运行的nutch。这个项目工程文件是在我们的项目中的一个war包,而这个war包却是最开始的版本,因此我们要在特定的时候修改掉里面的一些文件。

 

但遇到一个问题是,加入分词之后放到tomcat里面发现搜索不好使了,用Luke打开索引文件可以看到中文分词的效果明显

可是用nutch查询结果却很多时候查不出来

 

其实原因是因为你加入的中文分词在查询里面没有被应用到,因为war包还是最老版本的war包,其中的一些修改没有体现到

 

修改以下几个地方,把nutch的中文分词器换成自己的分词器以JE为例

 

1:修改org.apache.nutch.analysis.NutchAnalysis.java文件

 

     导入import jeasy.analysis.*;

     替换其parse()方法如下:

final public Query parse(Configuration conf) throws ParseException,IOException {

Query query = new Query(conf);

StringReader input;

input=new java.io.StringReader(queryString);

org.apache.lucene.analysis.TokenStream tokenizer=new MMAnalyzer().tokenStream(queryString,input);

for(org.apache.lucene.analysis.Token t=tokenizer.next();t!=null;t=tokenizer.next()){

   String[] array={t.termText()};

   query.addRequiredPhrase(array);

}

{if (true) return query;}

    throw new Error("Missing return statement in function");

}

 

2:修改org.apache.nutch.searcher.Query.java 

  public static Query parse(String queryString, String queryLang, Configuration conf)

  throws IOException {

    try {

       return fixup(NutchAnalysis.parseQuery(

               queryString, AnalyzerFactory.get(conf).get(queryLang), conf), conf);

    } catch (ParseException e) {

       // TODO Auto-generated catch block

       e.printStackTrace();

    }

    return null;

  }

 

 

3:也是很多文章里面没有提到的一个地方org.apache.nutch.analysis.NutchAnalysis.java文件

 

  /** Construct a query parser for the text in a reader. */

  public static Query parseQuery(String queryString, Analyzer analyzer, Configuration conf)

    throws IOException {

 /**

  * 这里我有的修改

  */

    NutchAnalysis parser = new NutchAnalysis(

          queryString, (analyzer != null) ? analyzer : new MMAnalyzer());//这里把默认的分词器改成自己的分词器

    parser.queryString = queryString;

    parser.queryFilters = new QueryFilters(conf);

    return parser.parse(conf);

  }


修改好了,然后用ant编译成nutch-0.9.jar,然后替换掉你tomcat中的nutch工程中的WEB-INF中的nutch-0.9.jar

然后再在这个WEB-INF中添加JE分词包,就大功告成了,这一点非常重要,因为如果不替换,tomcat还是使用了最老版本的nutch-0.9.jar。而我们需要使用的检索是自己添加的中文分词器

 

分享到:
评论

相关推荐

    实验报告(利用Nutch和IKanalyzer构造中文分词搜索引擎)

    在Nutch 1.2中集成IKAnalyzer,需要修改NutchAnalysis.jj文件,将SIGRAM规则调整为支持连续的汉字,然后在代码中初始化IKTokenizer,使其能够处理输入的文本流。通过这种方式,Nutch现在能够对抓取的网页内容进行...

    Nutch全文搜索学习笔记

    为了处理中文乱码问题,需要在Tomcat的`server.xml`文件中配置`URIEncoding`属性: ```xml ``` #### 二、Nutch核心组件介绍 **1. Fetcher(网页抓取器)** Fetcher负责根据URL列表抓取网页内容,并更新抓取状态...

    Nutch 使用总结

    在使用Nutch的过程中,开发者需要注意的问题包括: - 确保URL的合法性,避免陷入死循环或抓取无效链接。 - 调整抓取速度,以免对目标网站造成过大压力。 - 设置合理的抓取策略,如深度优先、广度优先等。 - 处理网页...

    nutch入门学习

    Lucene是一个文本搜索库,主要用于实现全文检索功能,而Nutch则是一个完整的搜索引擎框架,除了文本检索外,还包含了网页抓取、数据清洗、索引构建等环节,是Lucene在搜索引擎领域的高级应用实例。 #### 2. nutch的...

    Lucene 简单入门程序实例

    为了运行Lucene示例程序,文档详细介绍了在MyEclipse中建立Web项目的过程,以及如何配置Tomcat服务器以自动部署项目。此外,文档还提到了如何引入必要的Jar包,包括Lucene核心库、HTML解析器Tidy、中文分析器`je-...

    搜索开发lucene

    在分词过程中,还会进行停用词处理,去除如“in”、“too”等常见但对检索意义不大的词汇。 Lucene 的索引文件格式是独立于应用平台的,这意味着它可以在不同的操作系统或硬件环境下运行。它的设计高度抽象,提供了...

Global site tag (gtag.js) - Google Analytics