今天,咿哑呀带领大家学习怎样给一篇文章总结分析出词云,让我们更清楚地了解文章的主要意思,理解文章意义。为了分析文章,我们需要使用第三方库jieba,将文章分解出相关词语,然后将出现次数最多的词语进行有序排序提炼,再使用第三方库wordcloud和matplotlib库将关键词进行绘制,就成了文章词云。
下面,我们将词云组合成一个类,让运用的更广泛。首先我们要在系统终端命令窗口用命令pip install安装jieba3k、wordcloud、matplotlib等库。安装完成后,新建一个python脚本文件wordcloud.py。在wordcoud.py中写以下代码:
import io
import re
import jieba
import matplotlib.pyplot as plt
from wordcloud import WordCloud, ImageColorGenerator
from scipy.misc import imread
然后,写word_cloud类,这个类是整个词云的关键代码。代码如下:
class word_cloud:
def __init__(self, txt_file, jpg_file):
self.mapping = {}
rewords = ''
with io.open(txt_file, encoding="utf-8") as f:
for s in re.findall("\w+", f.read()):
rewords += s.lower() + ' '
for word in jieba.cut(rewords):
if len(word) > 1:
self.mapping[word] = self.mapping.get(word, 0) + 1
word_num=int(len(self.mapping.keys())*0.9)
wordlist = sorted(self.mapping.items(), key=lambda item: item[1], reverse=True)[:word_num]
worddict = {}
total = 0
mstr=''
for item in wordlist:
total += item[1]
for item in wordlist:
worddict[item[0]] = item[1] / total
mstr += item[0] +':'+ str(item[1] / total) + '\n'
with open('output\\'+txt_file.split('\\')[-1][:-4]+'.txt','w', encoding='utf8') as f:
f.write(mstr)
color_mask = imread(jpg_file) # 读取背景图片
image_colors = ImageColorGenerator(color_mask)
cloud = WordCloud(
font_path="fonts\simhei.ttf",
background_color='white',
# 词云形状
mask=color_mask,
# 允许最大词汇
max_words=word_num,
max_font_size=40
)
word_cloud = cloud.generate_from_frequencies(worddict) # 产生词云
plt.imshow(word_cloud.recolor(color_func=image_colors))
plt.axis('off')
plt.show()
word_cloud.to_file(txt_file.split('\\')[-1][:-4]+'.png')
注意,这个类中使用了fonts中的字库simhei.ttf,要确保目录中有这个字库,否则,更换相关代码。继续写入主函数代码:
if __name__ == '__main__':
word_cloud(r"test.txt", r'bg.jpg')
然后,在wordcloud.py的同一目录下,建好所需要的test.txt文章,同时,保存一幅需要形成词云形状的图片bg.jpg。按F5运行这个脚本,看是不是形成了一个词云图片,并且,在这个目录下是不是生成了一个词云文件test.png。
如果这篇文章对你有用,请点赞、转发、收藏、评论,如果喜欢我的文章,请搜索并关注“咿哑呀”,我将分享更多文章给大家。