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/
【当你用心写完每一篇博客之后,你会发现它比你用代码实现功能更有成就感!】
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· Obsidian + DeepSeek:免费 AI 助力你的知识管理,让你的笔记飞起来!
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了