Nutch源码学习系列之一

xiaoxiao2026-03-15  11

Nutch源码学习系列之一:Analysis包(原创) - - Tag: Nutch Lucene Analysis Nutch源码学习系列之一:Analysis包(原创) TjuAILab 张步峰 Nutch0.7出来,对于我们这些Lucene爱好者来说,是件兴奋的事情!当时用Nutch0.6做实验已经让我非常兴奋。 Nutch0.7比之0.6又增添了一部分功能,我们开发一些小型搜索引擎可以修改Nutch的一些接口,使之更加用户化。 此节主要讲述Nutch下的Analysis包即package org.apache.nutch.analysis。 阅读此包是你可以参照Nutch的API文档。http://lucene.apache.org/nutch/apidocs/index.html。或者使用的硬盘上的也可。 搜索引擎去除Spider外基本架构可以简要描述如下 由于Analysis主要处理分词问题。在图中看出需要分词的地方就是所用入库和对用户查询进行分词。 Nutch的Analysis有一下几个文件:(黄色底是NutchAPI文档列的) CharStream.java: interface CharStream *这个接口描述了一个维护字符串行和列位置的字符流。在某种程度上,它还具有备份字符流的 *能力。此接口的一个实现有JavaccParser产生,用于TokenManager这个实现中。 * *除去backup方法外的其他所有方法都可以被以任何方式实现。backup的正确实现需要对lexer的正确操作。 *其他的方法被用来获取信息,诸如行序号、列序号、用于Token却没有用于lexer的字符串。 *因此这些方法对应的实现不会影响产生lexer的操作 CommonGrams.java *对于索引时经常出现的项和词构建n-grams(不是很明白).使用n-grams优化词查询。单个项依旧使用 *覆盖的n-grams索引。 FastCharStream.java *CharStream接口的一个有效实现。注意这并没有进行行数计算,当时追踪了在输入中Token的字符位置 *这个字符位置是Lucene的API需要的 NutchAnalysis.java 应该说是Analysis包的核心了,主要完成Nutch语言(词典)分析器和查询分析器。具体到语言分析,要去 Stop Words,然后中文分词,或者英文分词等等。 NutchAnalysisConstants.java 一个接口主要被NutchAnalysis和NutchTokenManager所用,里面含的都是常量。譬如Token的类型(冒号,省略号,阿拉伯数字,短语等等)和TokenImage(就是Token类型的string化) NutchAnalysisTokenManager.java 管理Token,为NutchAnalysis所用。 NutchDocumentAnalyzer.java *NutchDocumentAnalyzer为Nuctch文档服务。使用JavaCC定义的语言(词典)分析器 *(@link NutchDocumentTokenizer),不含有StopWords列表。从而保持了查询分析的连贯性。 与NutchAnalysis相对独立 NutchDocumentTokenizer.java *此分词器用于对Nutch的文档文本进行分词。是JavaCC所产生的词典分析器的实现。 为NutchDocumentAnalyzer所用。 ParseException.java *当查询分析出错时,此异常被抛出。在产生的查询分析器(Parser)中。 *你可以通过调用方法generateParseException来显示地创建此异常类的对象。 *只要你保留公共feild(成员变量),你可以修改这个类使其报错机制更加用户化。 Token.java Token类内含Token的类型,每个Token在字符串中的起始位置和终止位置等等 TokenManager.java 一个接口,非常简单,里面只有一个用于返回下一个Token的函数。在Analysis包没有被使用。可能留着以后扩展用 TokenMgrError.java 主要用于分词出错,进行报错。 其主要的类别继承图如下: Class Hierarchy class java.lang.Object class org.apache.lucene.analysis.Analyzer class org.apache.nutch.analysis.NutchDocumentAnalyzer class org.apache.nutch.analysis.CommonGrams class org.apache.nutch.analysis.NutchAnalysis (implements org.apache.nutch.analysis.NutchAnalysisConstants) class org.apache.nutch.analysis.NutchAnalysisTokenManager (implements org.apache.nutch.analysis.NutchAnalysisConstants) class org.apache.lucene.analysis.TokenStream class org.apache.lucene.analysis.Tokenizer class org.apache.nutch.analysis.NutchDocumentTokenizer (implements org.apache.nutch.analysis.NutchAnalysisConstants) Interface Hierarchy interface org.apache.nutch.analysis.NutchAnalysisConstants Nutch的底层是基于Lucene的,从图中你可以看出主要的两大接口NutchDocumentAnalyzer和NutchDocumentTokenizer都是从Lucene继承过来的。所以更有必要认真研究Lucene的Analysis包。 由于BlogChina发文大小有限制,想看更全的源码部分,可以看我另一个blog! http://blog.donews.com/windshow/archive/2005/08/26/526755.aspx
转载请注明原文地址: https://www.6miu.com/read-5045953.html

最新回复(0)