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
- 我们把 my.dic 词库文件添加到 key="ext_dict" 这个 entry 中。
<?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)