读书人

在tomcat中运作得nutch加入中文分词后

发布时间: 2012-07-30 16:19:05 作者: rapoo

在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。而我们需要使用的检索是自己添加的中文分词器

?

读书人网 >开源软件

热点推荐