(一)文本可视化种类
(1)基于文本内容的可视化
基于文本内容的可视化研究包括基于词频的可视化和基于词汇分布的可视化,常用的有词云、分布图和 Document Cards 等。
(2)基于文本关系的可视化
基于文本关系的可视化研究文本内外关系,帮助人们理解文本内容和发现规律。常用的可视化形式有树状图、节点连接的网络图、力导向图、叠式图和 Word Tree 等。
(3)基于多层面信息的可视化
基于多层面信息的可视化主要研究如何结合信息的多个方面帮助用户从更深层次理解文本数据,发现其内在规律。其中,包含时间信息和地理坐标的文本可视化近年来受到越来越多的关注。常用的有地理热力图、ThemeRiver、SparkClouds、TextFlow 和基于矩阵视图的情感分析可视化等。
(二)词云实战
(1)整体流程
获取语料——>分词(jieba、gensim)——>文本清洗(去停用词等)——>统计词频——>绘制词云
(2)分步操作(代码)
① 导入相关包
import jiebaimport numpy as npimport pandas as pdfrom wordcloud import WordCloud, ImageColorGeneratorimport matplotlib.pyplot as pltimport os,sys
② 获取语料
我是自己摘取论文中的几段文字保存成manifold.txt文件。根据自己情况创建文件。path是语料文件的路径。
# 文件路径path = 'D:\deep_learn\TextAnalysis\文本可视化'filepath = os.path.join(path,'manifold.txt')# 读取文件with open(filepath, 'r+', encoding='utf8') as f:text = f.read()
③ 用jieba进行分词
此处先添加了一个名词‘多流形’,否则分词分不出来。raw是形式为[‘流形’,’学习’……]的列表。可以直接用jieba.lcut()进行分词直接得到列表。
# 结巴分词jieba.add_word("多流形")raw = list(jieba.cut(text, cut_all=False))
④ 数据清洗
首先读取停用词,生成一个停用词列表。然后进行数据清洗。得到干净的文本pure_text
# 获取停用词列表stopwords_path = os.path.join(path, 'stopwords.txt')stopword_list = []with open(stopwords_path, 'r+', encoding='utf8') as f:for word in f.readlines():if len(word)>0 and word != '\t\n':stopword_list.append(word)# 文本清洗 获得干净文本pure_text = []for word in raw:if len(word)>1 and word != "\n\r":if not word.isdigit(): #去数字if word.strip() not in stopword_list: #去左右空格pure_text.append(word.strip())
⑤ 统计词频
吧文本列表转成pandas的Dataframe形式,然后进行词频统计。
# (1)用DataFrame操作content = pd.DataFrame(pure_text, columns=['word'])# 每个词出现的频率赋予一个新的列content_new = content.groupby(by=['word'])['word'].agg({"count":np.size})# 按频率排序content_new = content_new.reset_index().sort_values(by=['count'], ascending=False)
⑥ 绘制词云
此处采用默认方式,也可以用自定义方式。
wordcloud = WordCloud(font_path='./zi.ttf', background_color='white', max_font_size=80)word_frequence = {x[0]:x[1] for x in content_new.head(100).values}wordcloud = wordcloud.fit_words(word_frequence)# 展示图片plt.imshow(wordcloud)plt.axis("off")plt.show()# 保持图片wordcloud.to_file('./picture/manifold.jpg')
⑥ 结果

