分类:
2008-12-17 11:59:04
在lucene包org.apache.lucene.analysis中,它的分词模块抽象出来了一个抽象类—Analyzer.java。这个类包含这个抽象方法
public abstract TokenStream tokenStream(String fieldName, Reader reader);
用户自定义的Analyzer主要就是实现这个方法。这个方法要返回一个token流。而要返回一个分词的完整的token流,又要写另一个类的子类,它就是——Tokenizer.java,而它又是继承自TokenStream.java的。用户自定义的Tokenizer类要写的一个关键方法是next()(在TokenStream类中定义).这个方法就是返回一个个的中文词语。
0.按照windows下安装nutch步骤,配置好nutch,使其能够进行抓取网页。
1.下载lucene的中文分词jar包je-analysis-
2、修改${nutch}\src\java目录下的源代码
(1)修改org.apache.nutch.analysis.NutchDocumentAnalyzer.java文件
public TokenStream tokenStream(String fieldName, Reader reader) { // line 100
MMAnalyzer analyzer=new MMAnalyzer();
return analyzer.tokenStream(fieldName, reader);
}
需要导入import jeasy.analysis.*;否则编译不能通过。
(2)修改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");
}
org.apache.nutch.searcher.Query 修改为:
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、使用ant工具重新构建nutch-0.9,进入nutch-0.9安装目录,输入ant命令。进行构建。
4、将${nutch}\build\classes文件夹下的文件打成jar文件.命令如下:
jar cvf nutch-0.9.jar org
拷贝nutch-0.9.jar文件到nutch的根目录下,替换原有的nutch-0.9.jar文件。
拷贝build目录下的nutch-0.9.job文件到nutch根目录下,替换原有的nutch-0.9.job文件。
5、在cygwin下输入命令 bin/nutch crawl url.txt -dir mydir -depth 3 -threads 5,开始抓取网页。
6、爬虫完毕后用luke( )查看:file—>open lucene index,定位到${nutch}\${抓取网页目录}\index目录。建立的索引已有单字变为词组了。
注意:luke运行的前提是安装jdk1.6版本。
7、将nutch-0.9.jar、je-analysis-
改为
value属性的值为从网站抓取的文件存放的路径,也就是上文中mydir的完整路径。
重启tomcat,这时搜索都是按照词搜索了。