利用jieba库实现词云统计

262 阅读4分钟

在Python中对字符串信息进行切割划分,可以使用自带的一些功能,比如split。但是由于这个任务中需要处理的是中文信息,这里如何切分句子中的词语是一个难点,因此选用了jieba这个库。借助Jieba库中的lcut()函数,实现了对中文信息的分割功能。对于分割好的词汇列表,如何将其形象化的展示,我选择使用wordcloud库进行形象化的展示。为了贴合分析问题的实情,我选择使用中国地图作为背景轮廓图片。读取图片的时候使用了PIL模块,并且使用numpy模块做了进一步的数据类型转换。

编写程序时,我尽量减少了程序功能之间的耦合性,使用了多个函数完成一个个分块功能。整个程序一共由三个函数组成,分别是 Product_WorldClouds()、Remove_redundancy_words()、Read_text()

Product_WorldClouds() 这个函数接收三个参数,调用函数的时候只要传递三个参数,就能自动生成词云图片,参数的具体解释如下:

(1)text_file_path: 这个参数代表存放文本信息的txt文档的地址

(2)background_picture: 这个参数代表作为词云背景轮廓图片的地址

(3)target_picture_path: 这个参数代表生成的词云图片的存放地址

Remove_redundancy_words() 这个函数接收待处理的词汇列表,还有一个可选择的冗余词汇列表,函数返回新的列表。这个函数会删除掉原来列表中长度为一或者用户指定要删除的词汇。目的是处理文本信息,去除‘的’ 、‘地’、‘和’这样的无意义词汇。参数的具体解释如下:

(1)words_list:待处理的词汇列表

(2) abandon_words_list:这个是可以选择的,如果调用函数的时候不传递这个参数,则函数只是剔除列表中长度为一的词汇。如果传递参数列表了,则会将这个列表中出现的词汇在原始列表中删除。

Read_text()这个函数接收一个参数,这个参数代表存放文字信息的txt文档地址,函数返回这个文档的字符信息,参数解释:

(1)filepath:txt文档的存储地址

from PIL import Image
from wordcloud import wordcloud
import jieba


def Product_WordClouds(text_file_path, background_picture, target_picture_path):

    """
    函数说明:
        在调用这个函数的时候,传递三个参数,就可以自动生成词云统计图片

    参数说明:
        (1)text_file_path: 这个参数代表存放文本信息的txt文档的地址
        (2)background_picture: 这个参数代表作为词云背景图片的地址
        (3)target_picture_path:这个参数代表生成的词云图片的存放地址
    """

    information = Read_text(text_file_path) #根据所给的存放信息的txt文档的地址,获得文字信息
    words_list = jieba.lcut(information)  #利用jieba库,对信息进行分割
    #print(words_list)  #可以将分割信息打印出来

    background_img = Image.open(background_picture)# 读取背景图片
    mask_img = np.array(background_img)
    Cloud = wordcloud.WordCloud(
        mask = mask_img,    #数据填充
        background_color="snow",  #设定背景颜色
        font_path="C:\Windows\Fonts\STHUPO.ttf",  #指定生成的词云图片中的文字所采用的字体
        min_font_size=5,   #图片中最小的字体
        max_font_size=60,  #图片中最大的字体
        )

    words_list = Remove_redundancy_words(words_list) #对于分割得到的列表进行筛选
    Cloud.generate(",".join(words_list))
    Cloud.to_file(target_picture_path)  # 生成词云图片


def Remove_redundancy_words(words_list,abandon_words_list=None):

    """
    函数说明:
        这个函数接收待处理的词汇列表,还有一个可选择的冗余词汇列表,处理后返回新的列表,这个函数会删除掉原来列表中长度为一和
        用户指定要删除的词汇。目的是处理文本信息,去除 的 地 和 这样的无意义词汇。
    参数说明:
        (1)words_list:待处理的词汇列表
        (2)abandon_words_list:这个是可以选择的,如果调用函数的时候不传递这个参数,则函数只是剔除列表中长度为一的词汇。如果传递参数列表了,则会将
           这个列表中出现的词汇在原始列表中删除。
    """

    for word in words_list[:]:#删除无意义词汇的循环
        if abandon_words_list != None:#判断是否有用户输入一些特定的词汇
            if len(word) == 1 or word in abandon_words_list:#判定是否满足删除条件
                words_list.remove(word) #在元列表中删除满足条件的词汇
        else:
            if len(word) == 1:
                words_list.remove(word)
    return words_list  #返回处理之后的列表


def Read_text(filepath):

    """
        函数说明:传递给函数一个存放文字信息的txt文档地址,返回这个文档的字符信息
        参数说明:
            (1)filepath:txt文档的地址
    """

    f = open(filepath,encoding='UTF-8')#按照utf-8的编码形式获取文档中的信息
    texts = f.read()
    return texts #返回文档中的文字信息


text_file_path = './规划.txt'  #设定存储信息的txt文档地址
source_img_path = './地图.PNG' #设定背景图片的地址
target_img_path = './cloud_trash.jpg' #设定生成词云图片的目标地址
Product_WordClouds(text_file_path, source_img_path, target_img_path) #调用函数,生成词云图片

cloud.jpg