wordcloud的实现

NLP笔记 - Word Tokenization // wordcloud 词云图教程


学习链接网站:

词云学习1
词云学习2
wordcloud参数说明
matlibplot用法链接
numpy用法
PIL图像处理模块用法
jieba 常见用法
读文件出现的问题解决方法

程序结构

|- data //新建文件夹
     |- alice.txt //下载文件
     |- yxgltext.txt //下载文件
     |- stopwords.txt //下载文件
     |- SourceHanSerifK-Light.otf //下载文件
|- plot //新建文件夹
     |- alice_color.png //下载图片
     |- queen.jpg //下载图片
|- alice1.py //新建python文件
|- alice2.py //新建python文件
|- queen.py //新建python文件

程序要用的文件

链接:https://pan.baidu.com/s/16rBpSCK5lPrCrhUpQWsqAQ
提取码:j7zr

词云图

# -*- coding:utf-8 -*-
# author:chenqian time:2019/3/30

import os
os.chdir("C:/Users/Administrator.PC-20170407LSUI/Desktop/文本语义/NLP(Python)")  # 换成你的wordcloud文件夹所在路径
from wordcloud import WordCloud

f = open('data/alice.txt').read()
wordcloud = WordCloud(background_color="white",width=1000, height=860, margin=2).generate(f)
# width,height,margin可以设置图片属性
# generate 可以对全部文本进行自动分词,但是对中文支持不好
# wordcloud = WordCloud(font_path = r'D:\Fonts\simkai.ttf').generate(f)
# 你可以通过font_path参数来设置字体集
# background_color参数为设置背景颜色,默认颜色为黑色

import matplotlib.pyplot as plt
# ax = plt.imshow(wordcloud)
# # 创建Figure
# # fig = ax.figure
# # fig.set_size_inches(25,20)    # 可调节图片紧密 尺寸程度
plt.imshow(wordcloud)
plt.axis("off")  # 关闭座标轴
plt.show()

wordcloud.to_file('plot/test.png')

有形状的图

# -*- coding:utf-8 -*-
# author:chenqian time:2019/3/30
import os
os.chdir("C:/Users/Administrator.PC-20170407LSUI/Desktop/文本语义/NLP(Python)")  # 换成你的wordcloud文件夹所在路径
from PIL import Image
import numpy as np
import matplotlib.pyplot as plt
from wordcloud import WordCloud, STOPWORDS, ImageColorGenerator

# Read the whole text.
text = open('data/alice.txt').read()
alice_coloring = np.array(Image.open("plot/alice_color.png"))  # 可随意更换图片
stopwords = set(STOPWORDS)  # 使用内置的停用词
# print(type(stopwords))  # set类型
stopwords.add("said")  # 添加停用词

# 你可以通过 mask 参数 来设置词云形状
wc = WordCloud(background_color="white", max_words=2000, mask=alice_coloring,
               stopwords=stopwords, max_font_size=40, random_state=42)
# generate word cloud
wc.generate(text)

# 改变字体颜色,从照片中取色
image_colors = ImageColorGenerator(alice_coloring)


# 方式 1 -------------------------------------------------------------------
# show
# 
# fig, axes = plt.subplots(1, 3)
# axes[0].imshow(wc, interpolation="bilinear")
# axes[1].imshow(wc.recolor(color_func=image_colors), interpolation="bilinear")
# axes[2].imshow(alice_coloring, cmap=plt.cm.gray, interpolation="bilinear")
# 
# for ax in axes:
#    ax.set_axis_off()
#    fig = ax.figure
#    fig.set_size_inches(25,20)                  # 可调节图片紧密 尺寸程度
# plt.show()


# 方式 2 -------------------------------------------------------------------
# show
# 在只设置mask的情况下,你将会得到一个拥有图片形状的词云,颜色并不是对应图片的颜色
plt.axis("off")
# 将词云图wc置入座标轴中,interpolation指插入
ax = plt.imshow(wc, interpolation="bilinear")
fig = ax.figure
fig.set_size_inches(25,20)  # 设置图像大小
plt.figure()
# recolor wordcloud and show
# we could also give color_func=image_colors directly in the constructor
# 我们还可以直接在构造函数中直接给颜色
# 通过这种方式词云将会按照给定的图片颜色布局生成字体颜色策略
plt.axis("off")  # 取消座标轴

# 这一个对词云重新着色,对应的是照片原色
ax = plt.imshow(wc.recolor(color_func=image_colors), interpolation="bilinear")
fig = ax.figure
fig.set_size_inches(25,20)                  # 可调节图片紧密 尺寸程度
plt.figure()


plt.axis("off")
# 展示原照片
ax = plt.imshow(alice_coloring, cmap=plt.cm.gray, interpolation="bilinear")
fig = ax.figure
fig.set_size_inches(25,20)                  # 可调节图片紧密 尺寸程度
plt.show()

中文词云图

"""
@author:CQ
@software:PyCharm
@time:2019/4/1
"""
import os
os.chdir("C:/Users/Administrator.PC-20170407LSUI/Desktop/文本语义/NLP(Python)")  # 换成你的wordcloud文件夹所在路径

import jieba.analyse  # 导入结巴分词
import numpy as np  # numpy
from wordcloud import WordCloud, STOPWORDS  # 词云工具和自带的的停用词,英文
from PIL import Image  # 图片处理
import matplotlib.pyplot as plt

'''
@:parameter
textfile:文本路径及文件名
stopword:停用词数组
savefile:图片保存的路径及文件名
'''
def handle(textfile, stopword,savefile):
    with open(textfile, 'r') as f:
        data = f.read()

    # print(type(data))
    # <class 'str'>
    wordlist = jieba.analyse.extract_tags(data, topK=100)  # 分词,取前100
    # print(type(wordlist))
    # <class 'list'>
    wordStr = " ".join(wordlist)
    # print(wordStr)  # 类型为字符串类型

    hand = np.array(Image.open('plot/queen.jpg'))  # 打开一张图片,词语以图片形状为背景分布

    my_cloudword = WordCloud(
        # wordcloud参数配置
        width=1024,f
        height=768,
        background_color='white',  # 背景颜色设置白色
        mask=hand,  # 背景图片
        max_words=100,  # 最大显示的字数
        stopwords=stopword,  # 停用词
        max_font_size=100,  # 字体最大值
        font_path='data/SourceHanSerifK-Light.otf',  # 设置中文字体,若是有中文的话,这句代码必须添加,不然会出现方框,不出现汉字
        random_state=3,  # 设置有多少种随机生成状态,即有多少种配色方案
    )

    my_cloudword.generate(wordStr)  # 生成图片

    plt.axis('off')  # 是否显示x轴、y轴下标
    ax = plt.imshow(my_cloudword)  # 显示词云图
    fig = ax.figure
    fig.set_size_inches(25, 20)  # 可调节图片紧密 尺寸程度
    plt.show()  # 显示
    my_cloudword.to_file(savefile)



stopwords = open('data/stopwords.txt',encoding='gb18030', errors='ignore').read()
# stopwords = open('data/stopwords.txt').read().decode('gb18030','ignore')
stopwords = set(stopwords.split('\n'))

handle('data/yxgl.txt', stopwords,'plot/chinesewordcloud.png')


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章