使用Python进行词云图WordCloud绘制

词云图是什么?

“词云”就是通过形成“关键词云层”或“关键词渲染”,对网络文本中出现频率较高的“关键词”的视觉上的突出。词云图过滤掉大量的文本信息,使浏览网页者只要一眼扫过文本就可以领略文本的主旨。

示例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()       # 显示图像
image.png

原图girl.jpg
  • 总结:要想实现词云,需要一定数量的文本数据,才能体现出统计规律。因此接下来绘制三国演义的词云图。

示例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

你可能感兴趣的:(使用Python进行词云图WordCloud绘制)