前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >利用jieba和wordcloud从新闻中生成词云

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

作者头像
菲宇
发布2020-03-25 09:56:20
1.9K0
发布2020-03-25 09:56:20
举报
文章被收录于专栏:菲宇

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

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

代码语言:javascript
复制
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库常规方法

代码语言:javascript
复制
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:输出词云文件

配置对象参数

代码语言:javascript
复制
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,则忽略该方法。

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

新闻原文链接

代码语言:javascript
复制
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')

效果如下

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档