在之前做公众号年度总结的时候,我接触了一种观察自己的方法:用python库wordcloud做词云图,大概是这样:

像这样,具有长期,并且数量非常多的,类似日记的文本,其实是可以反映出这段时间内,一个人在干什么,状态如何的。而做词云图,就可以让你看到自己的生活的中心和常态在哪里
所以今天我再玩一下这个库,先写代码,然后对古诗词进行制作词云图,然后把自己写的一些东西也拿来云一下。
使用
re.findall(r'[\u4e00-\u9fa5]+', text)进行正则清理,只留下中文字
使用jieba库,我以前写一个概率统计的论文也用过这个,用来做刘慈欣小说的用词分析
jieba.lcut(text)它这样可以把一些词语告诉机器是词语,而不是按字来分
对于词云图的生成,主要用wordcloud,需要明白一些参数
# 算法配置
wc = WordCloud(
font_path=FONT_FILE, # 1. 渲染引擎:字符形状控制
background_color='#FCFBF7', # 2. 画布背景
width=1000, # 3. 空间像素宽度
height=1000, # 4. 空间像素高度
max_words=80, # 5. 复杂度控制:算法迭代上限
colormap='Dark2', # 6. 颜色映射逻辑
margin=5, # 7. 几何间距:防重叠安全距离
random_state=1, # 8. 随机种子:布局一致性
prefer_horizontal=0.8# 9. 概率决策:旋转逻辑
)
我们一般控制2,5这些就可以了,其它可以交给AI。
最后绘图使用matplotlib库。
我找了一些古诗词,我们先来试试,因为古诗词里边有很多的人名所以要去除掉然后再开始。具体代码这样:
import os
import re
import jieba
from wordcloud import WordCloud
from collections import Counter
import matplotlib.pyplot as plt
# 1. 基础设置
FILE_NAME = 'pomes.txt'
FONT_FILE = 'LXGWWenKai-Light.ttf'
STOP_WORDS = {
'杜甫', '李白', '王维', '李商隐', '孟浩然', '杜牧', '白居易', '苏轼', '辛弃疾', '韦应物','王昌龄','柳宗元', # 人名
'一首', '二首', '三首', '其一', '其二', '之一', '之二', '卷一', '百首', # 结构词
'不知', '何处', '今日', '此时', '何人', '不见', '却是', '不得'# 虚词
}
# 2. 文本清洗
defget_words(path):
ifnot os.path.exists(path):
print(f"找不到文件: {path}");
returnNone
withopen(path, 'r', encoding='utf-8') as f:
# 只保留汉字
text = "".join(re.findall(r'[\u4e00-\u9fa5]+', f.read()))
# 分词并过滤:只留长度 > 1 的词,且不在黑名单中
words = [w for w in jieba.lcut(text) iflen(w) > 1and w notin STOP_WORDS]
return Counter(words)
# 3. 生成词云
counts = get_words(FILE_NAME)
if counts:
# 纸张色: #FCFBF7 (米白)
# 配色方案: 'cool' 或 'tab10' 比较现代,这里推荐 'Set2' 或 'Dark2' 更有书卷气
wc = WordCloud(
font_path=FONT_FILE,
background_color='#FCFBF7',
width=1000,
height=1000,
max_words=80, # 限制词数,防止拥挤
colormap='copper', # 墨绿色/深灰色系,不刺眼且高端
margin=5, # 词与词的间距
random_state=1# 保证每次生成的布局一致
).generate_from_frequencies(counts)
# 4. 显示与保存
plt.figure(figsize=(8, 8), facecolor='#FCFBF7')
plt.imshow(wc.to_image(), interpolation='bilinear')
plt.axis('off')
wc.to_file('pomes_result.png')
print("生成成功!图片已保存为 poem_result.png")
plt.show()
注意,我这里使用了霞鸳文楷字体,我写了下载。
结果是这样:

用一小部分诗歌

然后我就发现问题了,就是如果文本太少,很容易做出来不客观,有的词我只用了一两次也进去了,重复频率不够高。
我懒得整理我写的随笔了,就用别人的,我们先看看最经常出现的一些词,如果这些词不能作为反映,比如很口语的:今天,今晚,这种就删掉

hhhhh
