加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

用python画词云

(2019-03-31 18:06:23)
标签:

python

统计图

分类: python语言
今天一个学生询问画词云的问题。他收集了30个word文档,都是关于大学生就业方面的资料,想分词并画词云。python、R和nvivo都可以绘制,我今天用python和nvivo试了下:
nvivo是windows窗口程序,绘制词云效率很高,不过不能自定义词云的样式,不能改变形状,只能用软件提供的那几种样式。
python用wordcloud包来绘制词云,这个包是从R移植到python的,功能相似。不过R中的wordcloud已经升级二代,叫wordcloud2,而python中的还是一代。
python绘制wordcloud要敲代码,但使用挺简单。只要把分词后结果(用空格间隔)作为参数输入绘图函数即可。不用去统计词频,wordcloud自动统计。python的灵活度很高,词云的形状可以自定义。用photoshop画个图,输如到函数,即可输出各种图形的词云,这点比nvivo强。
python分词是用结巴分词包,效率和效果很好。nvivo用什么模型分词暂不得知。
下面是效果图和源码:


用python画词云

用python画词云

用python画词云

用python画词云

 Python Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
import docx  用于读取word文档,只能读取docx文档
import glob  用于获取目录中的所有docx文件名的地址
import jieba 结巴分词
import re    正则表达式,用于去掉无意义字符
from collections import Counter   统计词频时用到Counter
from scipy.misc import imread  这是一个处理图像的函数
import wordcloud
from wordcloud import ImageColorGenerator  词云库


读取所有的word文件内容
files []   用于存储文件内容
for filename in glob.glob('练习/*.docx'):      #glob.glob()能够将所有*.docx的文件名提取并返回为列表
    singlefile docx.Document(filename)      #依次读取每个word文件的内容
    for para in singlefile.paragraphs:        #通过段落的text属性提取文本内容
        files.append(para.text)

去掉无意义的字符
files re.sub(r"[\s+\.\!\/_,$%^*(【】:\]\[\-:;+\"\']+|[+——!,。?、~@#%……&*()]+|[0-9]+","",str(files))
files files.replace('xa','')

分词,默认精准分词
articlewords jieba.cut(files)
print('/ '.join(articlewords))

读取停用词库
结巴没有自带停用词库,这个停用词是office中自带的,通过everything搜索到的
stopwords [line.strip() for line in open('stopwords.txt''r'encoding='utf-8').readlines()]

去掉停用词
newarticlewords []
for in articlewords:
    
if in stopwords:
        
continue
    
else:
        newarticlewords.
append(i)

绘制词云
backimg =imread('就业.png')
wcloud =wordcloud.WordCloud(
    font_path=
'MSYH.TTC',
    
background_color='white',
    mask backimg,
    width=
800,
    height=
600
    )
wcloud.generate(
'.join(newarticlewords))   用空格间隔
wcloud.to_file('词云.png')

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有