写在前面
今天早晨编毕设的时候,想先用ROST CM6利用语义网络分析简单对旅游形象进行一个感知。看了好几篇文献在做语义网络图前都提到了关键词词频统计分析,虽然ROST软件自带分词、词频统计功能,但我输出TOP 100的文字排序是乱的不说,连词频为1的词语都统计上去了,这显然是不合理的(也不知道其他人是咋做的还是软件出BUG了 )
接着就找了一上午的词频统计软件,好的软件要求付费(心疼.JPG),不好的软件分析不了2百万字的文档…
真就 “代码三两行,工具找半天”
总觉得为了点毕设犯不着还开个会员搞个 “文本输入不限量” 啥的吧…所以花了一上午,总结了一个简单的“词频统计+可视化分析”Python代码,可以基本满足上述需求,所采用的编辑器是Jupyter Notebook。
import re
import collections # 词频统计库
import numpy as np # numpy数据处理库
import jieba # 结巴分词
fn = open("评论文本数据.txt","r",encoding="utf-8")
string_data = fn.read()
fn.close()
# 文本预处理
# 定义正则表达式匹配模式
pattern = re.compile(u'\t|,|/|。|\n|\.|-|:|;|\)|\(|\?|"')
string_data = re.sub(pattern,'',string_data) # 将符合模式的字符去除
# 文本分词
# 精确模式分词
seg_list_exact = jieba.cut(string_data,cut_all=False)
object_list = []
# 自定义去除词库
remove_words = [u'的',u'嗯', u'“',u'”',u'和',u',',u'为',u'是',
'以' u'随着', u'对于', u'对',u'等',u'能',u'都',u'。',
u' ',u'、',u'中',u'在',u'了',u'通常',u'如果',u'我',
u'她',u'(',u')',u'他',u'你',u'?',u'—',u'就',u'!',
u'着',u'说',u'上',u'这', u'那',u'有', u'也',
u'什么', u'·', u'将', u'没有', u'到', u'不', u'去']
for word in seg_list_exact:
if word not in remove_words:
object_list.append(word)
# 词频统计
# 对分词做词频统计
word_counts = collections.Counter(object_list)
# 获取前20最高频的词
word_counts_all = word_counts.most_common()
word_counts_top10 = word_counts.most_common(10)
# print("文件中共有%d个词"%len(word_counts))
print(word_counts_top10)
接下来就是可视化部分,采用pyecharts库
import pyecharts
from pyecharts.charts import Line
from pyecharts import options as opts
# 示例数据
cate = [i[0] for i in word_counts_top30]
data1 = [i[1] for i in word_counts_top30]
line = (Line()
.add_xaxis(cate)
.add_yaxis('词频', data1,
markline_opts=opts.MarkLineOpts(data=[opts.MarkLineItem(type_="average")]))
.set_global_opts(title_opts=opts.TitleOpts(title="词频统计Top30", subtitle=""),
xaxis_opts=opts.AxisOpts(name_rotate=60,axislabel_opts={"rotate":45}))
)
line.render_notebook()
最终结果如图所示,还是不错的
顺便再加一句:
在jupyter中导入pyecharts库的时候,明明已经安装了相关库但是jupyter硬是说没这库,很可能的原因是安装路径不对导致的。那就直接在jupyter里安装好了。
!pip install pyecharts
即可正常完成库的导入。
然后就可以水掉毕设的这部分了,还是挺不错的~