Elasticsearch学习分享(五)

        本期来学习下比较有意思的内容——IK分词器。

        一说到分词,让我感到倍感亲切,想起了研究生阶段的课题——自然语言处理。作为AI的一个核心领域,分词任务算是一项重要而又比较基础的工作,是很多下游任务的基础。在NLP领域,有很多的软件可以使用,我所接触过的,比如DeepNLP、kcws、jieba、LTP、THULAC、NLPIR、SnowNLP、SpaCy、pyhanlp、FoolNLTK、pyltp、StanfordCoreNLP、ID-CNN-CWS、Genius、FudanNLP、nltk、hanLP、IKAnalyzer,太多了,这里就不啰嗦了,还有很多。今天的主角就是IKAnalyzer。

        那么,为什么要分词呢?信息检索是NLP的一个重要领域,该领域的核心便是搜索技术,而分词技术则是搜索的基石。搜索引擎相比传统的数据库而言,其优势一方面在于查询速度快;另一方面则是更好的可以理解用户,不仅包括各种高级的NLP技术,比较基础的则是通过分词技术来完成。分词技术不仅简单而且高效。因此,既然es作为一个信息检索服务器,那么本期将介绍其中比较重要的插件——IK分词器,在介绍的同时,会和主流的NLP分词软件进行对比。

        IK提供了两个分词算法:ik_smart和ik_max_word,其中ik_smart为最少切分,ik_max_word为最细粒度划分。下面介绍ik分词器开发的整个流程:

1、下载ik分词器

下载网址:Releases · medcl/elasticsearch-analysis-ik · GitHub

2、下载完成后,放入到elasticsearch插件中即可。

注意:IK分词器的版本一定要和elasticsearch和kibana的版本要一致,否则会出现闪退异常。

 3、重启观察ES,可以发现ik分词器被加载了

4、在Kibana中进行测试

可以看到中文分词的结果还是挺不错的。

利用jieba分词,代码如下:

import jieba

sent = "姚明进入nba名人堂"

# 类似于ik_smart算法
result_smart = ' '.join(jieba.cut(sent, cut_all=False))

print("精确模式:"+result_smart)

 运行结果:

可以看到,与ik的分词结果是相同的。

另外一种算法是ik_max_word,该方法的切分原理是尽可能细的切分,下面是ik_max_word的分词效果的部分截图。

同样,在jieba中也有对应的方法——搜索引擎模式,代码和结果如下:

import jieba

sent = "姚明进入nba名人堂"

# 类似于ik_max_word算法
result_max_word = ' '.join(jieba.cut(sent, cut_all=True))

print("搜索引擎模式:"+result_max_word)

可以看到,分词的效果与ik分词器的ik_max_word算法略有不同,比如,jieba分词并没有将“堂”单独分出来,但总体上是比较相近的。

        ik分词器的原理是基于词典和规则的。对于一些词典中不存在的词,还可以手动加载自定义的词典,加载的方法如下:

1.首先,从以下目录,创建自定义的词典:

2.接下来,把自定义的词放进词典my_dict.dic中,比如,我们想让nba名人堂作为一个独立的词,如图:

3.在“IKAnalyzer.cfg.xml”配置文件下指定自己的词典名。

保存之后,重启es即可。

        重启之后,进行测试,以ik_smart模式为例,结果如下:

可以看到,得到了我们期望的效果。

同理,jieba也提供了同样的功能,操作如下:

import jieba

sent = "姚明进入nba名人堂"

jieba.load_userdict("./mydict.txt")
# 加载词典后的ik_smart算法
result_smart_dict = ' '.join(jieba.cut(sent, cut_all=False))

print("加载词典后的精确分词模式:"+result_smart_dict)

与ik分词器加载词典后,进行分词的结果一致。

        对于中文分词,ik分词器是最常用的分词器之一,另外,除了中文分词器,英文的分词器也有很多,比如,es中的默认分词器standard analyzer,language analyzer,stop analyzer等等,使用方法比较简单,通过在"analyzer"中指定对应的参数即可,英文分词相比中文,要简单许多。分词技术博大精深,是NLP非常基础而又重要的领域,对NLP下游任务的表现起着关键作用。关于elasticsearch的分词,本期暂时聊这么多,如果有对NLP技术感兴趣的,欢迎交流。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

CSAIWQYB

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值