1.词云的生成需要确认已安装了wordcloud、matplotlib,下载库可以通过cmd或者直接在jupyter notebook上输入指令进行下载,也可以从网站https://www.lfd.uci.edu/~gohlke/pythonlibs/#wordcloud上手动下载,安装包放置在python的scripts文件里,并将自己需要的文本记录在文本文件(txt格式)上,也可以先准备好想要的图片样式;
2.可利用下方类似代码实现python定位问题,os.getcwd() 可以知道现在python在哪里(文件位置需根据自己的情况决定)
import os
os.chdir("C:\\Users\\读书人mn\\Desktop\\123123")
3.了解定位后,可以利用文件路径打开文件时,需要注意添加这一部分 encoding='utf-8',设置编码格式,encoding是编码的意思,在python中,Unicode类型是作为编码的基础类型。
text=open('123.txt','r',encoding='utf-8').read()
4.导入wordcloud matplotlib开始生成初版的词云图。如果想要显示出字体需要定义font并引用字体的路径,设置字体的大小
from wordcloud import WordCloud
import matplotlib.pyplot as plt
font=r'C:\\Windows\\Fonts\\simkai.ttf'
wc=WordCloud(font_path=font,width=800,height=600).generate(text)
plt.imshow(wc)
plt.axis('off')
plt.show()
5.在得到初版的词云图后,我们可以利用jieba库对文本进行分词处理,遍历整个文本并计算词语的数量,利用字典中键值对的对应关系,将词和其数量进行意义对应。
同时,建立另外一个词库,将无效、不需要的词从现有的词库中剔除。最后利用字典中的值进行词语的排序生成新的文本内容。
import jieba
import jieba.posseg as pseg
with open('C:\\Users\\读书人mn\\Desktop\\123123\\123.txt','r',encoding='utf-8')as f:
renmin=f.read()
jieba.load_userdict('C:\\Users\\读书人mn\\Desktop\\123123\\123.txt')
seg_list=jieba.cut(renmin,cut_all=False)
tf={}
for seg in seg_list:
if seg in tf:
tf[seg]+=1
else:
tf[seg]=1
ci=list(tf.keys())
import os
os.chdir("C:\\Users\\读书人mn\\Desktop\\123123")
with open('234.txt','r',encoding='utf-8') as ft:
stopword=ft.read()
for seg in ci:
if tf[seg]<5 or len(seg)<2 or seg in stopword or "一" in seg:
tf.pop(seg)
print(tf)
ci, num, data = list(tf.keys()), list(tf.values()),[]
for i in range(len(tf)):
data.append((num[i],ci[i]))
data.sort()
data.reverse()#升序排序后逆序,得到所需的降序排列
tf_sorted={}
print(len(data),data[0],data[0][0],data[0][1])
for i in range(len(data)):
tf_sorted[data[i][1]]=data[i][0]
print(tf_sorted)
6.最后提取原图信息并从原图提取色彩
import os
os.chdir("C:\\Users\\读书人mn\\Desktop\\123123")
text=open('123.txt','r',encoding='utf-8').read()
from wordcloud import WordCloud,ImageColorGenerator
import matplotlib.pyplot as plt
from PIL import Image
import numpy as np
mask=np.array(Image.open("C:\\Users\\读书人mn\\Desktop\\123123\\rainbow.png"))
font=r'C:\\Windows\\Fonts\\simkai.ttf'
wc=WordCloud(background_color="white",mask=mask,font_path=font,width=800,height=600).generate_from_frequencies(tf_sorted)
image_colors=ImageColorGenerator(mask)
plt.imshow(wc.recolor(color_func=image_colors))
plt.imshow(wc)
plt.axis('off')
plt.show()
最后的效果展示~
心得:
1.文件定位问题:无论使用绝对路径还是相对路径,且路径没有错误的情况下,程序依旧显示“文件不存在”,找不到文件。
解决方法:通过更改文件名称和文件所在位置,文件不要保存得太“深”,同时可以尝试简单的数字123等进行文件命名;
2.自己手动输入程序代码时,最容易犯的错误就是输入错字母,不分大小写。
3.如果文本内容是中文,字体选择时也需要注意选择中文样式,英文显示时依然会出现问题