CSDN热榜分析4:生成词云图

news2025/1/16 0:02:08

文章目录

    • 函数封装
    • UI设计
    • 输出词云

热榜分析系列: CSDN热榜分析🔥 UI界面🔥 领域热榜

函数封装

词云图的绘制功能早在最开始做热榜分析的时候就已经实现了,但需要依赖matplotlib来画图,而并没有直接导出功能,而且所有代码写在脚本里,并没有封装成函数。

首先用jieba分词,并把所有长度大于2的单词输出。

import jieba
# 通过jieba
def getWords(blogs):
    text = ','.join([b[1] for b in blogs])
    words = jieba.lcut(text)
    w2 = [w for w in words if len(w)>1] # 取出长度大于1的词
    return [w for w in w2 if w not in STOP_LIST]

其中STOP_LIST是停用词列表,被做成了全局变量

STOP_LIST = ['项目', '使用', '实现', '模型', '数据', '系统', '平台', '原理', '自学', '博客', '推荐', '实践', '实战', '技术', '基于', '如何', '什么']

单词导出后,则使用WordCloud进行词云绘制。函数如下,其中to_file可以把词云图导出为图像。

from wordcloud import WordCloud
def saveCloud(words, path, width=800, height=450, font=None)
    if not font : 
        font = r"C:\Windows\Fonts\simhei.ttf"
    cloud = WordCloud(width=width, height=height, font_path=font)
    cloud.generate(" ".join(words))
    cloud.to_file(path)

UI设计

由于词云图在保存时预留了较多的个性化选项,包括宽高之类的,所以词云绘制功能需要多加一些,故而更改setFrmHeat的布局代码如下

def setFrmHeat(self, frmHeat):
    # 省略。。。
    pack = dict(side=tk.LEFT, padx=3)
    ttk.Separator(frmHeat,
        orient=tk.VERTICAL).pack(fill=tk.Y, **pack)
    ttk.Button(frmHeat, width=8, text="导出词云",
        command = self.btnExportCloud).pack(**pack)
    ttk.Label(frmHeat, text="  尺寸").pack(**pack)
    pSpinbox = dict(from_=100, to=2000, width=5, increment=10)
    self.sbCloudWidth = ttk.Spinbox(frmHeat, **pSpinbox)
    self.sbCloudWidth.pack(**pack)
    self.sbCloudWidth.set(800)
    ttk.Label(frmHeat, text="✖").pack(**pack)
    self.sbCloudHeight = ttk.Spinbox(frmHeat, **pSpinbox)
    self.sbCloudHeight.pack(**pack)
    self.sbCloudHeight.set(450)
    ttk.Button(frmHeat, width=8, text="设置字体",
        command = self.btnSetCloudFont).pack(**pack)

def btnExportCloud(self):
    pass

def btnSetCloudFont(self):
    self.cloudFont = askopenfilename(
        filetypes=[("字体文件", ".font")])

其中self.cloudFont是一个类成员,默认值是None,布局结果如下

在这里插入图片描述

btnExportCloud就是导出词云的用户逻辑,接下来就来实现它

输出词云

考虑到需要输入不同类型的词云,所以先创建一个成员方法,用于输出一种类型的词云,方法如下,其实就是简单地调用getWords和saveCloud函数,并给出反馈信息

def btnExportOneCloud(self, name, wsLst, path, w, h, font):
    words = getWords(wsLst)
    saveCloud(words, pJoin(path, f"{name}.png"), w, h, font)
    self.addLogs(f"{name}词云已输出")
    return words

我们至少要输出三种词云,首先是总榜的词云,然后是领域热榜的词云,最后还要把所有词云的单词作为一个整榜输出。这也就意味着需要调用三次btnExportOneCloud函数:总榜列表调用一次;领域热榜字典,需要在循环中调用一次;最后所有词汇再调用一次。

所以btnExportCloud需要设置一个存储所有单词的列表,每次词云输出后,都要将对应的词汇导入到这个列表中。最终其写法如下

def btnExportCloud(self):
    path = askdirectory()
    if path=="":
        self.infoCSDN.set(f"您未选择文件夹")
        return            
    self.infoCSDN.set(f"词云图将存储在文件夹{path}中")
    allWords = []
    w = int(self.sbCloudWidth.get())
    h = int(self.sbCloudHeight.get())
    font = self.cloudFont
    # 总榜导出总榜
    if self.heatBlogs != []:
        words = self.btnExportOneCloud("总榜", 
            self.heatBlogs, path, w, h, font)
        allWords.extend(words)
    if self.subHeats == {}:
        return  # 如果没有领域热榜,那么总榜就是全榜,所以直接退出

    for k,v in self.subHeats.items():
        words = self.btnExportOneCloud(k, v, path, w, h, font)
        allWords.extend(words)

    saveCloud(allWords, pJoin(path, f"全榜.png"), w, h, font)
    self.addLogs(f"全榜词云已输出")

这个函数分为四个部分,第一部分是读取词云参数,包括存放文件夹、词云尺寸以及字体,并且创建列表allWords,用于存放所有词汇。

第二部分输出总榜词云。

第三部分循环subHeats,正式循环之前,判断一下是否为空,如果没有领域热榜,那么总榜就是全榜,所以直接退出。

最后输出全部榜单,由于已经得到了allWords,所以不必调用btnExportOneCloud,直接用外部函数saveCloud来保存词云。

最后的词云输出如下

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1149216.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

[Unity][VR]透视开发系列3-Passthrough应用的真机测试方法

【视频讲解】 视频讲解地址请关注我的B站。 专栏后期会有一些不公开的高阶实战内容或是更细节的指导内容。 B站地址: https://www.bilibili.com/video/BV1Zg4y1w7fZ/ 我还有一些免费和收费课程在网易云课堂(大徐VR课堂): https://study.163.com/provider/480000002282025/…

Apollo上机实践:一次对自动驾驶技术的亲身体验

上机实践 概述自动驾驶通信分布式系统开发模式开发工具 自动驾驶感知传感器特性感知流程及算法部署感知模型 自动驾驶决策规划决策规划流程和算法使用 Dreamview 进行控制在环的规划调试开发规划场景和算法 福利活动 主页传送门:📀 传送 概述 Apollo 是…

【3妹教我学历史-秦朝史】1 秦朝初期

插: 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。 坚持不懈,越努力越幸运,大家一起学习鸭~~~ 2哥 :3妹,在干嘛呢 3妹:读书呢…

不定长顺序表3

六.判空函数 刚刚忘记参数判断了 七.查找函数——在顺序表PS中 查找第一个key值,找到返回key值的下标,没有找到返回-1 不管能否扩容,查找都是在有效数据内部查找,所以可以把定长顺序表的查找Search函数搬过来 测试也跟定长的一样…

PCA9865 模块使用

本来是用来控制灯的,若用来控制舵机等,需外接电源 arduino arduino stm32 引脚A4为SDA,引脚A5为SCL asrpro 使用softiic库,使用arduino的 Adafruit_PWMServoDriver驱动库 进行修改 若要封装,需将Adafruit_PWMServoD…

Python实现文件压缩和解压功能

目录 一、常见的压缩格式 1、ZIP格式 2、RAR格式 3、7Z格式 二、压缩算法 1、Huffman编码 2、LZ77算法 3、Bzip2算法 三、解压算法 1、解压zip文件 2、解压rar文件 3、解压7z文件 总结 Python是一种功能强大的编程语言,具有易学易用的特点。它提供了许…

2021-arxiv-GPT Understands, Too

2021-arxiv-GPT Understands, Too Paper: https://arxiv.org/abs/2103.10385 Code: https://github.com/THUDM/P-tuning Prompt 简单理解 举例来讲,今天如果有这样两句评论: 1. 什么苹果啊,都没有苹果味&#xff0c…

DevChat:VSCode中基于大模型的AI智能编程助手

文章目录 1. 前言2. 安装2.1 注册新用户2.2 在VSCode中安装DevChat插件2.3 设置Access Key 3. 实战使用4. 总结 1. 前言 DevChat是由Merico公司精心打造的AI智能编程助手。它利用了最先进的大语言模型技术,像人类开发者一样高效地理解需求,并提供最佳的代…

Star History 九月开源精选 |开源 GitHub Copilot 替代

虽然大火了近一年,但是截至目前 AI 唯一破圈的场景是帮助写代码(谷歌云旗下的 DORA 年度报告也给 AI 泼了盆冷水)。不过对于软件开发来说,生成式人工智能绝对已经是新的标配。 本期 Star History 收集了一些开源 GitHub Copilot …

双十一好物提前看!双十一买什么最省心、好用又实惠的好物推荐

双十一即将来临,你是否已经开始为购物车准备填满各种好物?一年一度大促购物节可千万要清点好需要买刚需好物有哪些,毕竟错过了这个促销活动的时间就要等下一年,辛苦一年了,就等着双十一大促的时候买点好东西讨好一下自…

一文读懂多云CDN

本文带你了解火山引擎边缘云推出的一款创新产品:多云CDN。如果你的业务同时由多家CDN厂商提供服务,而你作为多家CDN服务的购买者/使用者/运维人员,那么多云CDN是帮助你“降本增效”的不二利器! 在不久前结束的“2023稀土掘金开发…

1400*B. Phoenix and Beauty(贪心构造)

Problem - 1348B - Codeforces 解析: 满足题意,会构成循环序列,其中循环节长度为 k,统计数列中不同元素的个数 cnt ,如果cnt > k,显然无解。 否则,由于题意中已经证明,答案序列个…

用CHAT分析:为什么层次网络模型理论,不容易解释熟悉性效应?

今天小编带大家探索新的事物,这个问题对于小编来说也是未知~ 问Chat:试分析为什么层次网络模型理论不容易解释熟悉性效应? 熟悉性效应(Familiarity Effect)是指人们对于熟悉的事物、人或情境有更积极的评价和感知。这…

无人机自主航迹规划智能算法综述

源自:航空兵器 作者:郭启敏, 张鹏, 王应洋, 王石 “人工智能技术与咨询” 发布 摘 要 关键词 无人机; 航迹规划; 自主性; 智能优化算法; 机器学习算法 引 言 1 无人系统自主性及其内涵 1.1 无人系统自主性定义 1.2 无人系统自主性内涵 2 航迹…

个人美容与美容产业:TikTok上的双重趋势探索

当今数字时代,美容行业已不再局限于专业的化妆师和美容院。社交媒体平台如TikTok已经成为美容爱好者和业内专业人士的创新舞台。本文将深入探讨TikTok如何引领着美容产业和个人美容趋势,以及它是如何将这两者相互融合。 TikTok:美容产业的游戏…

8 模型查看

查看检查模型的方法 1 torchsummary2 netron3 tensorboardX参考 查看检查模型的方法: 1 torchsummary 仅仅只是打印模型,并不能检测模型是否准确。 summary 会计算参数量,等等信息,还会对尺寸不匹配进行报错。 1,安…

HTML+CSS+JS实现计算器

🙈作者简介:练习时长两年半的Java up主 🙉个人主页:程序员老茶 🙊 ps:点赞👍是免费的,却可以让写博客的作者开心好久好久😎 📚系列专栏:Java全栈,…

了解C#中Lambda表达式的用法

Lambda表达式是一个匿名函数,是一种高效的类似于函数式编程的表达式,Lambda简化了开发中需要编写的代码量。它可以包含表达式和语句,并且可用于创建委托或表达式目录树类型,支持带有可绑定到委托或表达式树的输入参数的内联表达式…

贝叶斯变分方法:初学者指南--平均场近似

Eric Jang: A Beginners Guide to Variational Methods: Mean-Field Approximation (evjang.com) 一、说明 变分贝叶斯 (VB) 方法是统计机器学习中非常流行的一系列技术。VB 方法允许我们将 统计推断 问题(即,给定另一个随机变量的值来推断随机变量的值&…

基本微信小程序的驾校宝典系统-驾照考试系统

项目介绍 系统模块分析是对系统的各个模块做出相应的说明以及解释。此系统的模块分别有用户模块、服务端模块和管理端模块这两大基本模块,其中服务端模块包括了首页、教练信息、教练咨讯、考试预约、我的等;而管理端模块则包括了个人中心、用户管理、教…