利用jieba和wordcloud从新闻中生成词云

接上一篇文章利用jieba和pyecharts做新闻关键词统计可视化

wordcloud 是一个python实现的高效词频可视化工具,除了可以使用各种mask和颜色提供个性化的掩膜,还可以通过api便捷的挑战获得个性化的词云输出。
  安装

pip install wordcloud

wordcloud 包含三个主要api

  • WordCloud([font_path, width, height, …]) 最重要的函数生成和描绘词云.
  • ImageColorGenerator(image[, default_color]) 通过输入rgb图像获得色彩信息.
  • random_color_func([word, font_size, …]) 随机渲染颜色.

wordcloud库把词云当作一个WordCloud对象

  • wordcloud.WordCloud()代表一个文本对应的词云
  • 可以根据文本中词语出现的频率等参数绘制词云
  • 绘制词云的形状、尺寸和颜色都可以设定

wordcloud库常规方法

w = wordcloud.WordCloud()
  • 以WordCloud对象为基础
  • 配置参数、加载文本、输出文件
方法 描述
w.generate(txt) 向WordCloud对象w中加载文本txt,w.generate("Python and WordCloud")
w.to_file(filename) 将词云输出为图像文件,.png或.jpg,w.to_file("outfile.png")
w.fit_words(frequencies)   根据词频生成词云
w.generate_from_text(text) 根据文本生成词云
process_text(text) 将长文本分词并去除屏蔽词(此处指英语,使用上面的 fit_words(frequencies) 
recolor([random_state, color_func, colormap]) 对现有输出重新着色。重新上色会比重新生成整个词云快很多。
to_array() 转化为 numpy array
  • 步骤1:配置对象参数
  • 步骤2:加载词云文本
  • 步骤3:输出词云文件

配置对象参数

w = wordcloud.WordCloud(<参数>)
参数 描述
width 指定词云对象生成图片的宽度,默认400像素
height 指定词云对象生成图片的高度,默认200像素
min_font_size 指定词云中字体的最小字号,默认4号
max_font_size 指定词云中字体的最大字号,根据高度自动调节
font_step 指定词云中字体字号的步进间隔,默认为1
font_path 指定字体文件的路径,默认None
max_words 指定词云显示的最大单词数量,默认200
stop_words 指定词云的排除词列表,即不显示的单词列表
mask 指定词云形状,默认为长方形,需要引用imread()函数
background_color 指定词云图片的背景颜色,默认为黑色
prefer_horizontal : float (default=0.90) 词语水平方向排版出现的频率,默认 0.9 (所以词语垂直方向排版出现频率为 0.1 )
scale : float (default=1) 按照比例进行放大画布,如设置为1.5,则长和宽都是原来画布的1.5倍。
stopwords : set of strings or None 设置需要屏蔽的词,如果为空,则使用内置的STOPWORDS
mode : string (default=”RGB”) 当参数为“RGBA”并且background_color不为空时,背景为透明。
relative_scaling : float (default=.5) 词频和字体大小的关联性
color_func : callable, default=None 生成新颜色的函数,如果为空,则使用 self.color_func
regexp : string or None (optional) 使用正则表达式分隔输入的文本
collocations : bool, default=True 是否包括两个词的搭配
colormap : string or matplotlib colormap, default=”viridis” 给每个单词随机分配颜色,若指定color_func,则忽略该方法。

生成新闻前十个关键词的词云代码

新闻原文链接

import jieba
import re
from collections import Counter
cut_words=""
for line in open('text',encoding='utf-8'):
    line.strip('\n')
    line = re.sub("[A-Za-z0-9\'\:\·\—\,\。\“ \”\n\u3000\?\、\'*\',\']", "", line)
    seg_list=jieba.cut(line,cut_all=False)
    cut_words+=(" ".join(seg_list))
all_words=cut_words.split()
# print(all_words)
c=Counter()
for x in all_words:
    if len(x)>1 and x != '\r\n':
        c[x] += 1

print('\n词频统计结果:')
dict={}
for (k,v) in c.most_common(10):# 输出词频最高的前10个词
    dict[k]=v
    print("%s:%d"%(k,v))

keyList,valueList = [],[]
for k,v in dict.items():
    keyList.append(k)
    valueList.append(v)
print(keyList,valueList)
print(str(keyList).replace("'", ""))
import matplotlib.pyplot as plt  #导入画图包
from wordcloud import WordCloud  #导入wordcloud api
wordcloud = WordCloud(font_path='msyh.ttc', width=800, height=600, mode='RGBA', background_color=None,).generate(text = str(keyList).replace("'", ""))  #利用text生成词云

#显示词云
plt.imshow(wordcloud, interpolation='bilinear')
plt.axis("off")
plt.show()

# 保存到文件
wordcloud.to_file('wordcloud.png')

效果如下





 

发布了375 篇原创文章 · 获赞 468 · 访问量 167万+

猜你喜欢

转载自blog.csdn.net/bbwangj/article/details/105075996