Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1966971
  • 博文数量: 606
  • 博客积分: 9991
  • 博客等级: 中将
  • 技术积分: 5725
  • 用 户 组: 普通用户
  • 注册时间: 2008-07-17 19:07
文章分类

全部博文(606)

文章存档

2011年(10)

2010年(67)

2009年(155)

2008年(386)

分类:

2008-12-17 11:59:04

luceneorg.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的中文分词jarje-analysis-1.5.1.jar. (非开源软件)   并将je-analysis-1.5.1.jar拷到${nutch}\lib目录下

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.jarje-analysis-1.5.1.jar文件放到web应用的lib下,打开nutch-0.9Web应用目录下的 WEB-INF\classesnutch-site.xml文件,将

改为

D:\\nutch-0.9\\mydir:表示搜索结果存放的目录

     searcher.dir

     D:\\nutch-0.9\\mydir

value属性的值为从网站抓取的文件存放的路径,也就是上文中mydir的完整路径。

重启tomcat这时搜索都是按照词搜索了。

阅读(986) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~