程序一开始运行没问题,都能成功生成。直到我分析文档用了个8w+字数的文档,max_words设为20+就报错,15能成功生成,期间换了词频背景也没用。
也试了网上说的更改width、height,甚至换过像素很大的背景,都不起作用。
最后解决方法是降低wordcloud版本,我wordcloud版本一开始默认下的最新版1.9.3,然后降到了1.8,就可以成功生成词云,不报错了,也不用设置width、height,默认就行。
pip install wordcloud==1.8
词云生成完整代码:
参考用python实现词频分析+词云
import re # 正则表达式库
import jieba # 结巴分词
import jieba.posseg # 词性获取
import collections # 词频统计库
import numpy # numpy数据处理库
from PIL import Image # 图像处理库
import wordcloud # 词云展示库
import matplotlib.pyplot as plt # 图像展示库(这里以plt代表库的全称)
# 主要功能自定义设置
Analysis_text = '分析文档.txt' # 分析文档
userdict = '用户词典.txt' # 用户词典
StopWords = '停用词库.txt' # 停用词库
number = 50 # 统计个数
Output = '词频.txt' # 输出文件
background = '词频背景.jpg' # 词频背景
# 读取文件
fn = open(Analysis_text,'r',encoding = 'UTF-8') # 打开文件
string_data = fn.read() # 读出整个文件
fn.close() # 关闭文件
# 文本预处理
pattern = re.compile(u'\t|\n|\.|-|:|;|\)|\(|\?|"') # 定义正则表达式匹配模式(空格等)
string_data = re.sub(pattern, '', string_data) # 将符合模式的字符去除
# 动态调整词典
jieba.suggest_freq('林小木', True) #True表示该词不能被分割,False表示该词能被分割
# 添加用户词典
jieba.load_userdict(userdict)
# 文本分词
seg_list_exact = jieba.cut(string_data, cut_all=False, HMM=True) # 精确模式分词+HMM
object_list = []
# 去除停用词(去掉一些意义不大的词,如标点符号、嗯、啊等)
with open(StopWords, 'r', encoding='UTF-8') as meaninglessFile:
stopwords = set(meaninglessFile.read().split('\n'))
stopwords.add(' ')
for word in seg_list_exact: # 循环读出每个分词
if word not in stopwords: # 如果不在去除词库中
object_list.append(word) # 分词追加到列表
# 词频统计
word_counts = collections.Counter(object_list) # 对分词做词频统计
word_counts_top = word_counts.most_common(number) # 获取前number个最高频的词
# 英文词性转中文词性字典:简洁版
En2Cn = {
'a' : '形容词',
'ad' : '形容词',
'ag' : '形容词',
'al' : '形容词',
'an' : '形容词',
'b' : '区别词',
'bl' : '区别词',
'c' : '连词',
'cc' : '连词',
'd' : '副词',
'e' : '叹词',
'eng' : '英文',
'f' : '方位词',
'g' : '语素',
'h' : '前缀',
'i' : '成语',
'j' :</