龙空技术网

python实战-生成中文词云图

随心而码 434

前言:

此刻小伙伴们对“python显示中文”大致比较珍视,同学们都需要了解一些“python显示中文”的相关资讯。那么小编在网摘上搜集了一些有关“python显示中文””的相关知识,希望大家能喜欢,朋友们一起来了解一下吧!

开发环境Windows 11vs codepython 3.10.7

安装所需模块

使用 `jieba` 进行中文分词

pip install jieba

安装词云制作模块

pip install wordcloud

使用 `PIL`、`numpy` 模块进行词云蒙版图片处理

安装 `wordcloud` 时默认自动安装以上两个模块

文本节选自《背影》

导入所需模块

import jiebaimport refrom wordcloud import WordCloudfrom PIL import Imageimport numpy as npimport matplotlib.pyplot as plt

首先进行分词及统计词频

def count_word(self):    # 以读取的方式打开文本文件    with open(self.filename, 'r', encoding='utf-8-sig') as f:        # 循环读取文件的每一行,防止因文件过大造成卡顿        for line in f:            # 定义一个空列表变量 words,用于依次保存分词后的词语            words = []            # jieba搜索引擎模式进行中文分词            words_lcut_search = jieba.lcut_for_search(line.rstrip('\n'))            # print(words_lcut_search)            # 用列表生成式把每行的各个词语加入进来            words = [s for s in re.findall("\\w+", str(words_lcut_search))]            # 通过循环统计词语出现的次数            for word in words:                # 采用累加法计算词语出现次数                self.dict_count[word] = self.dict_count.get(word, 0) + 1

生成词云图

def wordC(self):    # 生成词云    # 设置分词空列表    wcLst = []    for keys in self.dict_count.items():        temp = keys        wcLst.append(temp)    # 空格拼接    newtxt = ' '.join(str(wcLst))    # 使用蒙版图片    # 用photoshop将图片背景改为纯白色,mask生效    mask = np.array(Image.open("heart.png"))    wordcloud = WordCloud(mask=mask, font_path="msyh.ttc", background_color='White').generate(newtxt)    # 显示词云    plt.imshow(wordcloud)    plt.axis("off")    plt.show()    # 生成词云图片    wordcloud.to_file('词云图.png')

效果如下图:

词云图

带词频权重词云图

def wordCWeight(self):    freq = self.dict_count    # 使用蒙版图片    # 用photoshop将图片背景改为纯白色,mask生效    mask = np.array(Image.open("heart.png"))    wordcloud = WordCloud(mask=mask, font_path="msyh.ttc", background_color='White').generate_from_frequencies(freq)    # 显示词云    plt.imshow(wordcloud)    plt.axis("off")    plt.show()    # 生成词云图片    wordcloud.to_file('权重词云图.png')

效果如下图:

带权重词云图

完整代码

import jiebaimport refrom wordcloud import WordCloudfrom PIL import Imageimport numpy as npimport matplotlib.pyplot as pltclass WordCloudImg:    """    统计中文文本文件中词出现频次,生成词云图片    """    def __init__(self, filename):        # 设置需要统计词频的文本文件名        self.filename = filename        # 初始化一个字典来保存各单词出现的次数,如 {'背影': 10, '你': 3}        self.dict_count = {}    def count_word(self):        # 以读取的方式打开文本文件        with open(self.filename, 'r', encoding='utf-8-sig') as f:            # 循环读取文件的每一行,防止因文件过大造成卡顿            for line in f:                # 定义一个空列表变量 words,用于依次保存分词后的词语                words = []                # jieba搜索引擎模式进行中文分词                words_lcut_search = jieba.lcut_for_search(line.rstrip('\n'))                # print(words_lcut_search)                # 用列表生成式把每行的各个词语加入进来                words = [s for s in re.findall("\\w+", str(words_lcut_search))]                # 通过循环统计词语出现的次数                for word in words:                    # 采用累加法计算词语出现次数                    self.dict_count[word] = self.dict_count.get(word, 0) + 1    def top_number(self, num):        # 排序前num词语        return sorted(self.dict_count.items(), key=lambda item: item[1], reverse=True)[:num]    def wordC(self):        # 生成词云        # 设置分词空列表        wcLst = []        for keys in self.dict_count.items():            temp = keys            wcLst.append(temp)        # 空格拼接        newtxt = ' '.join(str(wcLst))        # 使用蒙版图片        # 用photoshop将图片背景改为纯白色,mask生效        mask = np.array(Image.open("heart.png"))        wordcloud = WordCloud(mask=mask, font_path="msyh.ttc", background_color='White').generate(newtxt)        # 显示词云        plt.imshow(wordcloud)        plt.axis("off")        plt.show()        # 生成词云图片        wordcloud.to_file('词云图.png')    def wordCWeight(self):        freq = self.dict_count        # 使用蒙版图片        # 用photoshop将图片背景改为纯白色,mask生效        mask = np.array(Image.open("heart.png"))        wordcloud = WordCloud(mask=mask, font_path="msyh.ttc", background_color='White').generate_from_frequencies(freq)        # 显示词云        plt.imshow(wordcloud)        plt.axis("off")        plt.show()        # 生成词云图片        wordcloud.to_file('权重词云图.png')if __name__ == '__main__':    # 生成CounterWord 实例对象    counter_obj = WordCloudImg("test_count_cn.txt")    # 调用函数进行统计    counter_obj.count_word()    # 取出出现次数最多的前10个词语    top_number_10 = counter_obj.top_number(10)    print('test_count.txt', '中出现次数前10的词语统计如下:')    for word in top_number_10:        print(word[0], '出现:', word[1], '次')    # 生成词云图片    counter_obj.wordC()    # 生成带权重词云图片    counter_obj.wordCWeight()

标签: #python显示中文