使用ES对中文文章进行分词,并进行词频统计排序
前言:首先有这样一个需求,需要统计一篇10000字的文章,需要统计里面哪些词出现的频率比较高,这里面比较重要的是如何对文章中的一段话进行分词,例如“北京是×××的首都”,“北京”,“×××”,“中华”,“华人”,“人民”,“*”,“首都”这些是一个词,需要切分出来,而“京是”“民共”这些就不是有意义的词,所以不能分出来。这些分词的规则如果自己去写,是一件很麻烦的事,利用开源的ik分词,就可以很容易的做到。并且可以根据分词的模式来决定分词的颗粒度。
ik_max_word: 会将文本做最细粒度的拆分,比如会将“×××国歌”拆分为“×××,中华人民,中华,华人,人民*,人民,人,民,*,共和,和,国国,国歌”,会穷尽各种可能的组合;
ik_smart: 会做最粗粒度的拆分,比如会将“×××国歌”拆分为“×××,国歌”。
一:首先要准备环境
如果有es环境可以跳过前两步,这里我假设你只有一台刚装好的centos6.x系统,方便你跑通这个流程。
(1)安装jdk。
(2)安装es
(3)安装ik分词器
在github上面下载1.10.2版本的ik分词,注意:es版本为2.4.2,兼容的版本为1.10.2。
(4)配置es
(5)启动es
(6)检查es节点状态
二:检测分词功能
(1)创建测试索引
(2)创建mapping
(3)测试数据
返回内容:
三:开始导入真正的数据
(1)将中文的文本文件上传到linux上面。
注意:确保文本文件编码为utf-8,否则后面传到es会乱码。
命令模式下输入:set fineencoding,即可看到fileencoding=utf-8。
如果是 fileencoding=utf-16le,则输入:set fineencoding=utf-8
(2)创建索引和mapping
创建索引
创建mapping #对要分词的字段message进行分词器设置和fielddata设置。
(3)使用logstash 将文本文件写入到es中
安装logstash
配置logstash
启动
查看stdout输出,就能判断是否写入es中。
(4)检查索引中是否有数据
四:开始计算分词的词频,排序
(1)查询所有词出现频率最高的top10
返回结果
(2)查询所有两字词出现频率最高的top10
返回
(3)查询所有两字词且不包含“女”字,出现频率最高的top10
返回
还有更多的分词策略,例如设置近义词(设置“番茄”和“西红柿”为同义词,搜索“番茄”,“西红柿”也会出来),设置拼音分词(搜索“zhonghua”,“中华”也可以搜索出来)等等。
上一篇: Centos7搭建主从DNS服务器
下一篇: c#NAudio 录音功能实现