229  
查询码:00000884
ELK实践-中文分词、词频统计及词云呈现
作者: 潘帅 于 2021年09月16日 发布在分类 / 人防组 / 人防后端 下,并于 2021年09月16日 编辑
ELK Kibana IK分词 中文分词 词云

近期进行项目总结对项目过程资料进行分析,其中包括对多份会议纪要的内容进行分析,使用ELK并结合中文分词器IK进行关键字的提取和统计分析。



1.Elasticsearch安装IK中文分词器

进入Elasticsearch目录输入命令行安装IK分词器



.\elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.14.0/elasticsearch-analysis-ik-7.14.0.zip


安装完成后重启elasticsearch,并查看插件是否安装成功


.\elasticsearch-plugin list


analysis-ik即为安装成功的插件。


2.创建index索引及mapping映射


2.1创建index

启动Kibana,打开开发工具界面,输入命令创建index,命名为meeting


PUT meeting


2.2创建mapping

为字段content配置分词器,其中analyzer是导入数据时用的分词器,search_analyzer是查询时用的分词器,同时启用fielddata进行分词后的词频统计。

注意:fielddata启用会对堆内存占用较大,谨慎使用,推荐使用term_vector方式进行词频计算


PUT meeting/_mapping
{
  "properties": {
    "content": {
      "type": "text",
      "analyzer": "ik_max_word",
      "search_analyzer": "ik_smart",
      "fielddata":"true",
      "fields" : {
        "keyword" : {
          "type" : "keyword",
          "ignore_above" : 256
        }
      }
    }
  }
}

2.3导入数据

仍然采用CSV格式文件导入会议纪要,由于原始会议纪要为word文档,所以花了一些时间将文档处理成CSV文件。

启动logstash导入数据,目标索引为meeting。


.\logstash.bat -f ..\config\hnrf-meeting.conf
其中配置文件hnrf-meeting.conf为




 input {
 stdin { }
 file{
		path => "D:/Projects/2021-智慧人防/项目总结/会议纪要.csv"
		start_position  => "beginning"
		sincedb_path => "D:/WebSites/ELK/History"
	 }
 }

 filter {
	csv {
		separator => ","
		columns => ["recorddate","theme","person","tag","content"]
	}
	date {
		match => ["recorddate","yyyy-MM-dd"]
	}
	mutate {
		remove_field => ["message"]
	}
 }

 output {
     stdout {
        codec => json_lines
    }
	elasticsearch {
		hosts => "localhost:9200"
		index => "meeting"
		document_type => "_doc"
	}
}


导入后端数据示例为:


3.使用聚合查询词频并创建可视化图云

3.1使用聚合查询词频

查询命令为


GET meeting/_search
{
  "size": 0, 
  "aggs": {
    "messages": {
      "terms": {
        "field": "content",
        "size": 100
      }
    }
  }
}
查询结构示例为


3.2创建可视化词云

打开kibana,选择可视化库Visualize,点击按钮“创建可视化”,选择“基于聚合”

选择“标签云图”


选择索引meeting,添加存储桶,设置聚合类型为“词”,字段为“content”

刷新后可以看到生成的词云


附1.ik_max_word 和 ik_smart的区别 

ik_max_word: 会将文本做最细粒度的拆分,比如会将“中华人民共和国国歌”拆分为“中华人民共和国,中华人民,中华,华人,人民共和国,人民,人,民,共和国,共和,和,国国,国歌”,会穷尽各种可能的组合,适合 Term Query;

ik_smart: 会做最粗粒度的拆分,比如会将“中华人民共和国国歌”拆分为“中华人民共和国,国歌”,适合 Phrase 查询。

附2.添加自定义词典

使用分词器进行词频统计时会发现有一些不必要的分词或者不满足要求的分词,比如一些语气词、介词等(与、和、的、从、而),以及一些专有名词(公众版APP、数据采集)。可以添加自定义词典定义专有名词并去除一些不必要的分词。

IK插件安装后会自动在elasticsearch的config目录下生成文件夹analysis-ik,包含了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_main.dic</entry>
	 <!--用户可以在这里配置自己的扩展停止词字典-->
	<entry key="ext_stopwords">my_stopword.dic</entry>
	<!--用户可以在这里配置远程扩展字典 -->
	<!-- <entry key="remote_ext_dict">words_location</entry> -->
	<!--用户可以在这里配置远程扩展停止词字典-->
	<!-- <entry key="remote_ext_stopwords">words_location</entry> -->
</properties>


其中my_main.dic为自己的扩展字典


my_stopword.dic为自己的扩展停止字典


注意:IK分词器插件安装后或自定义词典修改后都需要重启ES使其生效



 推荐知识

 历史版本

修改日期 修改人 备注
2021-09-16 23:15:03[当前版本] 潘帅 1.1
2021-09-16 23:13:22 潘帅 1.0

 附件

附件类型

PNGPNG

预览图

知识分享平台 -V 4.8.7 -wcp