lucene中文分词——(四)

1.分析器的执行过程:

 

 

第一个 TokenFilter将大写字母变为小写,第二次分词去掉空格并换行,第三次去掉不要的 and或者标点符号

 

2.中文分词器介绍:

(1)lucene自带的

 

(2)第三方的

 

 

3.查看标准分词器对中文的分词效果:

最终决定使用的是IKAnalyzer()分词器,支持中文扩展与停用。

 

 1     // 查看标准分析器的分词效果
 2     @Test
 3     public void testTokenStream() throws Exception {
 4         // 创建一个标准分析器对象
 5 //        Analyzer analyzer = new StandardAnalyzer();
 6 //        Analyzer analyzer = new CJKAnalyzer();
 7 //        Analyzer analyzer = new SmartChineseAnalyzer();
 8         Analyzer analyzer = new IKAnalyzer();
 9         // 获得tokenStream对象
10         // 第一个参数:域名,可以随便给一个
11         // 第二个参数:要分析的文本内容
12 //        TokenStream tokenStream = analyzer.tokenStream("test",
13 //                "The Spring Framework provides a comprehensive programming and configuration model.");
14         TokenStream tokenStream = analyzer.tokenStream("test",
15                 "高富帅可以用二维表结构来逻辑表达实现的数据");
16         // 添加一个引用,可以获得每个关键词
17         CharTermAttribute charTermAttribute = tokenStream.addAttribute(CharTermAttribute.class);
18         // 添加一个偏移量的引用,记录了关键词的开始位置以及结束位置
19         OffsetAttribute offsetAttribute = tokenStream.addAttribute(OffsetAttribute.class);
20         // 将指针调整到列表的头部
21         tokenStream.reset();
22         // 遍历关键词列表,通过incrementToken方法判断列表是否结束
23         while (tokenStream.incrementToken()) {
24             // 关键词的起始位置
25             System.out.println("start->" + offsetAttribute.startOffset());
26             // 取关键词
27             System.out.println(charTermAttribute);
28             // 结束位置
29             System.out.println("end->" + offsetAttribute.endOffset());
30         }
31         tokenStream.close();
32     }

 

 

(1)标准分词器:StandardAnalyzer

一个一个分词

 

 

(2)中日韩分词器 CJKAnalyzer

两个两个分词

 

 

(3) 智能中文分词器  SmartChineseAnalyzer

扩展性差,不支持扩展。

 

 

 

(4) 最终扩展性好的分词器  IKAnalyzer

 

 

 

4. IKAnalyzer分词器使用方法:

Jar包:

 

配置文件:

  

 

(1)ext.dic存放扩展的词汇(分词算一个,扩展新词汇),比如:

   

(2)stopword.dic存放停用的词汇(分词不算一个),比如:

  

(3) IKAnalyzer.cfg.xml  主配置文件:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">  
<properties>  
    <comment>IK Analyzer 扩展配置</comment>
    <!--用户可以在这里配置自己的扩展字典 -->
    <entry key="ext_dict">ext.dic;</entry> 
    
    <!--用户可以在这里配置自己的扩展停止词字典-->
    <entry key="ext_stopwords">stopword.dic;</entry> 
    
</properties>

 

 

 

(4)效果:

对于汉字  "高富帅可以用二维表结构来逻辑表达实现的数据" 的分词效果:

加载扩展词典:ext.dic
加载扩展停止词典:stopword.dic
start->0
高富帅
end->3
start->3
可以用
end->6
start->3
可以
end->5
start->6
二维表
end->9
start->6
二维
end->8
start->9
结构
end->11
start->12
逻辑
end->14
start->14
表达
end->16
start->16
实现
end->18
start->19
数据
end->21

 

另外一个常用的汉语处理插件,包含分词、摘要关键字等:  http://hanlp.linrunsoft.com/

 

posted @ 2017-08-05 18:51  QiaoZhi  阅读(309)  评论(0编辑  收藏  举报