前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >python 舆情分析 nlp主题分析 (3) --gensim库的简单使用

python 舆情分析 nlp主题分析 (3) --gensim库的简单使用

作者头像
forxtz
发布2020-10-19 14:57:37
2.8K0
发布2020-10-19 14:57:37
举报
文章被收录于专栏:源懒由码

python 舆情分析 nlp主题分析 (1) 待续: https://cloud.tencent.com/developer/article/1711630

python 舆情分析 nlp主题分析 (2)-结合snownlp与jieba库,提高分词与情感判断 待续:https://cloud.tencent.com/developer/article/1711633

代码语言:javascript
复制
前文摘要:
微博热门话题:#中印双方达成五点共识# 阅读量2.4亿,讨论7430条。

1、数据采集,使用python+selenium,采集该话题下的博文及作者信息,以及每个博文下的评论及作者信息;

2、数据预处理,采用Jieba库,构建用户词典,以达到更好的分词;情感分析,采用snownlp库,寻找政治类积极和负面词向量做一个训练,再进行评论分类;

3、对博文及评论作者信息进行分析,查看调查主体的用户类别概况;

4、lda主题分析,对博文做主题分析,依据top3主题关键字,对博文群主类看法进行分析;对正、负向评论做一次主题分析,并分别分析观点;

第1、2已完成,但是原始的积极和负面词料库不是特别好。最后一步是进行评论分析,本篇文章是学习gensim的使用方法。

参考资料:

使用gensim简单地跑个LDA模型:https://zhuanlan.zhihu.com/p/134161509

在已经1、文本预处理及分好词的基础上,整个流程大概为:2、使用语料库建立词典->3、语料库向量化(普通向量化/tfidf向量化)->4、调用模型->5、可视化显示,分析

由于简单评论的语料库不小心被删除....只好使用博文进行一波操作。

1.1、文本预处理,手动删除一些无效字符串。

代码语言:javascript
复制
# 读取源数据
data = pd.read_excel(r'../data/npl_asan/wenzhangs.xlsx',dtype=object)

# 构造一个需要删除的字符串列表
list_del = data['actor_name'].values.tolist()
list_del = list(set(list_del))
list_del.append('收起全文d')
list_del.append('中印双方达成五点共识')
list_del.append('#')
list_del.append('*')
list_del.append(r'\n')
list_del.append('\n')
list_del.append('\u200b')
list_del.append(r'↓')
list_del.append(r' ')
#list_del.append(r'?')

data['clear'] = data['content'].str.strip()

1.2分词处理

代码语言:javascript
复制
# 定义自定义分词函数,但是结果不对
def my_cut_handle(sent):
    return jieba.lcut(sent)

# 修改分词方法
seg.set_my_handle(my_cut_handle)
#自己准备的常用词词典
jieba.load_userdict(r'../data/npl_asan/words.txt') 

# 对语料库进行分词处理
words = []
for index, row in data.iterrows():
    sentence = row['clear']
    for l in list_del:
        sentence = sentence.replace(l,"")
    # 替换和去重
    s = SnowNLP(sentence)
    words.append(s.words_filter_stop)  # 去掉停止词

2、通过语料库建立词典

代码语言:javascript
复制
dictionary = corpora.Dictionary(words) #建立词典
#dictionary.save(r'../data/npl_asan/qzone.dict')  # 把字典存储下来,可以在以后直接导入

3、语料库向量化

代码语言:javascript
复制
# 普通向量化
corpus = [dictionary.doc2bow(s) for s in words]
#corpora.MmCorpus.serialize(r'../data/npl_asan/corpus_bow.mm', corpus)  # 存储语料库

# 词向量改成使用tfidf计量
tfidf = models.TfidfModel(corpus)
corpus_tfidf = tfidf[corpus]

4、调用建模

代码语言:javascript
复制
# 构建5个主题
model = models.LdaModel(corpus,id2word=dictionary,num_topics=5)
#model.save(r'../data/npl_asan/npl_asan.model')  # 将模型保存到硬盘
model.show_topics()

lda = models.LdaModel(corpus_tfidf, id2word = dictionary, num_topics = 5)
model.show_topics()
代码语言:javascript
复制
# 模型结果1

[(0,
  '0.010*"共识" + 0.008*"阿三" + 0.006*"中" + 0.006*"达成" + 0.006*"印度" + 0.005*"印" + 0.005*"看" + 0.005*"2" + 0.004*"边境" + 0.004*"\ue627"'),
 (1,
  '0.025*"印度" + 0.016*"中" + 0.013*"印" + 0.012*"边境" + 0.012*"中国" + 0.009*"共识" + 0.009*"不" + 0.009*"都" + 0.008*"外长" + 0.007*"达成"'),
 (2,
  '0.024*"印度" + 0.012*"不" + 0.012*"中国" + 0.010*"阿三" + 0.009*"两" + 0.008*"共识" + 0.008*"印" + 0.008*"中" + 0.007*"边境" + 0.005*"国家"'),
 (3,
  '0.032*"印度" + 0.013*"中国" + 0.008*"不" + 0.008*"视频" + 0.008*"说" + 0.007*"L" + 0.007*"都" + 0.007*"共识" + 0.007*"微博" + 0.005*"好"'),
 (4,
  '0.012*"共识" + 0.012*"印度" + 0.010*"希望" + 0.009*"达成" + 0.008*"印" + 0.008*"中" + 0.007*"中国" + 0.007*"五点" + 0.007*"都" + 0.006*"说"')]
代码语言:javascript
复制
# 模型结果2
[(0,
  '0.003*"共识" + 0.003*"印度" + 0.002*"视频" + 0.002*"微博" + 0.002*"L" + 0.002*"美国" + 0.002*"阿三" + 0.002*"达成" + 0.002*"说" + 0.002*"印方"'),
 (1,
  '0.003*"一套" + 0.003*"好" + 0.003*"共识" + 0.003*"说" + 0.003*"达成" + 0.003*"希望" + 0.002*"阿三" + 0.002*"印方" + 0.002*"做一套" + 0.002*"防"'),
 (2,
  '0.003*"印度" + 0.003*"阿三" + 0.002*"一套" + 0.002*"不" + 0.002*"希望" + 0.002*"2" + 0.002*"人" + 0.002*"背后" + 0.002*"会" + 0.002*"出尔反尔"'),
 (3,
  '0.004*"希望" + 0.003*"印度" + 0.003*"中国" + 0.003*"共识" + 0.003*"中" + 0.003*"印" + 0.003*"外长" + 0.002*"五点" + 0.002*"阿三" + 0.002*"两"'),
 (4,
  '0.002*"印度" + 0.002*"出尔反尔" + 0.002*"…" + 0.002*"阿三" + 0.002*"一套" + 0.002*"战报" + 0.002*"希望" + 0.002*"中国" + 0.001*"共识" + 0.001*"说到做到"')]

5、数据可视化

代码语言:javascript
复制
import pyLDAvis.gensim

vis = pyLDAvis.gensim.prepare(lda, corpus, dictionary)
# 需要的三个参数都可以从硬盘读取的,前面已经存储下来了
pyLDAvis.display(vis)

结论:从4、5汇聚的主题来看:大概可以认为,从收集的文章中,大家希望和平共处,达成共识,但是对阿三的出尔反尔老赖行为有所预期,其中还存在美国的干扰。

一家之言,没有代表性,希望世界和平。

总结:

大概掌握了lda分析的流程。

不足:1、没有进行文本分类(积极、消极),直接进行主题分析,主题有点混淆不是很明确;2、文本预处理欠缺,主题中存分隔符货一些无效词汇。

改进:需要积累文本分类素材,打磨文本分类模型;提高词典分词准确性,以及文本预处理有效性。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-10-10 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
NLP 服务
NLP 服务(Natural Language Process,NLP)深度整合了腾讯内部的 NLP 技术,提供多项智能文本处理和文本生成能力,包括词法分析、相似词召回、词相似度、句子相似度、文本润色、句子纠错、文本补全、句子生成等。满足各行业的文本智能需求。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档