说明:本文依据《中文自然语言处理入门实战》完成。目前网上有不少转载的课程,我是从GitChat上购买。
第四课 文本可视化技巧
文本可视化流程
文本可视化依赖于自然语言处理,因此词袋模型、命名实体识别、关键词抽取、主题分析、情感分析等是较常用的文本分析技术。
文本分析的过程主要包括特征提取,通过分词、抽取、归一化等操作提取出文本词汇级的内容,利用特征构建向量空间模型并进行降维,以便将其呈现在低维空间,或者利用主题模型处理特征,最终以灵活有效的形式表示这些处理过的数据,以便进行可视化呈现。
1.基于内容的可视化
主要包括的就是词频可视化、词汇分布可视化。
2.基于关系的可视化
帮助人们理解文本内容和发现规律。常用的可视化形式有树状图、节点连接的网络图、力导向图、叠式图和 Word Tree 等。
3.基于多层面的可视化
基于多层面信息的可视化主要研究如何结合信息的多个方面帮助用户从更深层次理解文本数据,发现其内在规律。其中,包含时间信息和地理坐标的文本可视化近年来受到越来越多的关注。
介绍了三种可视化方式
词云、关系图、热力图,教程挺鸡贼的,只放了核心代码,也不说源码在哪里……搞笑吧。我这里仅对词云和关系图的代码进行补全。
词云
我用2019年新年贺词来制作,看看2019年的愿景是什么
import chardet # 检测字符类型的类
from wordcloud import WordCloud # 词云库
import matplotlib.pyplot as plt
import pandas as pd
import jieba
import jieba.analyse
import matplotlib.pyplot as plt
import numpy as np
dir = r"C://Users//01//Desktop//"
file_dec = "".join([dir, 'new1.txt'])
stop_words = "".join([dir, 'stopwords.txt'])
stopwords = pd.read_csv(stop_words, index_col=False, quoting=3, sep="\t", names=['stopword'], encoding='utf-8')
stopwords = stopwords['stopword'].values
data = pd.read_csv(file_dec, index_col=False, quoting=3, sep="\t", names=['new1'], encoding='utf-8')
data = data['new1'].values
sentences = []
for line in data:
try:
segs = jieba.lcut(line)
segs = [v for v in segs if not str(v).isdigit()] # 去数字
segs = list(filter(lambda x: x.strip(), segs)) # 去左右空格
segs = list(filter(lambda x: x not in stopwords, segs)) # 去掉停用词
sentences.append(segs)
except Exception:
print(line)
continue
print(sentences)
sentences=','.join(sentences[0])
print(sentences)
from wordcloud import WordCloud
wc = WordCloud(
background_color="white", # 背景颜色
max_words=200, # 显示最大词数
font_path="C:\Windows\Fonts\MFLiHei_Noncommercial-Regular.otf", # 使用字体
min_font_size=15,
max_font_size=50,
width=400 # 图幅宽度
)
wc.generate(sentences)
wc.to_file("pic.png")
# with open(file_dec,encoding='utf-8') as f:
# text=f.read()
# wordcloud=WordCloud(background_color="white", # 背景颜色
# max_words=200, # 显示最大词数
# font_path="C:\Windows\Fonts\MFLiHei_Noncommercial-Regular.otf", # 使用字体
# min_font_size=15,
# max_font_size=50,
# width=400 # 图幅宽度
# )
# wordcloud.generate(text)
# plt.imshow(wordcloud,interpolation='bilinear')
# plt.axis("off")
# plt.show()
pic.png
下面注释部分是没有进行分词的情况,如果操作的话会发现是以整句形式处理的,这也是中英文NLP的区别,英文在自带空格,词义会更明晰一些。
在数据清洗中,我还是倾向使用Pandas对数据进行操作,但是这个代码写得很乱。勉强实现了功能而已。
网友评论