elasticsearch教程--中文分词器作用和使用(转载)
发表日期:2019-06-13 09:29作者:admin
您现在的位置:宠物鼠 > 宠物酒店 > 正文

elasticsearch教程--中文分词器作用和使用(转载)

  概述  本文都是基于elasticsearch安装教程中的elasticsearch安装目录(/opt/environment/)为范例  环境准备  ·全新最小化安装的  ·  认识中文分词器  在博文elasticsearch分词器中提到elasticsearch能够快速的通过搜索词检索出对应的文章归功于倒排索引,下面通过中文举例看看倒排索引。   中文分词器作用以及效果  中文分词器是做什么的呢what通过名字就知道了啊,为什么还要问。 。 。

下面通过三个文档示例,看看它是如何分词的  文档1:我爱伟大的祖国  文档2:祝福祖国强大繁  文档3:我爱蓝天白云  经过中文分词器,以上文档均会根据分词规则,将文档进行分词后的结果如下:  注意:不同的分词规则,分词结果不一样,选择根据分词器提供的分词规则找到适合的分词规则  文档1分词结果:[我,爱,伟大,的,祖国]  文档2分词结果:[祝福,祖国,强大,繁盛]  文档3分词结果:[我,爱,蓝天白云,蓝天,白云]  通过上面的分词结果,发现拆分的每个词都是我们熟知的词语,但是如果不使用中文分词,就会发现上面的文档把每个字拆分成了一个词,对我们中文检索很不友好。   再看倒排索引  看到上面中文分词器结果,就会有新的疑问,使用中文分词器那样分词效果有什么好处呢答案就是根据分词建立词汇与文档关系的倒排索引。 这步都是es帮我们做的,下面通过"我","爱","祖国"三个词看看倒排索引,如下图:  elasticsearch教程--中文分词器作用和使用  通过上图中的倒排索引,我们搜索"祖国"时,es通过倒排索引可以快速的检索出文档1和文档3。

如果没有中文分词器,搜索"祖国"就会被拆分"祖""国"两个词的倒排索引,就会把包含"祖"的文档都检索出来,很明显就会和我们想要的结果大相径庭。

  常用的中文分词器  SmartChineseAnalysis:官方提供的中文分词器,  IKAnalyzer:免费开源的java分词器,目前比较流行的中文分词器之一,简单,稳定,想要特别好的效果,需要自行维护词库,支持自定义词典  结巴分词:开源的python分词器,github有对应的java版本,有自行识别新词的功能,支持自定义词典  Ansj中文分词:基于n-Gram+CRF+HMM的中文分词的java实现,免费开源,支持应用自然语言处理  hanlp:免费开源,国人自然处理语言牛人无私风险的  个人对以上分词器进行了一个粗略对比,如下图:  elasticsearch教程--中文分词器作用和使用  截止到目前为止,他们的分词准确性从高到低依次是:  hanlpansj结巴IKSmartChineseAnalysis  结合准确性来看,选用中文分词器基于以下考虑:  官方的SmartChineseAnalysis直接可以不考虑了  对搜索要求不高的建议选用IK学习成本低,使用教程多,还支持远程词典  对新词识别要求高的选用结巴分词  Ansj和hanlp均基于自然处理语言,分词准确度高,活跃度来讲hanlp略胜一筹  博主选用的hanlp分词器,目前线上运行结果来看准确性满足需求  下面就写一下博主对IKAnalyzer和hanlp分词器的使用  IKAnalyzer  截止目前,IK分词器插件的优势是支持自定义热更新远程词典。

  安装ik分词器插件  es插件安装教程参考这里  ik的es插件地址:  博主使用的es版本是,下载时要注意对应es版本  在线安装ikes插件命令:  #/opt/apps//bin//medcl/elasticsearch-analysis-ik/releases/download//  查看插件安装列表  #sudo/opt/apps//bin/elasticsearch-pluginlist  IK配置  ik安装完毕后配置文件在{ES_HOME}/config目录下,本例目录是/opt/apps//config/analysis-ik/  elasticsearch教程--中文分词器作用和使用  IK自定义词典维护  文本词典  ik文本词典均是以dic结尾,换行符作为分隔,示例如下:  elasticsearch教程--中文分词器作用和使用  重启es,注意一定要重启es  通过前面教程中,我们发现短语"我爱祖国",会被分词为,"我","爱","祖国"三个词,如果按照上面词典定义后,"我爱祖国"会被当成一个词语不被分词。

  热更新远程词典  热更新远程词典的优势是,修改词典后无需重启es。

每分钟加载一次  修改IK配置文件如下:  elasticsearch教程--中文分词器作用和使用  其中location是指一个url,比如/getCustomDict,该请求只需满足以下两点即可完成分词热更新。

  1·该http请求需要返回两个头部(header),一个是Last-Modified,一个是ETag,这两者都是字符串类型,只要有一个发生变化,该插件就会去抓取新的分词进而更新词库。   2·该http请求返回的内容格式是一行一个分词,换行符用即可。

  满足上面两点要求就可以实现热更新分词了,不需要重启ES实例。

  可以将需自动更新的热词放在一个UTF-8编码的.txt文件里,放在nginx或其他简易httpserver下,当.txt文件修改时,httpserver会在客户端请求该文件时自动返回相应的Last-Modified和ETag。

可以另外做一个工具来从业务系统提取相关词汇,并更新这个.txt文件。   本文将远程词典存入数据库,示例如下:  elasticsearch教程--中文分词器作用和使用  hanlp中文分词器  截止目前,hanlp词库是最大,分词效果是最好。

使用hanlp分词插件之前,建议先点击此处学习一下hanlp  安装hanlp中文分词器插件  hanlp的elasticsearch插件众多,这里选用了这个,这个插件支持的分词模式要多一些,截止现在此插件最新支持,由于插件中包含很大的词典文件,建议此插件采用离线安装  elasticsearch教程--中文分词器作用和使用  查看插件安装列表  elasticsearch教程--中文分词器作用和使用  注意:这里有一个hanlp的警告,es版本是,但是插件允许的es版本是  上面的警告需要修改一下插件配置,本方法仅限于博主对应的版本哟,其他版本没去试验  #sudovim/opt/apps//plugins/analysis-hanlp/  将=修改为=,再次查看插件列表  elasticsearch教程--中文分词器作用和使用  ok,安装成功,安装完毕后必须重启es哟必须重启es哟必须重启es哟  hanlp配置  elasticsearch教程--中文分词器作用和使用  hanlp自定义词典  hanlp语料库词典  hanlp语料库地址为:/hankcs/HanLP/releases,本文截止目前最新版本为  1·下载数据包/release/  2·解压到配置文件中key为root的值对应目录下  3·根据词典名调整hanlp配置中的词典配置,尤其注意CustomDictionaryPath的配置,以前采用的应用名,现在采用的中文名称  4·删除二进制缓存文件rm-r/opt/apps//plugins/analysis-hanlp/data/dictionary/custom/,如果自定义词典变更了,一点要执行这一步,否则词典不生效  5·一定要重启es!!!一定要重启es!!!一定要重启es!!!  hanlp自定义热更新词典  1·在配置文件中key为root的值对应目录下找到目录custom,进入此目录  2·创建一个txt文件,示例:  3·在文件中添加词,分隔符为换行符,词典格式为:[单词][词性A][A的频次],如图:  elasticsearch教程--中文分词器作用和使用  4·删除二进制缓存文件rm-r/opt/apps//plugins/analysis-hanlp/data/dictionary/custom/,如果自定义词典变更了,一点要执行这一步,否则词典不生效  一定要重启es!!!一定要重启es!!!一定要重启es!!!。

上一篇:柬埔寨“神童”梦想成真来中国读书,曾因会说15国语言红遍网络

下一篇:各擅胜场 合作共赢 沪港演绎新时代“双城记”

软件下载
更多
补丁下载
更多
宠物鼠下载
培训报名  论坛讨论 
图书订购  软件订购 
图书查找  中心站介绍 
联系方式
软件发行:021-600000000000
技术支持:021-宠物鼠首页
资料发行:021-600000000000
广告业务:021-600000000000