1.1 分词器介绍
- 在对文档(Document)中的内容进行索引前,需要对域(Field)中的内容使用分析对象(分词器)进行分词 。分词的目的是为了索引,索引的目的是为了搜索。过程是先分词,再过滤。
- 分词:将Document中Field域的值切分成一个一个的单词。具体的切分方法(算法)根据使用的 分词器而不同。
- 过滤:去除标点符号,去除停用词(的、啊、是、is、the、a等),词的大写转换小写。
停用词说明:停用词是指为了节省存储空间和提高搜索效率,搜索引擎在索引内容或处理搜索请求时会自动忽略的字词,这些字或词被称为“stop words”。比如语气助词、副词、介词、连接词等等,通常自身没有明确的含义,只有放在一个上下文语句中才有意义,比如常见的有:的、在、是、啊、了、嘛、吗等。
例如:
原始文档:Lucene is a Java full-text search engine
分析以后的词:lucene java full text search engine
1.2 分词器使用
1.2.1 索引流程使用
- 把原始数据转换成文档对象后,使用分词器把文档域中的内容切分成一个一个的词语,目的是方便后续建立索引。
1.2.2 检索流程使用
- 根据用户输入的搜索关键词,使用分词器对象分析以后吗,建立成查询对象(Query),在索引库中查找目标内容。
- 注意事项:索引流程和检索流程使用的分词器要一致。
1.3 中文分词器
1.3.1 中文分词器介绍
我们知道英文本身是以单词为单位,单词与单词之间,句子之间通常是空格、逗号、句号分隔。因此对于英文,可以简单的以空格来判断某个字符串是否是一个词,比如:I love China,love和China很容易被程序处理。
但是中文是以字为单位的,字与字再组成词,词再组成句子。中文:我爱中国,电脑不知道“爱中”是一个词,还是“中国”是一个词?所以我们需要一定的规则来告诉电脑应该怎么切分,这就是中文分词器所要解决的问题。常见的有一元切分法“我爱中国”:我、爱、中、国。二元切分法“我爱中国”:我爱,爱中、中国。
1.3.2 Lucene分词器(Lucene提供的分词器,在企业中不推荐使用)
- StandardAnalyzer分词器
单字分词器:一个字切分成一个词,一元切分法。
- CJKAnalyzer分词器
二元切分法:把相邻的两个字,作为一个词。
- SmartChineseAnalyzer词库分词器
通常一元切分法,二元切分法都不能满足我们的业务需求。SmartChineseAnalyzer对中文支持较好,但是扩展性差,针对扩展词库、停用词均不好处理。(只能说明老外的中文不怎么样)。
1.3.3 第三方的中文分词器
- paoding:庖丁解牛分词器,最新版本在https://code.google.com/p/paoding/可以下载。由于没