利用Python显示词云(分词技术)

原创
2017/08/17 16:26
阅读数 186

偶然在网上看到词云,感觉挺有趣的,于是自己动手写了个程序来显示。

根据百度百科: “词云”这个概念由美国西北大学新闻学副教授、新媒体专业主任里奇·戈登(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()

结果如下:

 

 

 

 

 

展开阅读全文
打赏
0
0 收藏
分享
加载中
更多评论
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部