elasticsearch教程--中文分词器作用和使用

2019-06-16 13:33

  在博文elasticsearch分词器中提到elasticsearch能够快速的通过搜索词检索出对应的文章归功于倒排索引,下面通过中文举例看看倒排索引。

  中文分词器是做什么的呢? what? 通过名字就知道了啊,为什么还要问。。。下面通过三个文档示例,看看它是如何分词的

  注意:不同的分词规则,分词结果不一样,选择根据分词器提供的分词规则找到适合的分词规则

  通过上面的分词结果,发现拆分的每个词都是我们熟知的词语, 但是如果不使用中文分词,就会发现上面的文档把每个字拆分成了一个词,对我们中文检索很不友好。

  看到上面中文分词器结果,就会有新的疑问,使用中文分词器那样分词效果有什么好处呢? 答案就是根据分词建立词汇与文档关系的倒排索引。这步都是es帮我们做的,下面通过我,爱,祖国三个词看看倒排索引,如下图:

  通过上图中的倒排索引,我们搜索祖国时,es通过倒排索引可以快速的检索出文档1和文档3。如果没有中文分词器,搜索祖国就会被拆分祖国两个词的倒排索引, 就会把包含祖的文档都检索出来,很明显就会和我们想要的结果大相径庭。

  IKAnalyzer: 免费开源的java分词器,目前比较流行的中文分词器之一,简单,稳定,想要特别好的效果,需要自行维护词库,支持自定义词典

  结巴分词: 开源的python分词器,github有对应的java版本,有自行识别新词的功能,支持自定义词典

  Ansj中文分词: 基于n-Gram+CRF+HMM的中文分词的java实现,免费开源,支持应用自然语言处理

  Ansj和hanlp均基于自然处理语言,分词准确度高,活跃度来讲hanlp略胜一筹

  通过前面教程中,我们发现短语我爱祖国,会被分词为, 我,爱,祖国三个词, 如果按照上面词典定义后, 我爱祖国会被当成一个词语不被分词。

  其中 location 是指一个 url,比如 ,该请求只需满足以下两点即可完成分词热更新。

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

  2·该 http 请求返回的内容格式是一行一个分词,换行符用 \n 即可。

  可以将需自动更新的热词放在一个 UTF-8 编码的 .txt 文件里,放在 nginx 或其他简易 http server 下,当 .txt 文件修改时,http server 会在客户端请求该文件时自动返回相应的 Last-Modified 和 ETag。可以另外做一个工具来从业务系统提取相关词汇,并更新这个 .txt 文件。

  截止目前,hanlp词库是最大,分词效果是最好。使用hanlp分词插件之前,建议先点击此处学习一下hanlp

  hanlp的elasticsearch插件众多,这里选用了这个,这个插件支持的分词模式要多一些,截止现在此插件最新支持6.3.2,由于插件中包含很大的词典文件,建议此插件采用离线安装

  上面的警告需要修改一下插件配置, 本方法仅限于博主对应的版本哟,其他版本没去试验

  3·根据词典名调整hanlp配置中的词典配置,尤其注意CustomDictionaryPath的配置,以前采用的应用名,现在采用的中文名称

  1·在配置文件中key为root的值对应目录下找到目录custom,进入此目录

  3·在myDic.txt文件中添加词,分隔符为换行符, 词典格式为: [单词] [词性A] [A的频次] ,如图:

  一定要重启es!!!一定要重启es!!!一定要重启es!!!返回搜狐,查看更多

分享到:
相关阅读
文章评论 · 所有评论
评论请遵守当地法律法规
点击加载更多
© 2016-2018 12小时新闻网 http://www.12hnews.com/ 中国互联网举报中心
违法和不良信息举报:lobtom@163.com