IKAnalyzer中文分词器V3.2.0使用手册
测试Ik分词器以及增加自己的词汇
测试Ik分词器以及增加⾃⼰的词汇测试
启动kibana,打开开发⼯具
ik_smart:最少切分
GET _analyze
{
"analyzer": "ik_smart",
"text": ["中华⼈民共和国"]
}
ik_max_word:最细粒度划分,穷尽词库。
GET _analyze
{
"analyzer": "ik_max_word",
"text": ["中华⼈民共和国"]
}
我们输⼊⼀个⼈名:⽐如说宋殿鑫想当Java开发⼯程师,宋殿鑫是⼈名,但是被分开了。
出现问题:有些词被拆开了!
这种⾃⼰需要的词,要加到我们的分词字典中!
Ik分词器增加⾃⼰的配置
来到 elasticsearch-7.6.1\plugins\ik\config ⽬录下,打开IKAnalyzer.cfg.xml
我们先创建⼀个dic⽂件,也就是字典,其实我们打开其他的dic⽂件也是⼀样的。
编写后注⼊到配置⽂件中。
然后重启es和kibana,可以看到我们新加的⽂件
再分词,可以发现,宋殿鑫成为了单独的字段,没被细分。
Lucene使用IKAnalyzer分词实例及IKAnalyzer扩展词库
Lucene使⽤IKAnalyzer分词实例及IKAnalyzer扩展词库⽅案⼀: 基于配置的词典扩充项⽬结构图如下:IK分词器还⽀持通过配置IKAnalyzer.cfg.xml⽂件来扩充您的专有词典。
⾕歌拼⾳词库下载:在web项⽬的src⽬录下创建IKAnalyzer.cfg.xml⽂件,内容如下<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE properties SYSTEM "/dtd/properties.dtd"><properties><comment>IK Analyzer 扩展配置</comment><!-- ⽤户可以在这⾥配置⾃⼰的扩展字典 --><entry key="ext_dict">/dicdata/use.dic.dic;/dicdata/googlepy.dic</entry><!-- ⽤户可以在这⾥配置⾃⼰的扩展停⽌词字典 --><entry key="ext_stopwords">/dicdata/ext_stopword.dic</entry></properties>词典⽂件的编辑与部署分词器的词典⽂件格式是⽆BOM 的UTF-8 编码的中⽂⽂本⽂件,⽂件扩展名不限。
词典中,每个中⽂词汇独⽴占⼀⾏,使⽤\r\n 的DOS ⽅式换⾏。
(注,如果您不了解什么是⽆BOM 的UTF-8 格式,请保证您的词典使⽤UTF-8 存储,并在⽂件的头部添加⼀空⾏)。
您可以参考分词器源码org.wltea.analyzer.dic 包下的.dic ⽂件。
词典⽂件应部署在Java 的资源路径下,即ClassLoader 能够加载的路径中。
ikanalyzer 用法
IKAnalyzer是一个开源的中文分词工具,它采用了基于汉字的切分方式,并提供了多种分词算法和模式匹配算法。
下面是一些IKAnalyzer的基本用法:1. 引入依赖:在使用IKAnalyzer之前,需要先将其添加到您的项目中。
如果您使用Maven进行项目管理,可以通过在pom.xml文件中添加以下依赖来引入IKAnalyzer:```xml<dependency><groupId>org.wltea.analyzer</groupId><artifactId>IKAnalyzer</artifactId><version>版本号</version></dependency>```请注意,您需要将“版本号”替换为您要使用的实际版本号。
2. 创建IKAnalyzer实例:在使用IKAnalyzer进行分词之前,需要创建一个IKAnalyzer实例。
您可以通过以下代码创建一个默认的IKAnalyzer实例:```javaAnalyzer analyzer = new IKAnalyzer();```3. 进行分词:一旦创建了IKAnalyzer实例,您可以使用它来对文本进行分词。
以下是一个简单的示例:```javaString text = "我爱中国";TokenStream tokenStream = analyzer.tokenStream("", text);while (tokenStream.incrementToken()) {System.out.println(tokenStream.getAttribute(CharTermAttribute.class ));}```此代码将打印出分词后的结果。
4. 自定义分词规则:如果您需要更精细的控制分词结果,可以使用自定义词典和规则。
Lucene 3.0 的几种分词系统
StopAnalyzer能过滤词汇中的特定字符串和词汇,并且完成大写转小写的功能。
2、 StandardAnalyzer
StandardAnalyzer根据空格和符号来完成分词,还可以完成数字、字母、E-mail地址、IP地址以及中文字符的分析处理,还可以支持过滤词表,用来代替StopAnalyzer能够实现的过滤功能。
3、 SimpleAnalyzer
SimpleAnalyzer具备基本西文字符词汇分析的分词器,处理词汇单元时,以非字母字符作为分割符号。分词器不能做词汇的过滤,之进行词汇的分析和分割。输出地词汇单元完成小写字符转换,去掉标点符号等分割符。
在全文检索系统开发中,通常用来支持西文符号的处理,不支持中文。由于不完成单词过滤功能,所以不需要过滤词库支持。词汇分割策略上简单,使用非英文字符作为分割符,不需要分词词库的支持。
13、 Paoding Analysis
Paoding Analysis中文分词具有极 高效率 和 高扩展性。引入隐喻,采用完全的面向对象设计,构思先进。其效率比较高,在PIII 1G内存个人机器上,1秒可准确分词100万汉字。采用基于不限制个数的词典文件对文章进行有效切分,使能够将对词汇分类定义。能够对未知的词汇进行合理解析。
7、 ChineseAnalyzer
ChineseAnalyzer功能与StandardAnalyzer分析器在处理中文是基本一致,都是切分成单个的双字节中文字符。在Lucene3.0版本中已经弃用。
8、 PerFieldAnalyzerWrapper
PerFieldAnalyzerWrapper功能主要用在针对不同的Field采用不同的Analyzer的场合。比如对于文件名,需要使用KeywordAnalyzer,而对于文件内容只使用StandardAnalyzer就可以了。通过addAnalyzer()可以添加分类器。
11个Java开源中文分词器使用方法和分词效果对比
1、学会使用11大Java开源中文分词器
2、对比分析11大Java开源中文分词器的分词效果
本文给出了11大Java开源中文分词的使用方法以及分词结果对比代码,至于效果哪个好,那要用的人结合自己的应用场景自己来判断。
11大Java开源中文分词器,不同的分词器有不同的用法,定义的接口也不一样,我们先定义一个统一的接口:
从上面的定义我们知道,在Java中,同样的方法名称和参数,但是返回值不同,这种情况不可以使用重载。
这两个方法的区别在于返回值,每一个分词器都可能有多种分词模式,每种模式的分词结果都可能不相同,第一个方法忽略分词器模式,返回所有模式的所有不重复分词结果,第二个方法返回每一种分词器模式及其对应的分词结果。
在这里,需要注意的是我们使用了Java8中的新特性默认方法,并使用stream把一个map 的value转换为不重复的集合。
下面我们利用这11大分词器来实现这个接口:
1、word分词器
2、Ansj分词器
3、Stanford分词器
4、FudanNLP分词器
5、Jieba分词器
6、Jcseg分词器
7、MMSeg4j分词器
8、IKAnalyzer分词器
9、Paoding分词器
10、smartcn分词器
11、HanLP分词器
现在我们已经实现了本文的第一个目的:学会使用11大Java开源中文分词器。
最后我们来实现本文的第二个目的:对比分析11大Java开源中文分词器的分词效果,程序如下:。
IKAnalyzer中文分词器V3.2.8使用手册
IKAnalyzer中文分词器V3.2使用手册目录1.IK Analyzer 3.X介绍 (2)2.使用指南 (5)3.词表扩展 (14)4.针对solr的分词器应用扩展 (16)5.关于作者 (18)1.IK Analyzer 3.X介绍IK Analyzer是一个开源的,基于java语言开发的轻量级的中文分词工具包。
从2006年12月推出1.0版开始,IKAnalyzer已经推出了3个大版本。
最初,它是以开源项目Luence为应用主体的,结合词典分词和文法分析算法的中文分词组件。
新版本的IK Analyzer 3.X则发展为面向Java的公用分词组件,独立于Lucene项目,同时提供了对Lucene的默认优化实现。
1.1 IK Analyzer 3.X结构设计1.2 IK Analyzer 3.X特性●采用了特有的“正向迭代最细粒度切分算法“,具有80万字/秒的高速处理能力。
●采用了多子处理器分析模式,支持:英文字母(IP地址、Email、URL)、数字(日期,常用中文数量词,罗马数字,科学计数法),中文词汇(姓名、地名处理)等分词处理。
●优化的词典存储,更小的内存占用。
支持用户词典扩展定义●针对Lucene全文检索优化的查询分析器IKQueryParser(作者吐血推荐);采用歧义分析算法优化查询关键字的搜索排列组合,能极大的提高Lucene检索的命中率。
1.3 分词效果示例IK Analyzer 3.2.8版本支持细粒度切分和最大词长切分,以下是两种切分方式的演示样例。
文本原文1:IKAnalyzer是一个开源的,基于java语言开发的轻量级的中文分词工具包。
从2006年12月推出1.0版开始,IKAnalyzer已经推出了3个大版本。
●最大词长分词结果:ikanalyzer | 是| 一个| 开源| 的| 基于| java | 语言| 开发| 的| 轻量级| 的| 中文| 分词| 工具包| 从| 2006 | 年| 12 | 月| 推出| 1.0 | 版| 开始| ikanalyzer | 已经| 推出| 出了| 3 | 个| 大| 版本●最细粒度分词结果:ikanalyzer | 是| 一个| 一| 个| 开源| 的| 基于| java | 语言| 开发| 的| 轻量级| 量级| 的| 中文| 分词| 工具包| 工具| 从| 2006 | 年| 12 | 月| 推出|1.0 | 版| 开始| ikanalyzer | 已经| 推出| 出了| 3 | 个| 大| 版本文本原文2:作者博客: 电子邮件:linliangyi2005@●最大词长分词结果:作者| 博客| | 电子邮件| linliangyi2005@●最细粒度分词结果:作者| 博客| | linliangyi | 2007 | javaeye | com | 电子邮件| linliangyi2005@ | linliangyi | 2005 | gmail | com文本原文3古田县城关六一四路四百零五号●最大词长分词结果:古田县| 县城| 城关| 六一四| 路| 四百零五| 号●最细粒度分词结果:古田县| 古田| 县城| 城关| 六一四| 六一| 四| 路| 四百零五| 四| 百| 零| 五| 号文本原文4曙光天阔I620r-G /A950r-F 夏普SH9020C●最大词长分词结果:曙光| 天| 阔| i620r-g | a950r-f | 夏普| sh9020c●最细粒度分词结果:曙光| 天| 阔| i620r-g | i | 620 | r | g | a950r-f | a | 950 | r | f | 夏普| sh9020c | sh |9020 | c2.使用指南2.1下载地址GoogleCode开源项目:/p/ik-analyzer/ GoogleCode SVN下载:/svn/trunk/2.2与相关项目的版本兼容IK分词器版本Lucene 版本Solr版本3.1.3GA及先前版兼容2.9.1及先前版本没有solr接口3.1.5GA 兼容2.9.1及先前版本对solr1.3提供接口实现(详细请参考对应版本使用手册)3.1.6GA 兼容2.9.1及先前版本对solr1.3、solr1.4提供接口实现(详细请参考对应版本使用手册)3.2.0G及后续版本兼容Lucene2.9及3.0版本不支持Lucene2.4及先前版本仅对solr1.4提供接口实现(请参考本手册solr部分说明)2.3安装部署IK Analyzer安装包包含:1.《IKAnalyzer中文分词器V3.X使用手册》(即本文档)2.IKAnalyzer3.X.jar(主jar包)3.IKAnalyzer.cfg.xml(分词器扩展配置文件)4.ext_stopword.dic(扩展的stopword词典,3.2以上版本提供)它的安装部署十分简单,将IKAnalyzer3.X.jar部署于项目的lib目录中;IKAnalyzer.cfg.xml 与ext_stopword.dic文件放置在代码根目录(对于web项目,通常是WEB-INF/classes 目录,同hibernate、log4j等配置文件相同)下即可。
IKanalyzer、ansj_seg、jcseg三种中文分词器的实战较量
IKanalyzer、ansj_seg、jcseg三种中⽂分词器的实战较量选⼿:IKanalyzer、ansj_seg、jcseg硬件:i5-3470 3.2GHz 8GB win7 x64⽐赛项⽬:1、搜索;2、⾃然语⾔分析选⼿介绍: 1,IKanalyzer IKanalyzer采⽤的是“正向迭代最细粒度切分算法”,是⽐较常见⽽且很容易上⼿的分词器了。
⼀般新⼿上路学习lucene或者solr都会⽤这个。
优点是开源(其实java分词器多是开源的,毕竟算法都是业内熟知的)、轻量、⽬前来看没有太⼤的bug,源码简单易懂,做⼆次开发也很简单,即使遇到solr/Lucene版本更新,只需要⾃⼰稍微修改下实现类就可以通⽤。
缺点是过于简单⽩痴,只是简单的根据配置好的词库进⾏分词,没有任何智能可⾔,连“和服”、“和服务器”这种⽼梗都破不了。
我⼿头的IKanalyzer是被我进⾏⼆次开发后的版本,修改了⼀些问题,词库读取⽅式改成树形。
IKanalyzer可以作为⾮智能分词器的代表出场。
2,ansj_segansj_seg分词器⽤的⼈可能不太多吧,不过个⼈觉得是开源分词器⾥最强悍功能最丰富的。
作者孙建,我曾在微博上与他有过简单的交流,讨论过ansj_seg分词器的⼀些⼩的bug和不⾜。
ansj_seg基于中科院的 ictclas 中⽂分词算法,智能、⾼效。
虽然现在已经有ictclas 的for java版本,但是 ansj_seg从实现到使⽤来说要强⼤的多,⽽且作者⾃产⾃销⾃⽤,很多细节和⼩功能都有考虑,在索引和⾃然语⾔分析⽅⾯都有很优秀的表现。
我⼿头的ansj_seg是⾃⼰修复了⼀些bug后的版本。
ansj_seg可以作为ictclas 算法实现的分词器的代表出场。
3,jcsegjcseg分词器使⽤的是mmseg算法和fmm算法,这个分词器类似ansj_seg的很多地⽅,智能、⼈性化,个⼈感觉体验要超过同门师兄弟mmseg4j,所以可以作为mmseg算法实现的分词器的代表出场。
Ikanalyzer分词器动态自定义词库的方法
Ikanalyzer分词器动态自定义词库的方法IKanalyzer可通过配置Ikanalyzer.cfg.xml进行自定义词库,但有时需要在程序中根据不同的文章动态调用不同的词库进行分词,这就需要自定义Configuration类来实现。
方法如下:首先,拷贝Ikanalyzer源码中的DefaultConfig.java,改为MyConfiguration.java,然后做如下改写:public class MyConfiguration implements Configuration{//懒汉单例private static final Configuration CFG = new MyConfiguration();/** 分词器默认字典路径*/private String PATH_DIC_MAIN = "org/wltea/analyzer/dic/main2012.dic";//需要把static final去掉private String static final PATH_DIC_QUANTIFIER ="org/wltea/analyzer/dic/quantifier.dic";/** 分词器配置文件路径*/private static final String FILE_NAME = "IKAnalyzer.cfg.xml";//保留静态自定义词库的功能//配置属性——扩展字典private static final String EXT_DICT = "ext_dict";//配置属性——扩展停止词典private static final String EXT_STOP = "ext_stopwords";private Properties props;/** 是否使用smart方式分词*/private boolean useSmart;/*** 返回单例* @return Configuration单例*/public static Configuration getInstance(){return CFG;}/** 初始化配置文件*/MyConfiguration(){props = new Properties();InputStream input =this.getClass().getClassLoader().getResourceAsStream(FILE_NAME);if(input != null){try {props.loadFromXML(input);} catch (InvalidPropertiesFormatException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}}}/*** 返回useSmart标志位* useSmart =true ,分词器使用智能切分策略,=false则使用细粒度切分* @return useSmart*/public boolean useSmart() {return useSmart;}/*** 设置useSmart标志位* useSmart =true ,分词器使用智能切分策略,=false则使用细粒度切分* @param useSmart*/public void setUseSmart(boolean useSmart) { eSmart = useSmart;}/*** 新加函数:设置主词典路径** @return String 主词典路径*/public void setMainDictionary(String path) { this.PATH_DIC_MAIN = path;}/*** 获取主词典路径** @return String 主词典路径*/public String getMainDictionary(){return PATH_DIC_MAIN;}/*** 获取量词词典路径* @return String 量词词典路径*/public String getQuantifierDicionary(){return PATH_DIC_QUANTIFIER;}/*** 获取扩展字典配置路径* @return List<String> 相对类加载器的路径*/public List<String> getExtDictionarys(){List<String> extDictFiles = new ArrayList<String>(2);String extDictCfg = props.getProperty(EXT_DICT);if(extDictCfg != null){//使用;分割多个扩展字典配置String[] filePaths = extDictCfg.split(";");if(filePaths != null){for(String filePath : filePaths){if(filePath != null && !"".equals(filePath.trim())){ extDictFiles.add(filePath.trim());}}}}return extDictFiles;}/*** 获取扩展停止词典配置路径* @return List<String> 相对类加载器的路径*/public List<String> getExtStopWordDictionarys(){List<String> extStopWordDictFiles = new ArrayList<String>(2); String extStopWordDictCfg = props.getProperty(EXT_STOP); if(extStopWordDictCfg != null){//使用;分割多个扩展字典配置String[] filePaths = extStopWordDictCfg.split(";");if(filePaths != null){for(String filePath : filePaths){if(filePath != null && !"".equals(filePath.trim())){extStopWordDictFiles.add(filePath.trim());}}}}return extStopWordDictFiles;}}调用方法在分词程序中调用方法如下:String text = "";//需要分词的字符串MyConfiguration mycfg = new MyConfiguration();mycfg.setUseSmart(true); //设置为智能分词mycfg.setMainDictionary("msay.dic"); //动态设置自定义的词库IKSegmenter seg = new IKSegmenter(new StringReader(text) ,mycfg);.......本源码经测试可正常运行。
ik分词器 分词原理
ik分词器分词原理IK分词器(IKAnalyzer)是一款针对中文文本的智能分词器,其为搜索引擎、虚拟客服交互、搜索导航系统等提供智能分词服务,是目前中文处理领域应用最广泛、使用最多的中文分词器。
分词器使用算法能够自动对中文文本进行分词处理,其原理主要分为以下四部分:1.库算法:IK分词器使用词库算法来处理中文文本。
使用词库算法时,先分析出每个文本中的词语,然后从词库中找出其中的名词、动词等词,最终将文本中的每个词按规则匹配出来。
2.向分词:使用双向分词算法时,会将文本从左到右、从右到左依次拆分,以最大概率的分词结果来分析文本。
这样就能将一个文本拆分成尽可能多的最短的词语,使搜索更加准确简单。
3. N-最短路径:使用N-最短路径算法时,会构建一个有向图,将其中每个点都看作是文本中的一个词,而每个边都会携带一个权值,表示两个词之间的词性分析结果。
然后在有向图中搜索出来一条最优的路径,从而得到一个最优的分词结果。
4. HMM算法:HMM算法是一种基于隐马尔科夫模型的算法,是计算机语言处理领域常用的算法之一。
使用HMM算法时,先搭建一个隐马尔科夫模型,然后根据文本中的每个词语来计算概率,最终得到一个最优的分词结果。
以上就是IK分词器分词原理的总结,基于这四种分词算法,IK 分词器能够对中文文本进行准确的分词处理,为文本信息搜索提供了可靠的技术基础。
IK分词器的分词原理是以中文文本的分词为基础的,它是通过新颖的语言处理技术,将文本中的内容进行语义解析,最后得出准确有效的分词结果。
IK分词器可以针对文本内容,根据文本中出现的词语,使用词库算法来处理文本,通过双向分词算法从中提取出尽可能多的最短的词语,从而保证搜索的准确性。
此外,IK分词器还使用N-最短路径算法和HMM算法,可以从中构建出一个有向图,搜索出最优的路径,从而完成文本的分词处理。
综上所述,IK分词器具有易用性高、计算效率高、速度快等优点,为新型搜索引擎等提供可靠的技术基础,是当前中文分词领域应用最广泛、使用最多的分词器。
ES-自然语言处理之中文分词器
ES-⾃然语⾔处理之中⽂分词器前⾔中⽂分词是中⽂⽂本处理的⼀个基础步骤,也是中⽂⼈机⾃然语⾔交互的基础模块。
不同于英⽂的是,中⽂句⼦中没有词的界限,因此在进⾏中⽂⾃然语⾔处理时,通常需要先进⾏分词,分词效果将直接影响词性、句法树等模块的效果。
当然分词只是⼀个⼯具,场景不同,要求也不同。
在⼈机⾃然语⾔交互中,成熟的中⽂分词算法能够达到更好的⾃然语⾔处理效果,帮助计算机理解复杂的中⽂语⾔。
根据中⽂分词实现的原理和特点,可以分为:基于词典分词算法基于理解的分词⽅法基于统计的机器学习算法基于词典分词算法基于词典分词算法,也称为字符串匹配分词算法。
该算法是按照⼀定的策略将待匹配的字符串和⼀个已经建⽴好的"充分⼤的"词典中的词进⾏匹配,若找到某个词条,则说明匹配成功,识别了该词。
常见的基于词典的分词算法为⼀下⼏种:正向最⼤匹配算法。
逆向最⼤匹配法。
最少切分法。
双向匹配分词法。
基于词典的分词算法是应⽤最⼴泛,分词速度最快的,很长⼀段时间内研究者在对对基于字符串匹配⽅法进⾏优化,⽐如最⼤长度设定,字符串存储和查找⽅法以及对于词表的组织结构,⽐如采⽤TRIE索引树,哈希索引等。
这类算法的优点:速度快,都是O(n)的时间复杂度,实现简单,效果尚可。
算法的缺点:对歧义和未登录的词处理不好。
基于理解的分词⽅法这种分词⽅法是通过让计算机模拟⼈对句⼦的理解,达到识别词的效果,其基本思想就是在分词的同时进⾏句法、语义分析,利⽤句法信息和语义信息来处理歧义现象,它通常包含三个部分:分词系统,句法语义⼦系统,总控部分,在总控部分的协调下,分词系统可以获得有关词,句⼦等的句法和语义信息来对分词歧义进⾏判断,它模拟来⼈对句⼦的理解过程,这种分词⽅法需要⼤量的语⾔知识和信息,由于汉语⾔知识的笼统、复杂性,难以将各种语⾔信息组成及其可以直接读取的形式,因此⽬前基于理解的分词系统还在试验阶段。
基于统计的机器学习算法这类⽬前常⽤的算法是HMM,CRF,SVM,深度学习等算法,⽐如stanford,Hanlp分词⼯具是基于CRF算法。
ik-analyzer 用法 -回复
ik-analyzer 用法-回复ikanalyzer是一个中文分词工具,可以将中文文本切分成一个个独立的词语,是实现中文自然语言处理任务的重要工具之一。
它具有易于使用、高性能和准确的特点,被广泛应用于搜索引擎、信息检索、文本分析等领域。
1. ikanalyzer的安装要使用ikanalyzer,首先需要将其安装到你的项目中。
ikanalyzer是基于Java开发的,可以通过Maven或手动下载jar包的方式进行安装。
以下是Maven安装的步骤:首先,在项目的pom.xml文件中添加如下依赖:xml<dependency><groupId>org.wltea</groupId><artifactId>IKAnalyzer</artifactId><version>2012_u6</version></dependency>然后运行Maven命令进行安装:bashmvn install2. ikanalyzer的基本用法安装完成后,我们可以开始使用ikanalyzer进行中文分词。
下面是一个简单的示例代码:javaimport org.wltea.analyzer.core.IKSegmenter;import org.wltea.analyzer.core.Lexeme;import java.io.StringReader;public class IkanalyzerExample {public static void main(String[] args) throws Exception { String text = "这是一个ikanalyzer的示例。
";StringReader reader = new StringReader(text);IKSegmenter segmenter = new IKSegmenter(reader, true);Lexeme lexeme;while ((lexeme = segmenter.next()) != null) {System.out.print(lexeme.getLexemeText() + " ");}}}以上代码中,首先将待分词的文本传入一个StringReader对象中,然后创建IKSegmenter对象,将StringReader对象和一个布尔值(用于控制是否使用智能分词)传给IKSegmenter的构造函数。
IKAnalyzer中文分词器介绍
IKAnalyzer3.2.8中文分词器介绍2012年3月2日1.IKAnalyzer简介IKAnalyzer是一个开源基于JA V A语言的轻量级的中文分词第三方工具包,从2006年推出已经经历了三个较为完整的版本,目前最新版本为3.2.8,它基于lucene为应用主体,但是,它也支持脱离lucene,成为一个独立的面向JA V A的分词工具。
2.IKAnalyzer结构图3.IKAnalyzer特性a.算法采用“正向迭代最细粒度切分算法”,支持细粒度和最大词长两种分词方式,速度最大支持80W字/秒(1600KB/秒)。
b.支持多子处理器分析模式:中文、数字、字母,并兼容日文、韩文。
c.较小的内存占用,优化词库占有空间,用户可自定义扩展词库。
d.扩展lucene的扩展实现,采用歧义分析算法优化查询关键字的搜索排列组合,提高lucene检索命中率。
4.关键类介绍org.wltea.analyzer.lucene.IKAnalyzerIK分词主类,基于Lucene的Analyzer接口实现。
org.wltea.analyzer.lucene.IKQueryParserIK分词器提供的Query解析、构造工具类,其中parseMultiField函数(所有的重载函数)为关键函数。
org.wltea.analyzer.IKSegmentationIK分词器的核心类,真正分词的实现类。
5.IK分词算法理解根据作者官方说法IK分词器采用“正向迭代最细粒度切分算法”,分析它的源代码,可以看到分词工具类IKQueryParser起至关重要的作用,它对搜索关键词采用从最大词到最小词层层迭代检索方式切分,比如搜索词:“中华人民共和国成立了”,首先到词库中检索该搜索词中最大分割词,即分割为:“中华人民共和国”和“成立了”,然后对“中华人民共和国”切分为“中华人民”和“人民共和国”,以此类推。
最后,“中华人民共和国成立了”切分为:“中华人民| 中华| 华人| 人民| 人民共和国| 共和国| 共和| 成立| 立了”,当然,该切分方式为默认的细粒度切分,若按最大词长切分,结果为:“中华人民共和国| 成立| 立了”。
ES优化中文分词器
ES优化中⽂分词器⽬录⼀、ES优化1.限制内存1.启动内存最⼤是32G2.服务器⼀半的内存全都给ES3.设置可以先给⼩⼀点,慢慢提⾼4.内存不⾜时1)让开发删除数据2)加节点3)提⾼配置5.关闭swap空间2.⽂件描述符1.配置⽂件描述符[root@db02 ~]# vim /etc/security/limits.conf* soft memlock unlimited* hard memlock unlimited* soft nofile 131072* hard nofile 1310722.普通⽤户[root@db02 ~]# vim /etc/security/limits.d/20-nproc.conf* soft nproc 65535root soft nproc unlimited[root@db02 ~]# vim /etc/security/limits.d/90-nproc.conf* soft nproc 65535root soft nproc unlimited3.语句优化1.条件查询时,使⽤term查询,减少range的查询2.建索引的时候,尽量使⽤命中率⾼的词⼆、中⽂分词器 ik0.引出# 为什么有中⽂分词器如下案例所⽰,在搜索“中国”时,会将⼀个整体拆分开进⾏搜索,变成“中”“国”,在搜索时并不是精确匹配,会将很多不相关搜索全部显⽰,同理,在百度搜索栏中,如果搜索中国这个词汇,结果显⽰很多只包含了这个字,⽽不是词,会将很多没⽤信息⼀同展⽰,所以就有了中⽂分词器,将需要组合成⼀个词的句⼦,存储成⼀个整体,在搜索时直接精确匹1.插⼊数据POST /index/_doc/1{"content":"美国留给伊拉克的是个烂摊⼦吗"}POST /index/_doc/2{"content":"公安部:各地校车将享最⾼路权"}POST /index/_doc/3{"content":"中韩渔警冲突调查:韩警平均每天扣1艘中国渔船"}POST /index/_doc/4{"content":"中国驻洛杉矶领事馆遭亚裔男⼦枪击嫌犯已⾃⾸"}2.查询数据POST /index/_search{"query" : { "match" : { "content" : "中国" }},"highlight" : {"pre_tags" : ["<tag1>", "<tag2>"],"post_tags" : ["</tag1>", "</tag2>"],"fields" : {"content" : {}}}}#查看结果,会获取到带中字和国字的数据,我们查询的词被分开了,所以我们要使⽤ik中⽂分词器3.配置中⽂分词器0)注意:1.集群内所有的机器需要全部安装插件2.创建模版之前要先单独创建索引1)创建模板⽅式1)安装插件# 1.配置中⽂分词器cd /usr/share/elasticsearch./bin/elasticsearch-plugin install https:///medcl/elasticsearch-analysis-ik/releases/download/v6.6.0/elasticsearch-analysis-ik-6.6.0.zip2)创建索引与mapping# 1.创建索引# 2.创建模板curl -XPOST http://localhost:9200/news/text/_mapping -H 'Content-Type:application/json' -d'{"properties": {"content": {"type": "text","analyzer": "ik_max_word","search_analyzer": "ik_smart"}}}'# 3.插⼊测试数据POST /news/text/1{"content":"美国留给伊拉克的是个烂摊⼦吗"}POST /news/text/2{"content":"公安部:各地校车将享最⾼路权"}POST /news/text/3{"content":"中韩渔警冲突调查:韩警平均每天扣1艘中国渔船"}POST /news/text/4{"content":"中国驻洛杉矶领事馆遭亚裔男⼦枪击嫌犯已⾃⾸"}# 4.再次查询数据发现已经能识别中⽂了POST /news/_search{"query" : { "match" : { "content" : "中国" }},"highlight" : {"pre_tags" : ["<tag1>", "<tag2>"],"post_tags" : ["</tag1>", "</tag2>"],"fields" : {"content" : {}}}}# 注意:ik_max_word: 会将⽂本做最细粒度的拆分,⽐如会将“中华⼈民共和国国歌”拆分为“中华⼈民共和国,中华⼈民,中华,华⼈,⼈民共和国,⼈民,⼈,民,共和国,共和,和,国国,国歌”,会穷尽各种可能的组合;ik_smart: 会做最粗粒度的拆分,⽐如会将“中华⼈民共和国国歌”拆分为“中华⼈民共和国,国歌”。
IK分词器用法
IK分词器⽤法⼀)新建maven⼯程1.1)项⽬结构如下:1.2)IKAnalyzer.cfg.xml内容如下:<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE properties SYSTEM "/dtd/properties.dtd"><properties><comment>IK Analyzer 扩展配置</comment><entry key="ext_dict">extend.dic;</entry><entry key="ext_stopwords">stopword.dic;</entry></properties>1.3)在pom⽂件中添加如下jar<dependency><groupId>com.janeluo</groupId><artifactId>ikanalyzer</artifactId><version>2012_u6</version></dependency><dependency><groupId>org.apache.lucene</groupId><artifactId>lucene-core</artifactId><version>4.7.2</version></dependency>⼆)新建类IKAnalyzerSupplyProductpublic class IKAnalyzerSupplyProduct {public static String startIKAnalyzer(String line) throws IOException{IKAnalyzer analyzer = new IKAnalyzer();// 使⽤智能分词analyzer.setUseSmart(true);// 打印分词结果try {return printAnalysisResult(analyzer, line);} catch (Exception e) {e.printStackTrace();}finally{if(analyzer!=null){analyzer.close();}}return null;}private static String printAnalysisResult(Analyzer analyzer, String keyWord)throws Exception {String resultdata="";String infoData="";if(keyWord!=""&&keyWord!=null){TokenStream tokenStream = analyzer.tokenStream("content",new StringReader(keyWord));tokenStream.addAttribute(CharTermAttribute.class);tokenStream.reset();while (tokenStream.incrementToken()) {CharTermAttribute charTermAttribute = tokenStream.getAttribute(CharTermAttribute.class);String dest= NumberUtil.checkNumber(charTermAttribute.toString().replace("-",""));boolean mailres= RegExpUtil.isEmail(charTermAttribute.toString());boolean hpres=RegExpUtil.isHomepage(charTermAttribute.toString());boolean num=RegExpUtil.isNum(charTermAttribute.toString().replace("-", "").replace("qq", "").replace("QQ", "").replace("+", ""));if(dest!="CELLPHONE"&&dest!="FIXEDPHONE"&&mailres==false&&hpres==false&&num==false){infoData=infoData+" "+charTermAttribute.toString();}}if(infoData!=""&&infoData!=null){resultdata=resultdata+infoData.trim()+"\r\n";}else{resultdata="";}}return resultdata;}public static void main(String[] args) {String word ="8⽉17⽇,“雄鹰突击-2018”中国和⽩俄罗斯特种部队联合训练,在北部战区陆军某综合训练基地完成综合演练并举⾏结训仪式。
分词技术说明
分词技术文档说明一.基本介绍1.分词技术就是搜索引擎针对用户提交查询的关键词串进行的查询处理后根据用户的关键词串用各种匹配方法进行分词的一种技术。
2.数据处理我们要理解分词技术先要理解一个概念。
那就是查询处理,当用户向搜索引擎提交查询后,搜索引擎接收到用户的信息要做一系列的处理。
步骤如下所示:(1).首先是到数据库里面索引相关的信息,这就是查询处理。
那么查询处理又是如何工作的呢?很简单,把用户提交的字符串没有超过3个的中文字,就会直接到数据库索引词汇。
超过4个中文字的,首先用分隔符比如空格,标点符号,将查询串分割成若干子查询串。
举个例子。
“什么是百度分词技术” 我们就会把这个词分割成“ 什么是,百度,分词技术。
”这种分词方法叫做反向匹配法。
(2).然后再看用户提供的这个词有没有重复词汇如果有的话,会丢弃掉,默认为一个词汇。
接下来检查用户提交的字符串,有没有字母和数字。
如果有的话,就把字母和数字认为一个词。
这就是搜索引擎的查询处理。
3.分词原理(1).正向最大匹配法就是把一个词从左至右来分词。
举个例子:”不知道你在说什么”这句话采用正向最大匹配法是如何分的呢?“不知道,你,在,说什么”。
(2).反向最大匹配法"不知道你在说什么"反向最大匹配法来分上面这段是如何分的。
“不,知道,你在,说,什么”,这个就分的比较多了,反向最大匹配法就是从右至左。
(3).就是最短路径分词法。
就是说一段话里面要求切出的词数是最少的。
“不知道你在说什么”最短路径分词法就是指,把上面那句话分成的词要是最少的。
“不知道,你在,说什么”,这就是最短路径分词法,分出来就只有3个词了。
(4).双向最大匹配法。
而有一种特殊的情况,就是关键词前后组合内容被认为粘性相差不大,而搜索结果中也同时包含这两组词的话,百度会进行正反向同时进行分词匹配。
二.技术说明Lucene是一个开放源代码的全文检索引擎工具包,但它不是一个完整的全文检索引擎,而是一个全文检索引擎的架构,提供了完整的查询引擎和索引引擎,部分文本分析引擎ik :采用了特有的“正向迭代最细粒度切分算法“,多子处理器分析模式。
IKAnalyzer中文分词器介绍
IKAnalyzer3.2.8中文分词器介绍2012年3月2日1.IKAnalyzer简介IKAnalyzer是一个开源基于JA V A语言的轻量级的中文分词第三方工具包,从2006年推出已经经历了三个较为完整的版本,目前最新版本为3.2.8,它基于lucene为应用主体,但是,它也支持脱离lucene,成为一个独立的面向JA V A的分词工具。
2.IKAnalyzer结构图3.IKAnalyzer特性a.算法采用“正向迭代最细粒度切分算法”,支持细粒度和最大词长两种分词方式,速度最大支持80W字/秒〔1600KB/秒〕。
b.支持多子处理器分析模式:中文、数字、字母,并兼容日文、韩文。
c.较小的内存占用,优化词库占有空间,用户可自定义扩展词库。
d.扩展lucene的扩展实现,采用歧义分析算法优化查询关键字的搜索排列组合,提高lucene检索命中率。
4.关键类介绍org.wltea.analyzer.lucene.IKAnalyzerIK分词主类,基于Lucene的Analyzer接口实现。
org.wltea.analyzer.lucene.IKQueryParserIK分词器提供的Query解析、构造工具类,其中parseMultiField函数〔所有的重载函数〕为关键函数。
org.wltea.analyzer.IKSegmentationIK分词器的核心类,真正分词的实现类。
5.IK分词算法理解根据作者官方说法IK分词器采用“正向迭代最细粒度切分算法”,分析它的源代码,可以看到分词工具类IKQueryParser起至关重要的作用,它对搜索关键词采用从最大词到最小词层层迭代检索方式切分,比方搜索词:“中华人民共和国成立了”,首先到词库中检索该搜索词中最大分割词,即分割为:“中华人民共和国”和“成立了”,然后对“中华人民共和国”切分为“中华人民”和“人民共和国”,以此类推。
最后,“中华人民共和国成立了”切分为:“中华人民| 中华| 华人| 人民| 人民共和国| 共和国| 共和| 成立| 立了”,当然,该切分方式为默认的细粒度切分,假设按最大词长切分,结果为:“中华人民共和国| 成立| 立了”。
ES分词器详解
ES分词器详解⼀、分词器1、作⽤:①切词 ②normalizaton(提升recall召回率:能搜索到的结果的⽐率)2、分析器①character filter:分词之前预处理(过滤⽆⽤字符、标签等,转换⼀些&=>and 《Elasticsearch》=> Elasticsearch A、HTML Strip Character Filter:html_strip escaped_tags 需要保留的html标签PUT my_index{"settings": {"analysis": {"char_filter": {"my_char_filter":{"type":"html_strip", "escaped_tags":["a"]}},"analyzer": {"my_analyzer":{"tokenizer":"keyword","char_filter":"my_char_filter"}}}}}测试分词 GET my_index/_analyze { "analyzer": "my_analyzer", "text": "liuyucheng <a><b>edu</b></a>" } B、Mapping Character Filter:type mappingPUT my_index{"settings": {"analysis": {"analyzer": {"my_analyzer": {"tokenizer": "keyword","char_filter": ["my_char_filter"]}},"char_filter": {"my_char_filter": {"type": "mapping","mappings": ["٠ => 0","١ => 1","٢ => 2","٣ => 3","٤ => 4","٥ => 5","٦ => 6","٧ => 7","٨ => 8","٩ => 9"]}}}}测试分词POST my_index/_analyze{"analyzer": "my_analyzer","text": "My license plate is ٢٥٠١٥"} C、Pattern Replace Character Filter:正则替换type pattern_replace PUT my_index{"settings": {"analysis": {"analyzer": {"my_analyzer": {"tokenizer": "standard","char_filter": ["my_char_filter"]}},"char_filter": {"my_char_filter": {"type": "pattern_replace","pattern": "(\\d+)-(?=\\d)","replacement": "$1_"}}}}}测试分词POST my_index/_analyze{"analyzer": "my_analyzer","text": "My credit card is 123-456-789"}②tokenizer:分词器③token filter:时态转换、⼤⼩写转换、同义词转换、语⽓词处理等 ⽐如:has=>have him=>he apples=>apple the/oh/a=>⼲掉 A、⼤⼩写 lowercase token filterGET _analyze{"tokenizer" : "standard","filter" : ["lowercase"],"text" : "THE Quick FoX JUMPs"}GET /_analyze{"tokenizer": "standard","filter": [{"type": "condition","filter": [ "lowercase" ],"script": {"source": "token.getTerm().length() < 5"}}],"text": "THE QUICK BROWN FOX"} B、停⽤词 stopwords token filterPUT /my_index{"settings": {"analysis": {"analyzer": {"my_analyzer":{"type":"standard","stopwords":"_english_"}}}}}GET my_index/_analyze"analyzer": "my_analyzer","text": "Teacher Ma is in the restroom"} C、分词器 tokenizer :standardGET /my_index/_analyze{"text": "江⼭如此多娇,⼩姐姐哪⾥可以撩","analyzer": "standard"} D、⾃定义 analysis,设置type为custom告诉Elasticsearch我们正在定义⼀个定制分析器。
IKAnalyzer中文分词器V2012使用手册
代码样例 IKAnalyzerDemo
/** * IK 中文分词 版本 5.0 * IK Analyzer release 5.0 * * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version
| 量级 | 的 | 中文 | 分词 | 工具包 | 工具 | 包 | 从 | 2006 | 年 | 12 | 月 | 推出 | 1.0 | 版 | 开始 | ikanalyzer | 已经 | 推出 | 出了 | 3 | 个 | 大 | 版本 文本原文 2: 张三说的确实在理 智能分词结果: 张三 | 说的 | 确实 | 在理 最细粒度分词结果: 张三 | 三 | 说的 | 的确 | 的 | 确实 | 实在 | 在理 文本原文 3 公路局正在治理解放大道路面积水问题 智能分词结果: 公路局 | 正在 | 治理 | 解放 | 大道 | 路面 | 积水 | 问题 最细粒度分词结果: 公路局 | 公路 | 路局 | 正在 | 治理 | 理解 | 解放 | 放大 | 大道 | 道路 | 路面 | 面积 | 积水 | 问题 文本原文 4 据路透社报道,印度尼西亚社会事务部一官员星期二(29 日)表示,日惹市附近当地时间 27 日晨 5 时 53 分发生的里氏 6.2 级地震已经造成至少 5427 人死亡,20000 余人受伤,近 20 万人无家可归。 智能分词结果: 据 | 路透社 | 报道 | 印度尼西亚 | 社会 | 事务部 | 一 | 官员 | 星期二 | 29 日 | 表示 | 日 | 惹 | 市 | 附近 | 当地时间 | 27 日 | 晨 | 5 时 | 53 分 | 发生 | 的 | 里氏 | 6.2 级 |
ik分词处理过程(源码分析)
IK的整个分词处理过程首先,介绍一下IK的整个分词处理过程:1. Lucene的分词基类是Analyzer,所以IK提供了Analyzer的一个实现类IKAnalyzer。
首先,我们要实例化一个IKAnalyzer,它有一个构造方法接收一个参数isMaxWordLength,这个参数是标识IK是否采用最大词长分词,还是采用最细粒度切分两种分词算法。
实际两种算法的实现,最大词长切分是对最细粒度切分的一种后续处理,是对最细粒度切分结果的过滤,选择出最长的分词结果。
2. IKAnalyzer类重写了Analyzer的createComponents方法,这个方法接收两个参数,fieldName 和输入流reader,其中fieldName是Lucene的属性列,是对文本内容进行过分词处理和创建索引之后,索引对应的一个名称,类似数据库的列名。
因为IK仅仅涉及分词处理,所以对fieldName没有进行任何处理,所以此处不做任何讨论。
3. createComponents方法在Lucene对文本输入流reader进行分词处理时被调用,在IKAnalyzer的createComponents方法里面仅仅实例化了一个IKTokenizer类,该类继承了Lucene的Tokenizer类。
并重写了incrementToken方法,该方法的作用是处理文本输入流生成token,也就是Lucene的最小词元term,在IK里面叫做Lexeme。
4. 在IKtokenizer的构造方法里面实例化了IK里面最终要的分词类IKSegmenter,也称为主分词器。
它的构造方法接收两个参数,reader和isMaxWordLength。
5. IKSegmenter的构造方法里面,主要做了三个工作,创建上下文对象AnalyzeContext,加载词典,创建子分词器。
6. AnalyzeContext主要是存储分词结果集和记录分词处理的游标位置。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
2.4 Lucene 用户快速入门 代码样例 IKAnalyzerDemo
/** * IK Analyzer Demo * @param args */ import java.io.IOException; import org.apache.lucene.analysis.Analyzer; import org.apache.lucene.document.Document; import org.apache.lucene.document.Field; import org.apache.lucene.index.CorruptIndexException; import org.apache.lucene.index.IndexWriter; import org.apache.lucene.search.IndexSearcher; import org.apache.lucene.search.Query; import org.apache.lucene.search.ScoreDoc;
| 2006 | 年 | 12 | 月 | 推出 | 1.0 个大 | 个 | 版本
3 |
作者博客: 分词结果:
电子邮件:linliangyi2005@
作者 | 博客 | | linliangyi | 2007 | javaeye | com | 电子邮 件 | 邮件地址 | linliangyi2005@ | linliangyi | 2005 | gmail | com
Directory directory = null; IndexWriter iwriter = null; IndexSearcher isearcher = null; try { //建立内存索引对象 directory = new RAMDirectory(); iwriter = new IndexWriter(directory, analyzer, true , IndexWriter.MaxFieldLength.LIMITED); Document doc = new Document(); doc.add(new Field(fieldName, text, Field.Store.YES, Field.Index.ANALYZED)); iwriter.addDocument(doc); iwriter.close(); //实例化搜索器 isearcher = new IndexSearcher(directory); //在索引器中使用IKSimilarity相似度评估器 isearcher.setSimilarity(new IKSimilarity());
�
�
优化的词典存储,更小的内存占用。支持用户词典扩展定义 针对 Lucene 全文检索优化的查询分析器 IKQueryParser(作者吐血推荐);采用歧义分 析算法优化查询关键字的搜索排列组合,能极大的提高 Lucene 检索的命中率。
1.3 分词效果示例
文本原文 1: IKAnalyzer 是一个开源的,基于 java 语言开发的轻量级的中文分词工具包。从 2006 年 12 月推出 1.0 版开始, IKAnalyzer 已经推出了 3 个大版本。 分词结果: ikanalyzer | 是 | 一个 | 一 | 个 | 开源 | 的 | 基于 | java | 语言 | 开发 | 级 | 量级 | 的 | 中文 | 分词 | 工具包 | 工具 | 从 | 版 | 开始 | ikanalyzer | 已经 | 文本原文 2: 永和服装饰品有限公司 分词结果: 永和 | 和服 | 服装 | 装饰品 | 装饰 | 饰品 | 有限 | 文本原文 3: 公司 推出 | 出了 | 的 | 轻量
import org.apache.lucene.search.TopDocs; import org.apache.lucene.store.Directory; import org.apache.lucene.store.LockObtainFailedException; import org.apache.lucene.store.RAMDirectory; //引用IKAnalyzer3.0 的类 import org.wltea.analyzer.lucene.IKAnalyzer; import org.wltea.analyzer.lucene.IKQueryParser; import org.wltea.analyzer.lucene.IKSimilarity; /** * @author linly * */ public class IKAnalyzerDemo { public static void main(String[] args){ //Lucene Document的域名 String fieldName = "text"; //检索内容 String text = "IK Analyzer 是一个结合词典分词和文法分词的中文分词开源 工具包。它使用了全新的正向迭代最细粒度切分算法。"; //实例化IKAnalyzer 分词器 Analyzer analyzer = new IKAnalyzer();
它的安装部署十分简单, 将 IKAnalyzer3.X.jar 部署于项目的 lib 目 录 中; IKAnalyzer.cfg.xml 与 ext_stopword.dic 文件放置在代码根目录(对于 web 项目,通常是 WEB-INF/classes 目录,同 hibernate、log4j 等配置文件相同)下即可。
IKAnalyzer 中文分词器 V3.2 使用手册
目录
1.IK Analyzer 3.X 介绍....................................................................................................... 2 2.使用指南..............................................................................................................................5 3.词表扩展........................................................................................................................... 12 4.针对 solr 的分词器应用扩展.........................................................................................14 5.关于作者........................................................................................................................... 16
执行结果:
命中:1
内 容:Document<stored/uncompressed,indexed,tokenized<text:IK Analyzer 是 一个结合词典分词和文法分词的中文分词开源工具包。 它使用了全新的正向迭代最细粒度切分算 法。>>
2.3 安装部署
IK Analyzer 安装包包含: 1. 2. 3. 4. 《IKAnalyzer 中文分词器 V3.X 使用手册》 (即本文档) IKAnalyzer3.X.jar(主 jar 包) IKAnalyzer.cfg.xml(分词器扩展配置文件) ext_stopword.dic(扩展的 stopword 词典,3.2 以上版本提供)
1.IK Analyzer 3.X 介绍
IK Analyzer 是一个开源的,基于 java 语言开发的轻量级的中文分词工具包。从 2006 年 12 月推出 1.0 版开始, IKAnalyzer 已经推出了 3 个大版本。最初,它是以开源项目 Luence 为应用主体的,结合词典分词和文法分析算法的中文分词组件。新版本的 IK Analyzer 3.X 则发展为面向 Java 的公用分词组件,独立于 Lucene 项目,同时提供了对 Lucene 的默认优化实现。
1.1 IK Analyzer 3.X 结构设计
1.2 IK Analyzer 3.X 特性
� � 采用了特有的“正向迭代最细粒度切分算法“,具有 60 万字/秒的高速处理能力。 采用了多子处理器分析模式,支持:英文字母(IP 地址、Email、URL)、数字(日期 , 常用中文数量词,罗马数字,科学计数法),中文词汇(姓名、地名处理)等分词处理 。
String keyword = "中文分词工具包"; //使用IKQueryParser查询分析器构造Query对象 Query query = IKQueryParser.parse(fieldName, keyword); //搜索相似度最高的5条记录 TopDocs topDocs = isearcher.search(query , 5); System.out.println("命中:" + topDocs.totalHits); //输出结果 ScoreDoc[] scoreDocs = topDocs.scoreDocs; for (int i = 0; i < topDocs.totalHits; i++){ Document targetDoc = isearcher.doc(scoreDocs[i].doc); System.out.println("内容:" + targetDoc.toString()); } } catch (CorruptIndexException e) { e.printStackTrace(); } catch (LockObtainFailedException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally{ if(isearcher != null){ try { isearcher.close(); } catch (IOException e) { e.printStackTrace(); } } if(directory != null){ try { directory.close(); } catch (IOException e) { e.printStackTrace(); } } } } }