词云

内容纲要

wordCloud

用python进行文本分词并生成词云

需要安装的包

  • wordcloud包依赖于Pillow,numpy,matplotlib

其他

  • 分词采用结巴分词,并支持自定义字典
  • 分词结果进行词频统计分析,并导出
  • 词云图可自己设定背景图(英文词云图不需先进行分词)

运行结果

运行demo.py,会生成相应的的词云图,和“doc/词频统计.txt”

项目架构

image-20230525085744841

chnSegment

# coding:utf-8

from collections import Counter
from os import path
import jieba

jieba.load_userdict(path.join(path.dirname(__file__), 'userdict//userdict.txt'))  # 导入用户自定义词典

def word_segment(text):
    """
    通过jieba进行分词并通过空格分隔,返回分词后的结果
    """

    # 计算每个词出现的频率,并存入txt文件
    jieba_word = jieba.cut(text, cut_all=False)  # cut_all是分词模式,True是全模式,False是精准模式,默认False
    data = []
    for word in jieba_word:
        data.append(word)
    data_dict = Counter(data)
    with open('doc//词频统计.txt', 'w') as fw:
        for k, v in data_dict.items():
            fw.write("%s,%d\n" % (k, v))
        #  fw.write("%s"%data_dict)

    # 返回分词后的结果
    jieba_word = jieba.cut(text, cut_all=False)  # cut_all是分词模式,True是全模式,False是精准模式,默认False
    seg_list = ' '.join(jieba_word)
    return seg_list

plotWordcloud

# coding:utf-8

from os import path
from PIL import Image
import numpy as np
import matplotlib.pyplot as plt
from wordcloud import WordCloud, STOPWORDS

def generate_wordcloud(text):
    """
    输入文本生成词云,如果是中文文本需要先进行分词处理
    """
    # 设置显示方式
    d = path.dirname(__file__)
    # alice_mask = np.array(Image.open(path.join(d, "Images//alice_mask.png")))
    # alice_mask = np.array(Image.open(path.join(d, "Images//rm.png")))
    # alice_mask = np.array(Image.open(path.join(d, "Images//dollar.png")))
    # alice_mask = np.array(Image.open(path.join(d, "Images//chinamap.png")))
    alice_mask = np.array(Image.open(path.join(d, "Images//money.png")))
    font_path = path.join(d, "font//so.ttf")
    stopwords = set(STOPWORDS)
    wc = WordCloud(background_color="white",  # 设置背景颜色
                   max_words=2000,  # 词云显示的最大词数
                   # mask=alice_mask,  # 设置背景图片
                   stopwords=stopwords,  # 设置停用词
                   font_path=font_path,  # 兼容中文字体,不然中文会显示乱码
                   max_font_size=100,  # 设置字体最大值
                   random_state=42,  # 设置有多少种随机生成状态,既有多少种配色方案
                   width=1000, height=860, margin=2,  # 设置图片默认的大小,但是如果使用背景图片的话,那么保存的图片大小将会按照其大小保存,margin为词语边缘距离
                   )

    # 生成词云 
    wc.generate(text)

    # 生成的词云图像保存到本地
    wc.to_file(path.join(d, "Images//1.png.png"))

    # 显示图像
    plt.imshow(wc, interpolation='bilinear')
    # interpolation='bilinear' 表示插值方法为双线性插值
    plt.axis("off")  # 关掉图像的坐标
    plt.show()

demo

# coding:utf-8

from os import path
import chnSegment
import plotWordcloud

if __name__ == '__main__':
    # 读取文件
    d = path.dirname(__file__)
    text = open(path.join(d, 'doc//ff.txt')).read()

    # 若是中文文本,则先进行分词操作
    text = chnSegment.word_segment(text)

    # 生成词云
    plotWordcloud.generate_wordcloud(text)

效果

1.png

2 条评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注