大家好我是迷途,一个在互联网行业,摸爬滚打的学子。热爱学习,热爱代码,热爱技术。热爱互联网的一切。再也不怕elasticsearch系列,帅途会慢慢由浅入深,为大家剖析一遍,各位大佬请放心,虽然这个系列帅途有时候更新的有点慢,但是绝对不会烂尾!如果你喜欢本系列的话,就快点赞关注收藏安排一波吧~
最近帅途沉迷算法,突然发现在leetcode上面,最简单的题帅途都要冥思苦想好久。流下了没技术的泪水。最近es系列更新时间线拖得很长。可能后面还会出一部分es拓展方面的文章,例如elk、es-sql、es的日志等。至于集成IK分词器,本来帅途是不怎么想写的,因为实在太简单!拆箱即用。但是有的小伙伴最近在跟帅途聊天的时候提到了这个问题。所以这里还是单独列一篇文章讲解IK分词器的集成和使用吧。当然各位如果有更多想看或者想一起学习的东西,也可私信帅途,说不定下一篇文章就是你推荐的哦~
分词器,是将用户输入的一段文本,分析成符合逻辑的一种工具。英文本身是以单词为单位, 单词与单词之间, 句子之间通常是空格、逗号、句号分隔. 因而对于英文, 可以简单的以空格来判断某个字符串是否是一个词, 比如: I love China, love和China很容易被程序处理。
但是中文是以字为单位的, 字与字再组成词, 词再组成句子. 中文: 我爱中国, 电脑不知道“爱中”是一个词, 还是“中国”是一个词?所以我们需要一定的规则来告诉电脑应该怎么切分, 这就是中文分词器所要解决的问题。
常见的有一元切分法“我爱中国”: 我、爱、中、国. 二元切分法“我爱中国”: 我爱、爱中、中国。
Hightman开发的一套基于词频词典的机械中文分词引擎,它能将一整段的汉字基本正确的切分成词。采用的是采集的词频词典,并辅以一定的专有名称,人名,地名,数字年代等规则识别来达到基本分词,经小范围测试大概准确率在 90% ~ 95% 之间,已能基本满足一些小型搜索引擎、关键字提取等场合运用。45Kb左右的文本切词时间是0.026秒,大概是1.5MB文本/秒,支持PHP4和 PHP 5。
这可是最早的中文开源分词项目之一,ICTCLAS在国内973 专家组组织的评测中活动获得了第一名,在第一届国际中文处理研究机构SigHan组织的评测中都获得了多项第一名。ICTCLAS3.0分词速度单机 996KB/s,分词精度98.45%,API不超过200KB,各种词典数据压缩后不到3M.ICTCLAS全部采用C/C++编写,支持Linux、 FreeBSD及Windows系列操作系统,支持C/C++、C#、Delphi、Java等主流的开发语言。
HTTPCWS 是一款基于HTTP协议的开源中文分词系统,目前仅支持Linux系统。HTTPCWS 使用“ICTCLAS 3.0 2009共享版中文分词算法”的API进行分词处理,得出分词结果。HTTPCWS 将取代之前的 PHPCWS 中文分词扩展。 庖丁解牛分词: Java 提供lucence 接口,仅支持Java语言。
一个中文词典开源项目,提供一份以汉语拼音为中文辅助的汉英辞典,截至2009年2月8 日,已收录82712个单词。其词典可以用于中文分词使用,而且不存在版权问题。Chrome中文版就是使用的这个词典进行中文分词的。
IKAnalyzer 是一个开源的,基于java语言开发的轻量级的中文分词工具包。从 2006年12月推出1.0版开始,IKAnalyzer 已经推出了3个大版本。最初,它是以开源项目Luence为应用主体的,结合词典分词和文法分析算法的中文分词组件。新版本的IKAnalyzer3.0则发展为面向Java的公用分词组件,独立于Lucene项目,同时提供了对 Lucene的默认优化实现。
Paoding (庖丁解牛)基于Java的开源中文分词组件,提供lucene和solr 接口,具有极 高效率 和 高扩展性 。引入隐喻,采用完全的面向对象设计,构思先进。高效率:在PIII 1G内存个人机器上,1秒 可准确分词 100万 汉字。采用基于 不限制个数 的词典文件对文章进行有效切分,使能够将对词汇分类定义。能够对未知的词汇进行合理解析
MMSEG4J 基于Java的开源中文分词组件,提供lucene和solr 接口 1、mmseg4j 用 Chih-Hao Tsai 的 MMSeg 算法实现的中文分词器,并实现 lucene 的 analyzer 和 solr 的TokenizerFactory 以方便在Lucene和Solr中使用。 2、MMSeg 算法有两种分词方法:Simple和Complex,都是基于正向最大匹配。Complex 加了四个规则过虑。官方说:词语的正确识别率达到了 98.41%。mmseg4j 已经实现了这两种分词算法。
下载地址:IK分词器下载,由于帅途这里ES是7.3.2版本所有,我这里下载7.3.2版本分词器。
2、将我们下载好的分词器解压到ES的/plugins文件夹中。
在ES的安装目录中,找到plugins文件夹,将我们下载好的ik分词器解压到plugins文件夹中。注意,如果是集群环境,每台es都需要安装ik分词器。否者业务分发时候可能造成分词异常。
3、重启elastic search服务
// 在es的bin文件夹中启动es
// ES_JAVA_OPTS="-Xms2g -Xmx2g":es启动参数,如果不填默认读取config文件夹中jvm.options配置
// -d :后台启动
ES_JAVA_OPTS="-Xms2g -Xmx2g" ./elasticsearch -d
4、测试分词器安装是否成功
http://112.74.48.31:9200/_analyze --POST
{
"analyzer": "ik_max_word",
"text": "我伪装的很简单、强悍、坦然"
}
要配置分词词典我们需要,找我们plugins文件夹中找到我们的IK分词器,在config文件中找到IKAnalyzer.cfg.xml文件。
在上面的配置文件中我们可以看到,帅途分别配置了一个拓展字典和一个停用词字段。分别是new_word_dictionary.dic和stop_word_dictionary.dic,然后在对应config配置目录下新建对应词典即可。
接下来咋门来测试一下,帅途这里搜索这样一句话:帅途最近沉迷英雄联盟。
上图我们可以看到,帅途、英雄联盟这两个词是没有分词的。然后我们去修改我们的拓展词词典new_word_dictionary。
修改之后重启es,再次搜索:帅途最近沉迷英雄联盟。
由此我们可以看到,我们拓展词典的词语就可以正常分词了。过滤词典与拓展词典一致。小伙伴们可以参考瞎拓展词典配置
看到这里不禁有小伙伴有疑问,如果我配置自定义词典,每次配置后都需要重启节点,并且如果是集群环境那么我有100个节点就需要配置一百次词典,所以IK为我们提供了远程拓展词典,本质上就是通过一个HTTP请求访问远程词典,然后加载到我们的es当中,并且无需重启es。
帅途这里就直接通过tomcat来进行提供,小伙伴们可以根据业务需要自己提供接口。再tomcat访问页下新建文件remote_extension.txt,在里面新增我们的拓展分词。
由于帅途用的是公网环境所以使用花生壳映射一下本机8080端口,以供ES服务器调用。
由上图可以看出,我们配置远程字典访问接口之后,ES每隔一段时间会为我们重新加载词典,帅途这里配置的是拓展字典,过滤词字典也是同理。
IK分词器的配置和使用帅途就为大家列举到这里了。其实配置IK分词器就三个步骤。
最后,大家可能发现帅途的更新很不稳定,有时候很久才会更新一篇文章,其实不是帅途不想更新,是有时候实在太忙,然后其实写一篇技术文章真的是比较费心血的,不太熟悉的东西要查阅大量相关资料,毕竟写出来的东西至少要对自己负责嘛。所以希望各位大佬看到这了,就点个赞关注一下再走吧。如有不足也请指出。一起共同成长~
另外私信帅途,还有免费的学习资料送给你哟~