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

本文介绍了如何通过函数封装改进UI设计中的词云图生成,从jieba分词、停用词处理到使用WordCloud绘制,同时详细展示了如何在UI界面添加导出和个性化设置功能,以及在CSDN热榜分析中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


热榜分析系列: 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来保存词云。

最后的词云输出如下

在这里插入图片描述

在Stata中处理中文文本并绘制词云图,涉及到的关键步骤包括中文分词词云图生成。首先,我们需要对中文文本进行分词,这是因为中文文本通常以连续的字符形式出现,而分词则能够将其转换为有意义的语序列。分词后,我们可以对频进行统计,进而绘制词云图,以可视化的方式直观展现文本数据中的关键分布。 参考资源链接:[中文文本分析分词词云图绘制](https://wenku.csdn.net/doc/37stvmyr5m) 结合《中文文本分析分词词云图绘制》一书,我们可以采用不同的分词策略,如正向最大匹配法(MM法)和逆向最大匹配法(RMM法)。在正向最大匹配法中,算法从文本的开始部分寻找最长的匹配;而在逆向最大匹配法中,算法则是从文本的末尾开始进行匹配。这两种方法都需要依据一个预先定义好的典来进行匹配。 具体到Stata中实现分词词云图生成的步骤,可以如下操作: 1. 准备中文文本数据,并确保数据格式适合在Stata中进行处理。 2. 加载外部分词典或创建典。可以通过编写Stata程序或使用现有的Stata分词命令。 3. 应用分词算法对文本进行分词处理。这可能需要使用Stata的编程功能,或通过调用外部的分词工具进行。 4. 对分词结果进行频统计。可以使用Stata的数据处理和分析功能来完成这一步骤。 5. 利用统计结果生成词云图。这通常需要借助外部数据可视化工具,如Echarts或Pythonwordcloud库,而Stata可能会提供相应的接口或插件来支持这一过程。 在处理完毕后,所得到的词云图将直观展示出文本中的高频汇,这有助于我们快速识别出文本的主旨和关键。需要注意的是,词云图的质量高度依赖于分词的准确性,因此在分词阶段要特别注意分词策略的选择和典的准确性。 通过以上步骤,结合《中文文本分析分词词云图绘制》一书中的知识,我们可以在Stata中有效地进行中文文本的分词词云图的绘制,进而在文本分析和可视化方面取得有价值的结果。 参考资源链接:[中文文本分析分词词云图绘制](https://wenku.csdn.net/doc/37stvmyr5m)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

微小冷

请我喝杯咖啡

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值