lucene3 分词器的使用

lucene3 中分词的一个例子

 

 

import java.io.IOException;
import java.io.StringReader;

import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.analysis.TokenStream;
import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.analysis.tokenattributes.TermAttribute;
import org.apache.lucene.util.Version;

public class AnalyzerTest {

	public static void main(String[] args) throws IOException {
		String content  = "Dan O'Sullivan - Wikipedia: A New Community of Practice?http://www.1ju.org/";
		StringReader reader = new StringReader(content);
		Analyzer analyzer = new StandardAnalyzer(Version.LUCENE_20);
		TokenStream ts = analyzer.tokenStream("", reader);
		ts.addAttribute(TermAttribute.class);
		
	
		while (ts.incrementToken()) {
			TermAttribute ta = ts.getAttribute(TermAttribute.class);
			System.out.println(ta.term());
		}
	}
}
 

 

 

dan
o'sullivan
wikipedia
new
community
practice
http
www.1ju.org

 

 

 

lucene3提供了下面几种分词器:

1、 StopAnalyzer

StopAnalyzer 能过滤词汇中的特定字符串和词汇,并且完成大写转小写的功能。

2、 StandardAnalyzer

StandardAnalyzer 根据空格和符号来完成分词,还可以完成数字、字母、E-mail 地址、IP 地址以及中文字符的分析处理,还可以支持过滤词表,用来代替StopAnalyzer 能够实现的过滤功能。

3、 SimpleAnalyzer

SimpleAnalyzer 具备基本西文字符词汇分析的分词器,处理词汇单元时,以非字母字符作为分割符号。分词器不能做词汇的过滤,之进行词汇的分析和分割。输出地词汇单元完成小写字符转换,去掉标点符号等分割符。

在全文检索系统开发中,通常用来支持西文符号的处理,不支持中文。由于不完成单词过滤功能,所以不需要过滤词库支持。词汇分割策略上简单,使用非英文字符作为分割符,不需要分词词库的支持。

4、 WhitespaceAnalyzer

WhitespaceAnalyzer 使用空格作为间隔符的词汇分割分词器。处理词汇单元的时候,以空格字符作为分割符号。分词器不做词汇过滤,也不进行小写字符转换。

实际中可以用来支持特定环境下的西文符号的处理。由于不完成单词过滤和小写字符转换功能,也不需要过滤词库支持。词汇分割策略上简单使用非英文字符作为分割符,不需要分词词库支持。

5、 KeywordAnalyzer

KeywordAnalyzer 把整个输入作为一个单独词汇单元,方便特殊类型的文本进行索引和检索。针对邮政编码,地址等文本信息使用关键词分词器进行索引项建立非常方便。

6、 CJKAnalyzer

CJKAnalyzer 内部调用CJKTokenizer 分词器,对中文进行分词,同时使用StopFilter 过滤器完成过滤功能,可以实现中文的多元切分和停用词过滤。在Lucene3.0 版本中已经弃用。

7、 ChineseAnalyzer

ChineseAnalyzer 功能与StandardAnalyzer 分析器在处理中文是基本一致,都是切分成单个的双字节中文字符。在Lucene3.0 版本中已经弃用。

8、 PerFieldAnalyzerWrapper

PerFieldAnalyzerWrapper 功能主要用在针对不同的Field 采用不同的Analyzer 的场合。比如对于文件名,需要使用KeywordAnalyzer ,而对于文件内容只使用StandardAnalyzer 就可以了。通过addAnalyzer() 可以添加分类器。

9、 IKAnalyzer

实现了以词典为基础的正反向全切分,以及正反向最大匹配切分两种方法。IKAnalyzer 是第三方实现的分词器,继承自LuceneAnalyzer 类,针对中文文本进行处理。

10、 JE-Analysis

JE-AnalysisLucene 的中文分词组件,需要下载。

11、 ICTCLAS4J

ictclas4j 中文分词系统是sinboy 在中科院张华平和刘群老师的研制的FreeICTCLAS 的基础上完成的一个java 开源分词项目,简化了原分词程序的复杂度,旨在为广大的中文分词爱好者一个更好的学习机会。

12、 Imdict-Chinese-Analyzer

imdict-chinese-analyzerimdict 智能词典 的智能中文分词模块,算法基于隐马尔科夫模型(Hidden Markov Model, HMM) ,是中国科学院计算技术研究所的ictclas 中文分词程序的重新实现(基于Java ),可以直接为lucene 搜索引擎提供简体中文分词支持。

13、 Paoding Analysis

Paoding Analysis 中文分词具有极 高效率 和 高扩展性。引入隐喻,采用完全的面向对象设计,构思先进。其效率比较高,在PIII 1G 内存个人机器上,1 秒可准确分词100 万汉字。采用基于不限制个数的词典文件对文章进行有效切分,使能够将对词汇分类定义。能够对未知的词汇进行合理解析。

14、 MMSeg4J

mmseg4jChih-Hao TsaiMMSeg 算法(http://technology.chtsai.org/mmseg/ ) 实现的中文分词器,并实现 luceneanalyzersolrTokenizerFactory 以方便在LuceneSolr 中使用。 MMSeg 算法有两种分词方法:SimpleComplex ,都是基于正向最大匹配。Complex 加了四个规则过虑。官方说:词语的正确识别率达到了 98.41%mmseg4j 已经实现了这两种分词算法

 

 

 

你可能感兴趣的:(apache,算法,Lucene,Solr,全文检索)