nutch研究记录4(中文分词)

中文分词配置好后,需要对源代码进行一些修改,否则在爬虫和搜索时候不能正确分词。中文分词器回头一起补充上。我的nutch版本1.0。(修改打包,放到lib包中,记得将跟目录上的nutch.job删掉。)

爬虫 :org.apache.nutch.indexer.lucene.LuceneWriter 需要对write方法进行一些修改,以中文分词为主。nutch默认加载en分词器。

public void write(NutchDocument doc) throws IOException {
    final Document luceneDoc = createLuceneDoc(doc);
    String lang = null;
    if(luceneDoc.get("lang") == null) {
    	lang = "zh";
    }
//    final NutchAnalyzer analyzer = analyzerFactory.get(luceneDoc.get("lang"));
    final NutchAnalyzer analyzer = analyzerFactory.get(lang);
    
    if (Indexer.LOG.isDebugEnabled()) {
      Indexer.LOG.debug("Indexing [" + luceneDoc.get("url")
          + "] with analyzer " + analyzer + " (" + luceneDoc.get("lang")
          + ")");
    }
    
    writer.addDocument(luceneDoc, analyzer);

  }
 

搜索 :下面是之前做的记录,粘贴出来也许能给需要的朋友带来些帮助。(修改后打包放到web的lib目录里)

(1) 找到:org.apache.nutch.analysis.NutchAnalysis

(2) 添加一个方法:

 

/**
   * 20090705 biaowen 实现:
   * 不知道为什么nutch提供的默认parser对中文分词无效。
   * 所以自己加上这方法,使用lucene来代替,可做为原来方法的替代。
   * @param conf
   * @return
   * @throws ParseException
   */
    final public Query parseByLucene(Configuration conf) throws ParseException {
        
        Query query = new Query(conf);
            
        if (queryString.length() > 0) {
            // lucene分词
            org.apache.lucene.queryParser.QueryParser parserLucene =
                new org.apache.lucene.queryParser.QueryParser("", analyzer);
            org.apache.lucene.search.Query q = null;
            try {
                q = parserLucene.parse(queryString);
            } catch (org.apache.lucene.queryParser.ParseException e) {
                LOG.info("字符窜解析异常:"+e.getMessage());
            }
            
            String termStrings = q.toString();
            if (termStrings.indexOf(" ") > -1)
                termStrings = termStrings.substring(1, termStrings.length()-1);
            String[] terms = termStrings.split(" ");
            
            for (int i = 0; i < terms.length; i++) {
                String[] tems = {terms[i]};
                query.addRequiredPhrase(tems, Clause.DEFAULT_FIELD);
            }
        }
                
        return query;
    }
 

 

 

(3) 将NutchAnalysis.parseQuery方法中的 :return parser.parse(conf); 修改为--》return parser.parseByLucene(conf);

你可能感兴趣的:(apache,Web,Lucene,idea)