python词云找不到文件_Python3 词云详解

所谓“词云”就是对网络文本中出现频率较高的“关键词”予以视觉上的突出,形成“关键词云层”或“关键词渲染”,从而过滤掉大量的文本信息,使浏览网页者只要一眼扫过文本就可以领略文本的主旨。

环境准备

python -m pip install wordclud

python -m pip install matplotlib

python -m pip install jieba

wordcludPython用于生成词云的库。 wordclud 官方文档

matplotlib一个Python 2D绘图库。Matplotlib试图让简单易事的事情成为可能。只需几行代码即可生成绘图,直方图,功率谱,条形图,错误图,散点图等,该库最常用于Python数据分析的可视化。 官方文档

最小示例

from wordcloud import WordCloud

import matplotlib.pyplot as plt

with open("野性的呼唤.txt", encoding="utf-8") as file:

word_cloud = WordCloud().generate(file.read())

plt.figure() # 创建一个图形实例

plt.imshow(word_cloud, interpolation='bilinear')

plt.axis("off") # 不显示坐标轴

plt.show()

interpolation 参数的用法

中文词云wordcloud 对中文分词支持不足,因此需要配合jieba分词库使用

from wordcloud import WordCloud

import matplotlib.pyplot as plt

with open("fanrenxiuxian.txt", encoding="gbk") as file:

word_cloud = WordCloud(font_path="c:\windows\Fonts\simhei.ttf",

background_color="white",

max_words=200,

max_font_size=100,

width=1000,

height=860).generate(file.read())

plt.figure() # 创建一个图形实例

plt.imshow(word_cloud, interpolation='bilinear')

plt.axis("off") # 不显示坐标尺寸

plt.show()

添加图片背景效果

from wordcloud import WordCloud

from wordcloud import ImageColorGenerator

from matplotlib.image import imread

import matplotlib.pyplot as plt

back_img = imread("timg.jpg")

img_colors = ImageColorGenerator(back_img)

with open("fanrenxiuxian.txt", encoding="gbk") as file:

word_cloud = WordCloud(font_path="c:\windows\Fonts\simhei.ttf",

background_color="white",

max_words=200,

max_font_size=100,

width=1920,

mask=back_img,

height=1080).generate(file.read())

word_cloud.recolor(color_func=img_colors) # 替换默认的字体颜色

plt.figure() # 创建一个图形实例

plt.imshow(word_cloud, interpolation='bilinear')

plt.axis("off") # 不显示坐标尺寸

plt.show()

扩展:将图片加载的几种方法 - PIL.Image.open - scipy.misc.imread - skimage.io.imread - cv2.imread - matplotlib.image.imread

jieba

特点 - 支持三种分词模式: - 精确模式,试图将句子最精确地切开,适合文本分析; - 全模式,把句子中所有的可以成词的词语都扫描出来, 速度非常快,但是不能解决歧义; - 搜索引擎模式,在精确模式的基础上,对长词再次切分,提高召回率,适合用于搜索引擎分词支持繁体分词

支持自定义词典

MIT 授权协议

简单示例

import jieba

with open("fanrenxiuxian.txt", 'r', encoding="gbk") as file:

# jieba.enable_parallel(4) 并行运算,类unix系统,Windows不支持

seg_list = jieba.cut(file.read(), cut_all=False)

print("/".join(seg_list))

提取关键词

import jieba.analyse

# TF-IDF算法关键词抽取

with open("fanrenxiuxian.txt", 'r', encoding="gbk") as file:

jieba.analyse.set_stop_words('stopwords.txt')

tags = jieba.analyse.extract_tags(file.read(), 100)

print(tags)

中文词云实例

网络上关于中文词云的博客资料绝大部分是对wordcloud官网示例的翻译,我要说的是官方示例基本就是个大坑,不知道是不太放心上还是本身就是临时工lowB程序员写的。而国内的博主习惯了粘贴复制,已经丧失了独立思考的能力,不假思索的就照搬,反正我是被坑了,用官方示例将一部《凡人修仙传》在Windows上单线程生成词云花了300多秒,而我经过仔细阅读jieba库和wordcloud库的API后,发现根本就不是官网示例那么个写法,经过我重新改造后,只需要大概60秒就能生成《凡人修仙传》的词云。

首先我们进入wordcloud文档,找到第一种写法 我们结合jieba库,修改词云代码。这里使用WordCloud的stopwords参数加入停止词,而不是像官方示例那样去做遍历筛选停止词,特别是写出if not (myword.strip() in f_stop_seg_list) and len(myword.strip()) > 1:这种低性能的代码,就算是遍历, len(myword.strip()) > 1也应放在最前面去判断,而不是把停止词放在最前面去判断,这样大大的增加了时间复杂度。

from wordcloud import WordCloud

from wordcloud import ImageColorGenerator

from matplotlib.image import imread

import matplotlib.pyplot as plt

import jieba, time

def get_stopwords():

with open("stopwords.txt", encoding='utf-8') as f_stop:

return f_stop.read().splitlines()

back_img = imread("timg.jpg")

img_colors = ImageColorGenerator(back_img)

with open("fanrenxiuxian.txt", encoding="gbk") as file:

stop_words = get_stopwords() # 获取停止词列表

seg_list = jieba.cut(file.read(), cut_all=False) # 返回一个生成器

cut_list = " ".join(seg_list)

word_cloud = WordCloud(font_path="c:\windows\Fonts\simhei.ttf",

background_color="white",

max_words=1000,

max_font_size=100,

width=1920,

stopwords=stop_words,

mask=back_img,

height=1080).generate(cut_list)

word_cloud.recolor(color_func=img_colors) # 替换默认的字体颜色

plt.figure() # 创建一个图形实例

plt.imshow(word_cloud, interpolation='bilinear')

plt.axis("off") # 不显示坐标尺寸

plt.show()第二种写法 这里的第二种写法基本就官方示例的写法,只是略微调整了筛选停止词时的判断条件的顺序

from wordcloud import WordCloud

from wordcloud import ImageColorGenerator

from matplotlib.image import imread

import matplotlib.pyplot as plt

import jieba, time

def get_stopwords():

with open("stopwords.txt", encoding='utf-8') as f_stop:

return f_stop.read().splitlines()

back_img = imread("timg.jpg")

img_colors = ImageColorGenerator(back_img)

with open("fanrenxiuxian.txt", encoding="gbk") as file:

stop_words = get_stopwords() # 获取停止词列表

seg_list = jieba.cut(file.read(), cut_all=False) # 返回一个生成器

cut_list = "/".join(seg_list).split("/")

content_list = []

for word in cut_list:

if len(word.strip()) > 1 and not (word.strip() in stop_words):

content_list.append(word)

word_cloud = WordCloud(font_path="c:\windows\Fonts\simhei.ttf",

background_color="white",

max_words=200,

max_font_size=100,

width=1920,

mask=back_img,

height=1080).generate(' '.join(content_list))

word_cloud.recolor(color_func=img_colors) # 替换默认的字体颜色

plt.figure() # 创建一个图形实例

plt.imshow(word_cloud, interpolation='bilinear')

plt.axis("off") # 不显示坐标尺寸

plt.show()第三种写法,最终版 这种是我推荐的做法。整个文本的分词包括关键词提取,我们都直接交给jieba库去做就行了,WordCloud库仅仅根据jieba库返回的关键词以及权重去生成词云图片就行。这里主要用到WordCloud库的generate_from_frequencies这个函数,API文档给出的说明是Create a word_cloud from words and frequencies.,有了这个API,不知道官方中文词云示例为什么还写成那样,难道是自己的API都不清楚吗?令人费解

from wordcloud import WordCloud

from wordcloud import ImageColorGenerator

from matplotlib.image import imread

import matplotlib.pyplot as plt

import jieba.analyse

back_img = imread("timg.jpg")

img_colors = ImageColorGenerator(back_img)

with open("fanrenxiuxian.txt", encoding="gbk") as file:

jieba.analyse.set_stop_words('stopwords.txt') # 设置止词列表

tags = jieba.analyse.extract_tags(file.read(), 1000, withWeight=True)

data = {item[0]: item[1] for item in tags}

word_cloud = WordCloud(font_path="c:\windows\Fonts\simhei.ttf",

background_color="white",

max_words=1000,

max_font_size=100,

width=1920,

mask=back_img,

height=1080).generate_from_frequencies(data)

word_cloud.recolor(color_func=img_colors) # 替换默认的字体颜色

plt.figure() # 创建一个图形实例

plt.imshow(word_cloud, interpolation='bilinear')

plt.axis("off") # 不显示坐标尺寸

plt.show()

由于停止词没有单独去添加,我这里用了一个通用的停止词表,导致最终生成的词云不是特别准确,这个就要大家自己去小心调试了

欢迎关注公众号:编程之路从0到1

从零开始学编程

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值