赞
踩
本文章是基于经过文本清洗、去除停用词、利用jieba库进行中文分词后的词云可视化。本文不对上述提及的相关技术做详细解释,如有需要,可参考文章:NLP:利用jieba库,基于TF-IDF算法的关键词提取-CSDN博客
pip install wordcloud -i https://pypi.tuna.tsinghua.edu.cn/simple
- # 生成简单词云的方法
-
- new_text = " ".join(final_list)
- # 这里final_list是经过文本清洗及分词的一个词语列表,
- # 其具体形式为["你好","中国","芯片"...]
- # 此步骤是将上面列表中的词语拼接起来,符合wordcloud的格式
-
-
- #创建一个wordcloud模版,设置一些参数
- wordcloud = WordCloud(font_path='simhei.ttf', # 指定中文字体路径
- background_color='white',
- #mask=shape, # 这里用于设定前面得到的轮廓
- max_words=100, # 显示最大词数
- max_font_size=100, # 显示最大字体大小
- random_state=30, # 随机状态,使得结果可复现
- width=800, height=400 # 词云图的尺寸
- # contour_color='red', # 添加词云轮廓,设置为红色
- # contour_width=1
- ) # 轮廓线条的粗细
-
- wordcloud.generate(new_text) # 生成词云
-
- wordcloud.to_file('./wordcloud.png') # 保存词云图到文件
- # 比如我想将词云绘成苹果的模样
- pic = Image.open("apple3.png") # 读取文件
- shape = np.array(pic) # 提取文件的轮廓
-
-
- #在之前设定好的wordcloud模版中添加mask = shape即可
-
- wordcloud = WordCloud(font_path='simhei.ttf', # 指定中文字体路径
- background_color='white',
- mask=shape, # 在这里添加前面设定好的轮廓即可
- max_words=100, # 显示最大词数
- max_font_size=100, # 显示最大字体大小
- random_state=30, # 随机状态,使得结果可复现
- width=800, height=400 # 词云图的尺寸
- # contour_color='red', # 添加词云轮廓,设置为红色
- # contour_width=1
- ) # 轮廓线条的粗细
-
- #其余步骤一致
-
- wordcloud.generate(new_text) # 生成词云
-
- wordcloud.to_file('./wordcloud.png') # 保存词云图到文件
代码中已有详细注释。
- import pprint
-
- import jieba
- import re
- # 示例文本
- with open("huawei.txt", 'r', encoding='utf-8') as file:
- text = file.read()
- # print(text)
- # exit()
- def clean_text2(test):
- pattern = r'[^\w\s]' #^是取反的意思,即与后面的条件不相符的情况
- # \w 匹配任何字母、数字或下划线,就相当于[a-zA-Z0-9_]
- # \s 匹配任何空白字符,空格、制表符等。
-
- cleaned_text = re.sub(pattern,'',text) # 使用re.sub()函数替换标点符号为空字符串,不过这种写法处理后的文本中会出现空格的情况
- return cleaned_text
- cleaned_text = clean_text2(text)
- # print(cleaned_text)
-
- # 使用jieba进行分词
- words = jieba.cut(cleaned_text,cut_all = False) #使用jieba分词后,返回结果是一个生成器类型,无法直接看到分词的结果,需要将其转化成列表的
- # 形式或者用for循环来查看分词结果。用generator类型,能够节省内存,用完立马就释放了,不会像存储在一个变量中一样。
- words_list = list(words) #分词结果
- # pprint.pprint(words_list) #通过这里才可以看到分词的结果
-
-
- # 读取停用词列表
- with open('../stop_words/customize.txt', 'r', encoding='utf-8') as file:
- stop_word = set([line.strip() for line in file])
- # pprint.pprint(list(stop_word)[0:10]) #这里需要将set转成集合才能够查看输出,而且,因为集合是无序的,所以其实每次结果都会不一样
- # exit()
- # 这里的set是一种数据结构——集合,不采用list的形式是因为其较于列表有这样的优势:
- # 自动去重、查找速度较快(因为后面得对分词进行判断,是否为停用词)
-
-
- # 正确写法
- final_list = [] # 创建新的列表,存储不存在于停用词列表中的元素,或者采用列表推导式,但是不好理解
- for word in words_list:
- if word not in stop_word:
- final_list.append(word)
- # pprint.pprint(final_list)
-
- from wordcloud import WordCloud
- from PIL import Image
- import numpy as np
- # from imageio import imread
- new_text = " ".join(final_list) # 需要将上面列表中的词语拼接起来,符合wordcloud的格式
-
- pic = Image.open("apple3.png") # 读取文件
- shape = np.array(pic) # 提取文件的轮廓
- # 创建WordCloud对象,设置一些参数,比如背景颜色,最大词数等
- wordcloud = WordCloud(font_path='simhei.ttf', # 指定中文字体路径
- background_color='white',
- mask=shape, # 这里用于设定前面得到的轮廓
- max_words=100, # 显示最大词数
- max_font_size=100, # 显示最大字体大小
- random_state=30, # 随机状态,使得结果可复现
- width=800, height=400 # 词云图的尺寸
- # contour_color='red', # 添加词云轮廓,设置为红色
- # contour_width=1
- ) # 轮廓线条的粗细
-
-
- wordcloud.generate(new_text) # 生成词云
-
- wordcloud.to_file('./wordcloud.png') # 保存词云图到文件
-
-
本文使用的停用词是采用。txt的形式存储的,大家也可自行在网上搜索下载。
实例文本也是采用.txt文本进行存储了,大家也可自行设计一段中文文本测试。
至于想将词云绘制成何种形状,提前下载好自己需要的相关图片即可。这里需要说明的是,作为轮廓的图片最好是白底。参考图片:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。