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 @   QiaoZhi  阅读(321)  评论(0编辑  收藏  举报
编辑推荐:
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· Obsidian + DeepSeek:免费 AI 助力你的知识管理,让你的笔记飞起来!
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
点击右上角即可分享
微信分享提示