返回 导航

大数据

hangge.com

Elasticsearch - 中文分词器的集成与使用教程2(增加停用词、自定义词库)

作者:hangge | 2025-05-09 08:32

一、增加停用词

1,IK 分词器默认效果

(1)下面命令使用 IK 分词器测试中文分词效果:
curl -XPOST "http://node1:9200/emp/_analyze?pretty" -H 'Content-Type: application/json' -d '{"text":"我们是中国人","tokenizer":"ik_max_word"}'

(2)返回的结果如下,可以看到在分出来的词语中有一个“”,这个词语其实可以被认为是一个停用词,在分词时是不需要切分出来的。在这里被切分出来了,那也就意味着,IK 分词器在过滤停用词时没有把它过滤掉。

2,在 IK 分词器中增加停用词

(1)IK 分词器的停用词默认在 stopword.dic 这个词库文件中,在这个文件中目前都是一些英文停用词。

(2)我们可以编辑 stopword.dic 这个词库文件,把中文停用词添加进去。比如添加“”这个停用词。
注意:集群里所有节点都需要修改。我们可以修改一个然后使用 scp 命令把这个文件改动同步到集群中的其他节点上。
vi config/analysis-ik/stopword.dic

(3)接着,重启集群让配置生效。我们再次使用 IK 分词器测试中文分词效果,可以发现“”已经被作为停用词不再被切分出来了:
curl -XPOST "http://node1:9200/emp/_analyze?pretty" -H 'Content-Type: application/json' -d '{"text":"我们是中国人","tokenizer":"ik_max_word"}'

二、自定义词库

1,IK 分词器默认效果

(1)对于一些特殊的词语,在分词时也要能够识别到它们,例如公司产品的名称或网络上新流行的词语。比如我们使用 IK 分词器测试分词效果:
curl -XPOST "http://node1:9200/emp/_analyze?pretty" -H 'Content-Type: application/json' -d '{"text":"欢迎访问航歌","tokenizer":"ik_max_word"}'

(2)结果发现,IK 分词器会把“航歌”分为“”和“”这两个词语。因为这个词语并不是通用的词语,所以 IK 分词器识别不出来也正常。要想让 IK 分词器将“航歌”识别出来,则需要自定义词库了,即把我们自己造的词语添加到词库中。

2,自定义词库文件

(1)我们切换到 es 用户,进入 elasticsearch-analysis-ik 插件对应的配置文件目录,创建一个自定义词库文件 my.dic
su es
cd config/analysis-ik
vi my.dic

(2)修改 elasticsearch-analysis-ik 插件的配置文件 IKAnalyzer.cfg.xml
vi config/analysis-ik/IKAnalyzer.cfg.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
<properties>
        <comment>IK Analyzer 扩展配置</comment>
        <!--用户可以在这里配置自己的扩展字典 -->
        <entry key="ext_dict">my.dic</entry>
         <!--用户可以在这里配置自己的扩展停止词字典-->
        <entry key="ext_stopwords"></entry>
        <!--用户可以在这里配置远程扩展字典 -->
        <!-- <entry key="remote_ext_dict">words_location</entry> -->
        <!--用户可以在这里配置远程扩展停止词字典-->
        <!-- <entry key="remote_ext_stopwords">words_location</entry> -->
</properties>
注意事项:
  • 切记不要随意新增 entry,随意断增的 entry 是不被 IK 识别的,并且 entry 的名称也不能乱改,否则也不会识别。
  • 如果需要指定多个自定义词库文件,则需要使用分号(;)隔开。例如 <entry key="ext_dict">my.dic;your.dic</entry>
  • 如果后期想增加自定义停用词库,则按照这个思路进行添加即可,只不过停用词库需要配置到 key="ext_stopwords" 这个 entry 中。

(3)最后将自定义词库文件 my.dic 和修改好的 IKAnalyzer.cfg.xml 配置文件复制到集群中的所有节点中,然后重启集群。

3.验证自定义词库的分词效果

(1)我们再次使用 IK 分词器测试分词效果:
curl -XPOST "http://node1:9200/emp/_analyze?pretty" -H 'Content-Type: application/json' -d '{"text":"欢迎访问航歌","tokenizer":"ik_max_word"}'

(2)现在发现“航歌”这个词语可以被识别出来了,说明自定义词库生效了。

附:常见的中文停用词汇总

的
一
不
在
人
有
是
为
以
于
上
他
而
后
之
来
及
了
因
下
可
到
由
这
与
也
此
但
并
个
其
已
无
小
我
们
起
最
再
今
去
好
只
又
或
很
亦
某
把
那
你
乃
它
吧
被
比
别
趁
当
从
到
得
打
凡
儿
尔
该
各
给
跟
和
何
还
即
几
既
看
据
距
靠
啦
了
另
么
每
们
嘛
拿
哪
那
您
凭
且
却
让
仍
啥
如
若
使
谁
虽
随
同
所
她
哇
嗡
往
哪
些
向
沿
哟
用
于
咱
则
怎
曾
至
致
着
诸
自
评论

全部评论(0)

回到顶部