词云图是什么?
“词云”就是通过形成“关键词云层”或“关键词渲染”,对网络文本中出现频率较高的“关键词”的视觉上的突出。词云图过滤掉大量的文本信息,使浏览网页者只要一眼扫过文本就可以领略文本的主旨。
示例1:一段简单文本的词云图绘制
将这段文本的词云图进行绘制:文献[2]以北京五所高校为例,对北京高校学生会组织力建设进行了调查研究,发现目前高校学生会组织组织力建设存在的问题有(1)政治素养不够坚实,政治引领能力较弱;(2)组织机制不够健全,有效监督部分缺位;(3)自身定位不够准确,主责主业不够聚焦;(4)队伍建设不够有力,干部作风不够严实。文献[3]以哈尔滨工程大学为例,对新时代高校学生会改革与建设进行了研究,分析了新时代高校学生会改革与建设的现实困境:(1)高校学生会对自身使命的认知模糊;(2)高校学生会工作方式创新性不强;(3)高校学生会工作人员作风欠扎实。文献[4]研究总结了高校学生会组织“改革再出发”的现实困境:(1)高校学生会组织对自身使命认知不清;(2)高校学生队伍作风建设及学生领袖培养效果不佳;(3)高校学生会的工作效率和危机处理能力有待提高;(4)高校学生会组织三级联动的工作机制发挥欠佳;(5)高校学生会维权机制的建构存在滞后性。文献[1]为了能够详细了解高校学生会组织的现状,选取了西安五所高校:西安科技大学、长安大学、西安工程大学、西安建筑科技大学、西安工业大学。调查发现了高校学生会组织存在的问题有:(1)学生会组织机构臃肿;(2)学生干部选拔管理不规范;(3)学生会组织工作形式化;(4)学生会组织自身建设有待加强。文献[5]以南京某高校为例,研究了新形势下高校学生会组织改革与转型发展探索。研究表明,高校学生会运行中存在的问题有:(1)组织定位偏差;(2)制度建设不完善;(3)管理监督不到位;(4)教育引导不深刻,思想认识薄弱;(5)作风转变不彻底;(6)工作创新不足。
示例代码
import re # 正则表达式库
import collections # 词频统计库
import numpy as np
import jieba # 结巴分词
import wordcloud # 词云展示库
from PIL import Image # 图像处理库
import matplotlib.pyplot as plt # 图像展示库
注:没有的库需要自行安装:pip install jieba; pip install wordcloud
# 打开文件
fn = open('C://Users//Administrator//Desktop//StudentOrganization.txt','rt')
string_data = fn.read()
fn.close()
# 文本预处理
patten = re.compile(u'\t|\n|\.|-|:|;|\)|\(|\?|"') # 定义正则表达式匹配模式
string_data = re.sub(patten,'',string_data) # 将符合模式的字符去掉
# 文本分词
seg_list_exact = jieba.cut(string_data, cut_all = False) # 精确模式分词
object_list = []
# 自定义去除词库
remove_words = [u'的',u',',u'和',u'是',u'随着',u'对于',u'对',u'等',u'能'
,u'都',u'。',u' ',u'、',u'中',u'在',u'了',u'通常',u'如果',u'我们',u'需要'
,u'(',u')',u';',u'1',u'2',u'3',u'[',u']',u'4',u'不']
# 循环剔除无效词
for word in seg_list_exact:
if word not in remove_words:
object_list.append(word)
# 词频统计
word_counts = collections.Counter(object_list) # 对分词进行词频统计
word_counts_top10 = word_counts.most_common(10) # 获取前10的高频词
print(word_counts_top10) # 输出检查
[('学生会', 19), ('高校', 18), ('组织', 14), ('建设', 8), ('不够', 6), ('文献', 5), ('研究', 5), (':', 5), ('西安', 5), ('大学', 5)]
# 词频展示
mask = np.array(Image.open('C://Users//Administrator//Desktop//aa.jpg')) # 词频背景定义
wc = wordcloud.WordCloud(
font_path='C:/Windows/Fonts/simhei.ttf', # 设置字体格式
mask = mask, # 设置背景图
max_words = 20, # 最多显示词数量
max_font_size=100 # 字体最大值
)
wordcloud.WordCloud()函数说明
wc.generate_from_frequencies(word_counts) # 从字典生成词云
image_colors = wordcloud.ImageColorGenerator(mask) # 从背景图建立颜色方案
wc.recolor(color_func=image_colors) # 将词云颜色设置为背景图方案
plt.imshow(wc) # 显示词云
plt.axis('off') # 关闭坐标轴
plt.show() # 显示图像
- 总结:要想实现词云,需要一定数量的文本数据,才能体现出统计规律。因此接下来绘制三国演义的词云图。
示例2:绘制三国演义词云图
三国演义text文档下载链接:http://sanguoyanyi2.janpn.com/
import matplotlib.pyplot as plt
from wordcloud import WordCloud
import chardet # 检测编码
from collections import Counter
import jieba.posseg as psg
text1 = open('C://Users//Administrator//Desktop//171182.txt','rb').read()
# 词性标注
seg_list = psg.cut(text1)
# 显示中文
type = chardet.detect(text1)
text2 = text1.decode(type['encoding'])
# 数据清洗
seg_list1 = ['{0}'.format(w) for w,t in seg_list if len(w)!= 1]
# 统计
count = Counter(seg_list1)
# 排序
dic3 = sorted(count.items(),key=lambda x:x[1], reverse=True)
# 格式化
listStr = ' '.join([str(word[0]) for word in list(dic3)])
# 词云图绘制
wc = WordCloud(background_color='white',
max_words=2000,
width=1920,
height=1080,
font_path="#C:\Windows\Fonts\simfang.ttf",
max_font_size=100,
random_state=10,
margin=2)
myword = wc.generate(listStr)
plt.imshow(myword)
plt.axis('off')
plt.show()
参考链接1:https://blog.csdn.net/wei_zhen_dong/article/details/103586694?utm_medium=distribute.pc_relevant_download.none-task-blog-baidujs-1.nonecase&depth_1-utm_source=distribute.pc_relevant_download.none-task-blog-baidujs-1.nonecase(三国演义词云图绘制)
参考链接2:https://www.cnblogs.com/LuDuo/p/10652234.html