偶然在网上看到词云,感觉挺有趣的,于是自己动手写了个程序来显示。
根据百度百科: “词云”这个概念由美国西北大学新闻学副教授、新媒体专业主任里奇·戈登(Rich Gordon)于近日提出。戈登做过编辑、记者,曾担任迈阿密先驱报(Miami Herald)新媒体版的主任。他一直很关注网络内容发布的最新形式——即那些只有互联网可以采用而报纸、广播、电视等其它媒体都望尘莫及的传播方式。通常,这些最新的、最适合网络的传播方式,也是最好的传播方式。 因此,“词云”就是对网络文本中出现频率较高的“关键词”予以视觉上的突出,形成“关键词云层”或“关键词渲染”,从而过滤掉大量的文本信息,使浏览网页者只要一眼扫过文本就可以领略文本的主旨。
不过安装包比较麻烦,内网网速慢的要死,爬了半天都爬不出来,后来查找资料,说国内服务器的镜像会比较快:
pip download matplotlib -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install matplotlib -i https://pypi.tuna.tsinghua.edu.cn/simple
开发使用python 3.6,用一个文本把要分析的数据装进去,代码是转的,做了个小改动,感谢原作者。
分词工具采用结巴分词 https://www.oschina.net/p/jieba
#coding:utf-8
#用于统计词频并用词云显示
#import warnings
#warnings.filterwarnings("ignore")
import jieba #分词包
import numpy #numpy计算包
import codecs #codecs提供的open方法来指定打开的文件的语言编码,它会在读取的时候自动转换为内部unicode
import re
import pandas as pd
import matplotlib.pyplot as plt
from urllib import request
from bs4 import BeautifulSoup as bs
#%matplotlib inline
import matplotlib
matplotlib.rcParams['figure.figsize'] = (30.0, 15.0)
from wordcloud import WordCloud#词云包
def main():
f = open('r1.txt','r')
comments = f.read().strip()
f.close()
#使用正则表达式去除标点符号
pattern = re.compile(r'[\u4e00-\u9fa5]+')
filterdata = re.findall(pattern, comments)
cleaned_comments = ''.join(filterdata)
#使用结巴分词进行中文分词
segment = jieba.lcut(cleaned_comments)
words_df=pd.DataFrame({'segment':segment})
#去掉停用词
stopwords=pd.read_csv("stopwords.txt",index_col=False,quoting=3,sep="\t",names=['stopword'], encoding='utf-8')#quoting=3全不引用
words_df=words_df[~words_df.segment.isin(stopwords.stopword)]
#统计词频
words_stat=words_df.groupby(by=['segment'])['segment'].agg({'计数':numpy.size})
words_stat=words_stat.reset_index().sort_values(by=["计数"],ascending=False)
#用词云进行显示
wordcloud=WordCloud(font_path="simhei.ttf",background_color="white",max_font_size=100)
word_frequence = {x[0]:x[1] for x in words_stat.head(1000).values}
word_frequence_list = []
# for key in word_frequence:
# temp = (key,word_frequence[key])
# word_frequence_list.append(temp)
wordcloud=wordcloud.fit_words(word_frequence)
plt.imshow(wordcloud)
plt.show()
# 保存图片
wordcloud.to_file('工单.png')
#主函数
main()
结果如下: