Python画文字云图

Python画文字云图

  • 利用Python画文字云图,必须安装两个包:分词工具包jieba、文字云包wordcloud
  • 除了Python之外,R也可以用来做文字云:分词工具包Rwordseg、文字云包wordcloud2
    本文主要介绍用Python做文字云图,选取文本《明朝那些事儿 —— 万历十五年的谜团》一章。

    分词

    jieba分词主要有三种模式:
  • 精确模式,试图将句子最精确地切开,适合文本分析
  • 全模式,把句子中所有的可以成词的词语都扫描出来, 速度非常快,但是不能解决歧义
  • 搜索引擎模式,在精确模式的基础上,对长词再次切分,提高召回率,适合用于搜索引擎分词
1
2
3
4
5
6
7
8
9
10
import jieba
seg_list = jieba.cut("我来到北京清华大学", cut_all=True, HMM=False)
print("Full Mode: " + "/ ".join(seg_list)) # 全模式
seg_list = jieba.cut("我来到北京清华大学", cut_all=False, HMM=True)
print("Default Mode: " + "/ ".join(seg_list)) # 默认模式
seg_list = jieba.cut("他来到了网易杭研大厦", HMM=False)
print(", ".join(seg_list)) # 搜索引擎模式
# jieba.cut的默认参数只有三个,jieba源码如下
# cut(self, sentence, cut_all=False, HMM=True)
# 分别为:输入文本 是否为全模式分词 与是否开启HMM进行中文分词
1
2
3
4
5
6
import matplotlib.pyplot as plt
from wordcloud import WordCloud
import jieba
import pandas as pd
import numpy as np
from scipy.misc import imread #解析图片的作用
1
2
3
4
5
#导入数据
data_txt = open('C:/Users/word.txt').read()
jieba.load_userdict("newdict.txt") #加载自定义词典
jieba.add_word('万历十五年') #加入想要的词语
# R中用Rwordseg可以直接导入搜狗的词库

导入的文本中有一些譬如语气词等,对整体的文字云没有帮助,因此需要去掉:

1
2
3
4
5
6
7
8
9
10
11
12
#去掉一些词语
def seg_sentence(sentence):
sentence_seged = jieba.cut(sentence.strip()) #去除首尾空格
stopwords = open('C:/Users/stop_word.txt').read() #一些语气助词等
outstr = ''
for word in sentence_seged:
if word not in stopwords:
if word != '\t':
outstr += word
outstr += " "
return outstr
data_txt = seg_sentence(data_txt)

1
2
3
4
5
6
7
8
9
10
11
12
#分词
segment=[]
seg_list1 = jieba.cut(data_txt,cut_all=False)
for seg in seg_list1:
if len(seg)>1 and seg!='\r\n':
segment.append(seg)
#统计词频
words_df=pd.DataFrame({'segment':segment})
words_df.head()
words_stat=words_df.groupby(by=['segment'])['segment'].agg({"计数":np.size})
words_stat=words_stat.reset_index()
words_stat.head()

画图

词库搜索: https://pinyin.sogou.com/dict/
选择图片如下:(背景白色、形状容易识别的图片效果会更好)

1
2
3
4
5
6
7
8
9
10
11
#画图准备
cloud_mask=imread(r'D:/ming.jpg')
wordcloud=WordCloud(font_path="D:/simhei.ttf",
mask=cloud_mask,
#stopwords=stopwords,
background_color="white",
max_words=500,
width=1000,
height=860) #,scale=10
words=words_stat.set_index('segment').to_dict()
wordcloud.fit_words(words['计数'])

1
2
3
4
#绘图
fig = plt.imshow(wordcloud)
fig.show()
wordcloud.to_file('D:/test.png')

最后的成果:

在线工具推荐

大千世界,很多事情都能找到巨人的肩膀来借力,文字云的在线工具就是这个伟大的巨人肩膀,推荐两个:

---------- End 谢谢您的阅读----------

本文标题:Python画文字云图

原始链接:http://yoursite.com/2019/03/23/文字云图/

许可协议: Janet-非商业性使用- 转载请保留原文链接及作者。

0%