Kibana 8.X 如何做出靠谱的词云图?

简介: Kibana 8.X 如何做出靠谱的词云图?

1、问题产生

Kibana 实现一个词云效果并不复杂,甚至可以说非常简单。

大致可以分成如下几个步骤:

  • 步骤1:已有索引待做词云的 text 类型字段设置:fielddata 为true,以便基于分词结果聚合操作。
  • 步骤2:在 8.X 的 kibana 的 Data Views关联索引。
  • 步骤3:在dashboard控制面板选择 Aggregation Based 下的 Tag cloud,选择步骤1设定的字段,选择好时间范围,词云就可以生成。

以构造微博数据(假数据)为例,词云效果如下所示:

问题来了!怎么那么多单字效果,有没有办法去掉,让词云效果相对靠谱可靠?

2、方案探讨

从目标出发思考,既然分词结果大局已定。把单字的分词全部删除掉不就可以了吗?于是有了方案一。

方案一:Kibana 控制面板过滤掉单字索引

加上后,看看效果:

并不乐观,因为我们的方案仅是将能看到的 Top 50 里的单字给去掉了。

新的 Top 50 单字仍然会出现。

也就是说:方案一仅“治疗表明”,不能由表及里。

这个问题曾困惑我很久,我一度认为,把单字穷举出来,全部删掉即可。

后来,思来死去,发现思考问题方向不对,应该从“源头”解决问题。

于是,有了方案二。

2.2 方案二:分词阶段过滤掉单字词项

中文分词我们依然选择的 medcl 大佬开源的 IK 分词下的 ik_smart 粗粒度分词器。ik 中文分词插件支持两种分词效果:

其一:ik_max_word,细粒度分词。

其二:ik_smart, 粗粒度分词。

原有的分词已经构建完毕,如何基于已有成熟分词再构建新的分词器呢?

这时候,脑海里要对分词 analysis 的三部分组成要“门儿清”。

我们的 tokenizer 已选定 ik_smart,不能修改。可动的只有:character filtertoken filter,而能实现仅保留 两个 或者两个以上分词的效果的需要借助:token filter 下的 length token filter 实现。

length token filter 的本质如其定义:

emoves tokens shorter or longer than specified character lengths. ”

中文释义为:“删除比指定字符长度更短或更长的标记”。

接下来,我们实战一把。

3、基于自定义分词实现靠谱词云效果

如前方案二所述,在分词处做“手脚”,能实现自主、可控的分词粒度。

3.1 步骤1:自定义分词

如下 DSL 实现了自定义索引。

在原有 ik_smart 分词器的基础上,添加了“bigger_than_2” 过滤器,实现了将小于2个字符的 分词项过滤掉的效果。

PUT weibo_index
{
  "settings": {
    "analysis": {
      "analyzer": {
        "ik_smart_ext": {
          "tokenizer": "ik_smart",
          "filter": [
            "bigger_than_2"
          ]
        }
      },
      "filter": {
        "bigger_than_2": {
          "type": "length",
          "min": 2
        }
      }
    }
  },
  "mappings": {
    "properties": {
      "title": {
        "type": "text",
        "analyzer": "ik_smart_ext",
        "fielddata": true
      },
      "insert_time": {
        "type": "date"
      }
    }
  }
}

3.2 步骤2:重新生成索引且reindex数据

POST _reindex
{
  "source": {"index": "weibo_index_20220901"},
  "dest": {"index": "weibo_index_20220904"}
}

3.3 步骤3:重新生成词云

依然不是最完美的词云效果,但是,比未处理前已经好很多。

4、小结

解决问题的时候,多从源头思考,换一个思路,效果会好很多。

大家有任何 ElasticStack 相关技术问题都欢迎留言交流。

ElasticStack 视频不定期更新中:

推荐阅读


相关实践学习
2分钟自动化部署人生模拟器
本场景将带你借助云效流水线Flow实现人生模拟器小游戏的自动化部署
SVN版本控制系统
SVN是现在软件开发之中的主流软件版本控制工具,在工作之中利用SVN可以有效的解决多人开发的代码管理问题,本课程将为读者讲解SVN服务器的配置以及基于MyEclipse的SVN客户端插件的配置与使用,并且在讲解之中着重讲解了冲突的产生于解决。
相关文章
|
4天前
|
Linux iOS开发 UED
探索Qt折线图之美:一次详尽的多角度解析
探索Qt折线图之美:一次详尽的多角度解析
193 0
|
4天前
|
数据可视化 API Python
画图实战-Python实现某产品全年销量数据多种样式可视化
画图实战-Python实现某产品全年销量数据多种样式可视化
40 0
|
4天前
|
机器学习/深度学习 自然语言处理 数据可视化
基于Python+词云图+情感分析对某东上完美日记的用户评论分析
基于Python+词云图+情感分析对某东上完美日记的用户评论分析
97 0
基于Python+词云图+情感分析对某东上完美日记的用户评论分析
|
11月前
|
移动开发 数据可视化 HTML5
R可视化学习—词云图
词云。又称文字云。“词云”就是通过形成“关键词云层”或“关键词渲染”,对网络文本中出现频率较高的“关键词”的视觉上的突出,它会过滤掉大量的文本信息,使浏览网页者只要一眼扫过文本就可以领略文本的主旨。
116 0
|
存储 缓存 自然语言处理
推荐系统[一]:超详细知识介绍,一份完整的入门指南,解答推荐系统相关算法流程、衡量指标和应用,以及如何使用jieba分词库进行相似推荐
推荐系统[一]:超详细知识介绍,一份完整的入门指南,解答推荐系统相关算法流程、衡量指标和应用,以及如何使用jieba分词库进行相似推荐
推荐系统[一]:超详细知识介绍,一份完整的入门指南,解答推荐系统相关算法流程、衡量指标和应用,以及如何使用jieba分词库进行相似推荐
|
存储 程序员 uml
【程序员必备】绘制架构图,流程图神器推荐
好的图形可以帮我们更好的表达自己,帮我们理清逻辑
|
分布式计算 算法 数据可视化
房源画像实验演示(上)|学习笔记
快速学习房源画像实验演示(上)
370 0
房源画像实验演示(上)|学习笔记
pyecharts第四节、漏斗图
pyecharts第四节、漏斗图
123 0
pyecharts第四节、漏斗图
基于Bokeh库,手把手教你制作子弹图和瀑布图!
基于Bokeh库,手把手教你制作子弹图和瀑布图!
基于Bokeh库,手把手教你制作子弹图和瀑布图!
|
机器学习/深度学习 数据采集 数据可视化
一份热力图可视化代码使用教程
本文介绍了CAM、GradCAM的原理和缺陷,介绍了如何使用GradCAM算法实现热力图可视化,介绍了目标检测、语义分割、transformer模型等其它类型任务的热力图可视化。 欢迎关注公众号CV技术指南,专注于计算机视觉的技术总结、最新技术跟踪、最新论文解读、各种技术教程、CV招聘信息发布等。关注公众号可邀请加入免费版的知识星球和技术交流群。
一份热力图可视化代码使用教程