失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > python词云分析 jieba+wordcloud 按词频生成词云

python词云分析 jieba+wordcloud 按词频生成词云

时间:2018-09-20 22:09:30

相关推荐

python词云分析  jieba+wordcloud 按词频生成词云

《大数据文摘》历史文章top10进行词频分析

数据来源及功能:爬取大数据文摘点赞量前10的文章,将文章转换成txt文档,进行词频分析并生成词云分析图。

Step1:安装所需库

pip install repip install jiebapip install collectionspip install numpypip install PILpip install wordcloudpip install matplotlib.pyplot

Step2:导入扩展库

import re # 正则表达式库 import jieba.posseg # 词性获取import collections # 词频统计库import wordcloud# 词云展示库import matplotlib.pyplot as plt# 图像展示库(这里以plt代表库的全称)

Step3:

-需要将“用户字典.txt”,“停用词库.txt” 两个文件保存为txt格式,放入文件同目录下。()

-“用户字典.txt” 可以根据需要进行增加统计词库,提高词频识别率。

-“停用词库.txt” 中的词库不纳入计算,可根据需求修改。

将要分析的内容全部放入当前目录下词云分析

Analysis_text = '词云分析.txt' # 分析文档 userdict = '用户词典.txt' # 用户词典 StopWords = '停用词库.txt' # 停用词库number = 100 # 统计个数Output = '词频.txt' # 输出文件

文章最后有完整的代码,直接复制即可。

#!/usr/bin/env python# encoding: utf-8# 导入扩展库import re # 正则表达式库import jieba # 结巴分词import jieba.posseg # 词性获取import collections # 词频统计库import numpy # numpy数据处理库from PIL import Image# 图像处理库import wordcloud# 词云展示库import matplotlib.pyplot as plt# 图像展示库(这里以plt代表库的全称)if __name__ == '__main__':# 主要功能自定义设置# 将要分析的内容全部放入当前目录下词云分析.txtAnalysis_text = '词云分析.txt' # 分析文档userdict = '用户词典.txt' # 用户词典StopWords = '停用词库.txt' # 停用词库number = 100 # 统计个数Output = '词频.txt' # 输出文件background = '词频背景.jpg' # 词频背景# 读取文件fn = open(Analysis_text,'r',encoding = 'UTF-8') # 打开文件string_data = fn.read()# 读出整个文件fn.close() # 关闭文件# 文本预处理pattern = pile(u'\t|\n|\.|-|:|;|\)|\(|\?|"') # 定义正则表达式匹配模式(空格等)string_data = re.sub(pattern, '', string_data)# 将符合模式的字符去除# 动态调整词典jieba.suggest_freq('', True)#True表示该词不能被分割,False表示该词能被分割# 添加用户词典jieba.load_userdict(userdict)# 文本分词seg_list_exact = jieba.cut(string_data, cut_all=False, HMM=True) # 精确模式分词+HMMobject_list = []# 去除停用词(去掉一些意义不大的词,如标点符号、嗯、啊等)with open(StopWords, 'r', encoding='UTF-8') as meaninglessFile:stopwords = set(meaninglessFile.read().split('\n'))stopwords.add(' ')for word in seg_list_exact: # 循环读出每个分词if word not in stopwords: # 如果不在去除词库中object_list.append(word) # 分词追加到列表# 词频统计word_counts = collections.Counter(object_list) # 对分词做词频统计word_counts_top = word_counts.most_common(number) # 获取前number个最高频的词# 英文词性转中文词性字典:简洁版En2Cn = {'a': '形容词','ad': '形容词','ag': '形容词','al': '形容词','an': '形容词','b': '区别词','bl': '区别词','c': '连词','cc': '连词','d': '副词','e': '叹词','eng': '英文','f': '方位词','g': '语素','h': '前缀','i': '成语','j': '简称略语','k': '后缀','l': '习用语','m': '数词','mq': '数量词','n': '名词','ng': '名词','nl': '名词','nr': '名词','nr1': '名词','nr2': '名词','nrf': '名词','nrfg': '名词','nrj': '名词','nrt': '名词','ns': '名词','nsf': '名词','nt': '名词','nz': '名词','o': '拟声词','p': '介词','pba': '介词','pbei': '介词','q': '量词','qt': '量词','qv': '量词','r': '代词','rg': '代词','rr': '代词','rz': '代词','rzs': '代词','rzt': '代词','rzv': '代词','ry': '代词','rys': '代词','ryt': '代词','ryv': '代词','s': '处所词','t': '时间词','tg': '时间词','u': '助词','ude1': '助词','ude2': '助词','ude3': '助词','udeng': '助词','udh': '助词','uguo': '助词','ule': '助词','ulian': '助词','uls': '助词','usuo': '助词','uyy': '助词','uzhe': '助词','uzhi': '助词','v': '动词','vd': '动词','vf': '动词','vg': '动词','vi': '动词','vl': '动词','vn': '动词','vshi': '动词','vx': '动词','vyou': '动词','w': '标点符号','wb': '标点符号','wd': '标点符号','wf': '标点符号','wj': '标点符号','wh': '标点符号','wkz': '标点符号','wky': '标点符号','wm': '标点符号','wn': '标点符号','wp': '标点符号','ws': '标点符号','wt': '标点符号','ww': '标点符号','wyz': '标点符号','wyy': '标点符号','x': '字符串','xu': '字符串','xx': '字符串','y': '语气词','z': '状态词','un': '未知词',}# 英文词性转中文词性字典:详细版En2Cn_Pro = {'a' : '形容词','ad' : '形容词-副形词','ag' : '形容词-形容词性语素','al' : '形容词-形容词性惯用语','an' : '形容词-名形词','b' : '区别词','bl' : '区别词-区别词性惯用语','c' : '连词','cc' : '连词-并列连词','d' : '副词','e' : '叹词','eng' : '英文','f' : '方位词','g' : '语素','h' : '前缀','i' : '成语','j' : '简称略语','k' : '后缀','l' : '习用语','m' : '数词','mq' : '数量词','n' : '名词','ng' : '名词-名词性语素','nl' : '名词-名词性惯用语','nr' : '名词-人名','nr1' : '名词-汉语姓氏','nr2' : '名词-汉语名字','nrf' : '名词-音译人名','nrfg' : '名词-人名','nrj' : '名词-日语人名','ns' : '名词-地名','nsf' : '名词-音译地名','nt' : '名词-机构团体名','nz' : '名词-其他专名','o' : '拟声词','p' : '介词','pba' : '介词-“把”','pbei' : '介词-“被”','q' : '量词','qt' : '量词-动量词','qv' : '量词-时量词','r' : '代词','rg' : '代词-代词性语素','rr' : '代词-人称代词','rz' : '代词-指示代词','rzs' : '代词-处所指示代词','rzt' : '代词-时间指示代词','rzv' : '代词-谓词性指示代词','ry' : '代词-疑问代词','rys' : '代词-处所疑问代词','ryt' : '代词-时间疑问代词','ryv' : '代词-谓词性疑问代词','s' : '处所词','t' : '时间词','tg' : '时间词-时间词性语素','u' : '助词','ude1' : '助词-“的”“底”','ude2' : '助词-“地”','ude3' : '助词-“得”','udeng': '助词-“等”“等等”“云云”','udh' : '助词-“的话”','uguo' : '助词-“过”','ule' : '助词-“了”“喽”','ulian': '助词-“连”','uls' : '助词-“来讲”“来说”“而言”“说来”','usuo' : '助词-“所”','uyy' : '助词-“一样”“一般”“似的”“般”','uzhe' : '助词-“着”','uzhi' : '助词-“之”','v' : '动词','vd' : '动词-副动词','vf' : '动词-趋向动词','vg' : '动词-动词性语素','vi' : '动词-不及物动词(内动词)','vl' : '动词-动词性惯用语','vn' : '动词-名动词','vshi' : '动词-“是”','vx' : '动词-形式动词','vyou' : '动词-“有”','w' : '标点符号','wb' : '标点符号-百分号千分号,全角:% ‰ 半角:%','wd' : '标点符号-逗号,全角:, 半角:,','wf' : '标点符号-分号,全角:; 半角: ; ','wj' : '标点符号-句号,全角:。','wh' : '标点符号-单位符号,全角:¥ $ £ ° ℃ 半角 $','wkz' : '标点符号-左括号,全角:( 〔 [ { 《 【 〖 〈 半角:( [ { <','wky' : '标点符号-右括号,全角:) 〕 ] } 》 】 〗 〉 半角: ) ] { >','wm' : '标点符号-冒号,全角:: 半角: :','wn' : '标点符号-顿号,全角:、','wp' : '标点符号-破折号,全角:—— -- ——- 半角:—','ws' : '标点符号-省略号,全角:…… …','wt' : '标点符号-叹号,全角:! 半角:!','ww' : '标点符号-问号,全角:? 半角:?','wyz' : '标点符号-左引号,全角:“ ‘ 『','wyy' : '标点符号-右引号,全角:” ’ 』','x' : '字符串','xu' : '字符串-网址URL','xx' : '字符串-非语素字','y' : '语气词','z' : '状态词','un' : '未知词',}# 输出至工作台,并导出“词频.txt”文件print('\n词语\t词频\t词性')print('——————————')fileOut = open(Output, 'w', encoding='UTF-8') # 创建文本文件;若已存在,则进行覆盖fileOut.write('词语\t词频\t词性\n')fileOut.write('——————————\n')count = 0for TopWord, Frequency in word_counts_top: # 获取词语和词频for POS in jieba.posseg.cut(TopWord): # 获取词性if count == number:breakprint(TopWord + '\t', str(Frequency) + '\t',list(En2Cn.values())[list(En2Cn.keys()).index(POS.flag)]) # 逐行输出数据fileOut.write(TopWord + '\t' + str(Frequency) + '\t' + list(En2Cn.values())[list(En2Cn.keys()).index(POS.flag)] + '\n') # 逐行写入str格式数据count += 1fileOut.close() # 关闭文件# 词频展示print('\n开始制作词云……') # 提示当前状态mask = numpy.array(Image.open(background)) # 定义词频背景wc = wordcloud.WordCloud(font_path='/System/Library/Fonts/Hiragino Sans GB.ttc', # 设置字体background_color='white', # 背景颜色mask=mask, # 文字颜色+形状(有mask参数再设定宽高是无效的)max_words=number, # 显示词数max_font_size=150 # 最大字号)wc.generate_from_frequencies(word_counts) # 从字典生成词云print(word_counts)# wc.recolor(color_func=wordcloud.ImageColorGenerator(mask)) # 将词云颜色设置为背景图方案plt.figure('词云') # 弹框名称与大小# plt.subplots_adjust(top=0.99, bottom=0.01, right=0.99, left=0.01, hspace=0, wspace=0) # 调整边距plt.imshow(wc) # 处理词云plt.axis('off') # 关闭坐标轴print('制作完成!') # 提示当前状态plt.show()

如果觉得《python词云分析 jieba+wordcloud 按词频生成词云》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。