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 视频不定期更新中:

推荐阅读


相关实践学习
流水线运行出错排查难?AI帮您智能排查
本实验将带您体验云效流水线Flow的智能排查能力,只需短短1-2分钟,即可体验AI智能排查建议。
ALPD云架构师系列 - 云原生DevOps36计
如何把握和运用云原生技术,撬动新技术红利,实现持续、安全、高效和高质量的应用交付,并提升业务的连续性和稳定性,这是云原生时代持续交付共同面对的机会和挑战。本课程由阿里云开发者学堂和阿里云云效共同出品,是ALPD方法学云架构师系列的核心课程之一,适合架构师、企业工程效能负责人、对DevOps感兴趣的研发、测试、运维。 课程目标 前沿技术:了解云原生下DevOps的正确姿势,享受云原生带来的技术红利 系统知识:全局视角看软件研发生命周期,系统学习DevOps实践技能 课程大纲: 云原生开发和交付:云研发时代软件交付的挑战与云原生工程实践 云原生开发、运行基础设施:无差别的开发、运行环境 自动部署:构建可靠高效的应用发布体系 持续交付:建立团队协同交付的流程和流水线 质量守护:构建和维护测试和质量守护体系 安全保障:打造可信交付的安全保障体系 建立持续反馈和持续改进闭环
相关文章
|
JavaScript 前端开发
使用typora生成时序图
掌握生产力工具,使用typora和mermaid生成时序图
1232 0
|
机器学习/深度学习 数据采集 存储
【机器学习】机器学习流程之收集数据
【机器学习】机器学习流程之收集数据
663 1
|
消息中间件 Kubernetes Cloud Native
云原生时代 RocketMQ 运维管控的利器 - RocketMQ Operator
RocketMQ Operator 现已加入 OperatorHub,正式进入 Operator 社区。本文将从实践出发,结合案例来说明,如何通过 RocketMQ Operator 在 Kubernetes 上快速搭建一个 RocketMQ 集群,并提供一些 RocketMQ 集群管理功能包括 Broker 扩容等。
云原生时代 RocketMQ 运维管控的利器 - RocketMQ Operator
|
并行计算 TensorFlow 算法框架/工具
【Deepin 20系统】解决Check failed: err == cudaSuccess || err == cudaErrorInvalidValue Unexpected CUDA erro
本文介绍了在使用Nvidia RTX 2070 GPU和TensorFlow 2时,解决GPU内存不足错误的方法,包括杀死占用内存的进程、重置GPU以及重启设备等方案。
330 3
|
分布式计算 算法 Hadoop
Hadoop支持的压缩编码
【6月更文挑战第9天】
363 8
|
存储 Prometheus 监控
Prometheus·概述
Prometheus·概述
663 116
|
Ubuntu Linux Docker
Ubuntu22.04上Docker的安装
通过以上详细的安装步骤和命令,您可以在Ubuntu 22.04系统上顺利安装
11312 12
|
搜索推荐 Python Windows
python中对于wordcloud词云生成报错提示的解决
通过搜索印象错误信息:ValueError:Only supported for TrueType fonts,几乎大部分人给出的选项都是让你指定TrueType fonts路径,或者新下载TTF字体,并重新指定,但是这两种解决方案并无法解决报错。 在真正解决问题之前,先来介绍几个与之相关的知识点,对于有经验的人,这样的知识点完全是“小菜”,但是对于初学者,这种知识点就是因为缺少相关实践而无从下手,无从搜索引擎。
|
JavaScript 前端开发 Android开发
JavaScript触摸touch事件
JavaScript触摸touch事件
|
网络协议 数据安全/隐私保护 网络架构
如何在家中使用手机或电脑远程控制公司iStoreOS软路由下的电脑桌面
如何在家中使用手机或电脑远程控制公司iStoreOS软路由下的电脑桌面
876 4

热门文章

最新文章