吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 2381|回复: 36
收起左侧

[Python 转载] 利用python统计高频词并生成词云

[复制链接]
罗木魄 发表于 2024-6-5 16:05
本帖最后由 罗木魄 于 2024-6-15 15:55 编辑

昨天发了一个帖子,通过python计算了词频和总词数。但是又产生了一个新的问题,应该设置哪些词作为关键词进行匹配呢?
我想到了一个方法:分析相关的官方文件,统计高频词,用高频词作为关键词。

以下代码为计算所有词汇出现的频次,输出前100的高频词,并生成自定义形状的词云。
部分代码来自
知乎:程序员吾非同(https://zhuanlan.zhihu.com/p/353795160?utm_psn=1781633944111964160
本站:(https://www.52pojie.cn/forum.php?mod=viewthread&tid=1791190&highlight=%B4%CA%D4%C6)
[Python] 纯文本查看 复制代码
import jieba
from collections import Counter
from wordcloud import WordCloud
import matplotlib.pyplot as plt
import numpy as np
from PIL import Image

# 读取要分析的txt文档,注意修改为自己的文件名[/size]
[size=3]with open('concatenated.txt', 'r', encoding='utf-8') as f:
    s = f.read()
# 使用jieba进行分词
jieba.load_userdict('cidian.txt')#可以注释掉以使用默认词典
text = jieba.cut(s)
stopwords = {}.fromkeys([ line.rstrip() for line in open('cn_stopwords.txt',encoding='utf-8') ])  #记得改为自己的停用词文件名
words = [word for word in text if word not in stopwords]  # 去除停顿词

# 统计词频
word_count = Counter()
for word in words:
    if len(word) >= 2:  # 仅统计长度大于等于2的词语
        word_count[word] += 1
# 获取词频前100的词汇
top100_words = word_count.most_common(100)
# 输出结果到txt文档
with open('top100词频.txt', 'w', encoding='utf-8-sig') as f:
    for word, count in top100_words:
        f.write(f'{word}: {count}\n')
        
text2 = ' '.join(words)#用空格连接分词

mask = np.array(Image.open("mask_pic.jpg")) #将图片转换为数组。记得修改为自己图片的文件名

ciyun = WordCloud(font_path="字体.ttf",   #字体选用自己电脑上的汉语字体,删掉可能会乱码
               mask=mask, #注释掉这一行,生成默认矩形图
               width = 1000,  #长
               height = 700,  #宽
               background_color='white',  #背景颜色
               max_words=100,#最多词数
               max_font_size=100,#字号最大值
               ).generate(text2)


# 显示词云,这一块可以直接删掉,不影响生成词云,只不过不会在IDE中显示
plt.imshow(ciyun, interpolation='bilinear')# 用plt显示图片
plt.axis("off")  # 不显示坐标轴
plt.show() # 显示图片

# 保存到文件
ciyun.to_file("词云.png")



报错:No such file or directory: 'cidian.txt'是因为我用的是自己的词典和停顿词


解决方法:
调用词典那一行可以注释掉,使用默认的jieba分词词典。
停顿词如下:

通过百度网盘分享的文件:jieba停用词…
链接:https://pan.baidu.com/s/1ZtUjwgj9BvwKkhS7KUlLeQ?pwd=228i
提取码:228i
一个文件几k,随便找一个直接下载就行了,然后改为下载的停顿词文件名。


停顿词来源:

| 中文停用词表                   | cn_stopwords.txt    |
| 哈工大停用词表                 | hit_stopwords.txt   |
| 百度停用词表                   | du.txt |
| 四川大学机器智能实验室停用词库 | scu_stopwords.txt   |



字体选用电脑上自带的字体,或者从本站下载一个。


词典、停用词、背景图片、字体、要分析的文本,这些地方都要修改为自己相应文件的文件名,让python可以正常读取到。


以下是模板图片和词云图片。
注意,模板图片必须为白色背景。

模板

模板

词云

词云

免费评分

参与人数 5吾爱币 +10 热心值 +4 收起 理由
苏紫方璇 + 7 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
junjia215 + 1 + 1 用心讨论,共获提升!
liangzai450 + 1 谢谢@Thanks!
restart19 + 1 + 1 谢谢@Thanks!
marcyan + 1 用心讨论,共获提升!

查看全部评分

本帖被以下淘专辑推荐:

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

willgoon 发表于 2024-6-5 16:27
本帖最后由 willgoon 于 2024-6-6 08:44 编辑

不错的思路 但请楼主注意 论坛禁止留联系方式 联系方式是指你之前写的QQ号 不过现在看你去掉了
5151diy 发表于 2024-6-6 07:52
本帖最后由 5151diy 于 2024-6-6 07:53 编辑
haoruan 发表于 2024-6-6 01:28
https://aming.lanzoub.com/imFry20zetvc
打包成可视化界面,简单方便即可操作

def generate_wordcloud(self):
        if not self.text_file:
            messagebox.showwarning("警告", "请选择一个文本文件")
            return
        if not self.image_file:
            messagebox.showwarning("警告", "请选择一张图片")
            return

        try:
            # 读取要分析的txt文档
            with open(self.text_file, 'r', encoding='utf-8') as f:
                s = f.read()

            # 使用jieba进行分词
            jieba.load_userdict('cidian.txt')

选择的文本文件的参数 没有传递给cidian.txt
Stays1993 发表于 2024-6-5 16:29
wkdxz 发表于 2024-6-5 16:40
建议把测试文件打包一起发出 方便测试
kant101x 发表于 2024-6-5 17:06
不错的思路,学习了
 楼主| 罗木魄 发表于 2024-6-5 17:29
willgoon 发表于 2024-6-5 16:27
不错的思路 但请楼主注意 论坛禁止留联系方式

没有留联系方式啊,是因为我写了代码来源吗?如果是这样的话,该如何正常引用呢?
fnckyon2014 发表于 2024-6-5 17:35
单纯词云简单,这个转图片样子的思路有意思
NebulaOS 发表于 2024-6-5 21:30
Stays1993 发表于 2024-6-5 16:29
不错的思路,学习了

学习学习
xiaozui23 发表于 2024-6-5 21:31
转成图片的样子还是挺有趣的
资料终结者 发表于 2024-6-5 23:35
好东西,学习了
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-28 03:47

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表