利用IK分词器,自定义分词规则
IK分词源码下载地址:https://code.google.com/p/ik-analyzer/downloads/list
lucene源码下载地址:http://www.eu.apache.org/dist/lucene/java/
下载IK分词源码后,运行出现错误提示:
1 2 3 4 5 6 7 8 | Analyzer cannot be resolved to a type TokenStream cannot be resolved to a type OffsetAttribute cannot be resolved to a type OffsetAttribute cannot be resolved to a type CharTermAttribute cannot be resolved to a type CharTermAttribute cannot be resolved to a type TypeAttribute cannot be resolved to a type TypeAttribute cannot be resolved to a type |
解决办法:
在项目project -->clean 下即可
自定义分词规则步骤:
里面的例子:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 | import java.io.IOException; import java.util.HashMap; import java.util.Map; import java.util.Map.Entry; import org.apache.lucene.analysis.Analyzer; import org.apache.lucene.analysis.TokenStream; import org.apache.lucene.analysis.tokenattributes.CharTermAttribute; import org.apache.lucene.analysis.tokenattributes.OffsetAttribute; import org.apache.lucene.analysis.tokenattributes.TypeAttribute; import org.wltea.analyzer.lucene.IKAnalyzer; public static void main(String[] args) { String testString = "张柏芝士蛋糕房 ZHANG'S CAKE SHOP,网友们Hold不住了:宋祖英语培训班、周渝民政服务中心、容祖儿童医院、吴奇隆胸医院、苏永康复中心、梁朝伟哥专卖、陈冠希望小学、吴彦祖传中医坊、林书豪华酒店" ; iktest1(testString); } // 实现普通分词 public static Map<String, Object> iktest1(String testString){ Map<String, Object> resultsMap = new HashMap<String, Object>(); Analyzer ikAnalyzer = new IKAnalyzer( true ); TokenStream ts = null ; try { ts = ikAnalyzer.tokenStream( "myik" , testString); //词元位置属性 OffsetAttribute offset = ts.addAttribute(OffsetAttribute. class ); //词文本属性 CharTermAttribute term = ts.addAttribute(CharTermAttribute. class ); //词文本属性 TypeAttribute type = ts.addAttribute(TypeAttribute. class ); ts.reset(); while (ts.incrementToken()){ resultsMap.put( "获得分词" , term.toString()); for (Object obj : resultsMap.entrySet()) { Entry entry = (Entry) obj; String key = (String) entry.getKey(); String value = (String) entry.getValue(); System.out.println(key + ":" + value); } //System.out.println(resultsMap); // System.out.println(offset.startOffset() + " - " + offset.endOffset() + " : " + term.toString() + " | " + type.type()); } ts.end(); } catch (IOException e) { e.printStackTrace(); } finally { if (ts != null ){ try { ts.close(); } catch (IOException e) { e.printStackTrace(); } } } return resultsMap; } //实现只能分词2 public static void testik02(){ } |
分词结果:
获得分词:张柏芝
获得分词:士
获得分词:蛋糕
获得分词:房
获得分词:zhang
获得分词:s
获得分词:cake
获得分词:shop
获得分词:网友
获得分词:们
获得分词:hold
获得分词:不
获得分词:住了
获得分词:宋祖英
获得分词:语
获得分词:培训班
获得分词:周渝民
获得分词:政
获得分词:服务中心
获得分词:容祖儿
获得分词:童
获得分词:医院
获得分词:吴奇隆
获得分词:胸
获得分词:医院
获得分词:苏永康
获得分词:复
获得分词:中心
获得分词:梁朝伟
获得分词:哥
获得分词:专卖
获得分词:陈冠希
获得分词:望
获得分词:小学
获得分词:吴彦祖
获得分词:传
获得分词:中医
获得分词:坊
获得分词:林
获得分词:书
获得分词:豪华酒店
这样分词不是很智能,分词需要我们自己设置。
存在的问题 还需要定义歧义字典。但是ik不支持歧义字典
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET 9 new features-C#13新的锁类型和语义
· Linux系统下SQL Server数据库镜像配置全流程详解
· 现代计算机视觉入门之:什么是视频
· 你所不知道的 C/C++ 宏知识
· 聊一聊 操作系统蓝屏 c0000102 的故障分析
· 不到万不得已,千万不要去外包
· C# WebAPI 插件热插拔(持续更新中)
· 会议真的有必要吗?我们产品开发9年了,但从来没开过会
· 如何打造一个高并发系统?
· 【译】我们最喜欢的2024年的 Visual Studio 新功能