目录

  • 一、使用sklearn里面的LatentDirichletAllocation做主题挖掘
  • 二、使用gensim的ldamodel做主题挖掘
  • 三、如何将结果可视化
  • 四、如何确定主题数
    • 4.1 观察可视化图形
    • 4.2 使用模型检验指标判断
  • B站视频《[数说弹幕]我不小心看了后浪弹幕》
  • 关于《后浪》的B站弹幕分析总结(一)——爬取B站视频的上万条弹幕的方法
  • 关于《后浪》的B站弹幕分析总结(二)——分词常用的词典、颜文字处理以及格式统一
  • 关于《后浪》的B站弹幕分析总结(三)——怎么制作好看的交互式词云

这一步的实现是建立在分词工作已经做好了的基础上,具体方法可以参考我之前的文章,这里不再重复说明。这里介绍两种方法,两种方法都好用,看你习惯哪种了。

一、使用sklearn里面的LatentDirichletAllocation做主题挖掘

from sklearn.feature_extraction.text import TfidfVectorizer, CountVectorizer #基于TF-IDF的词频转向量库
tf_vectorizer=TfidfVectorizer(stop_words=stoplist,tokenizer=jieba_cut,use_idf=True) #创建词向量模型,这里的jieba_cut是自定义的分词函数
tf=tf_vectorizer.fit_transform(comment_list) #将评论关键字列表转换为词向量空间
from sklearn.decomposition import LatentDirichletAllocation #导入 LDA模型库
n_topics=5 #设置主题个数
lda=LatentDirichletAllocation(n_components=n_topics,max_iter=200,learning_method='online',learning_offset=50.,random_state=0)
lda.fit(tf)#拟合模型

得到下面模型结果

LatentDirichletAllocation(batch_size=128, doc_topic_prior=None,evaluate_every=-1, learning_decay=0.7,learning_method='online', learning_offset=50.0,max_doc_update_iter=100, max_iter=50,mean_change_tol=0.001, n_components=5, n_jobs=None,perp_tol=0.1, random_state=0, topic_word_prior=None,total_samples=1000000.0, verbose=0)
#定义展示模型函数
def print_top_words(model,feature_names, n_top_words):for topic_idx, topic in enumerate(model.components_):print("Topic #%d:" %topic_idx)print(' '.join([feature_names[i] for i in topic.argsort()[:-n_top_words - 1:-1]]))print()
n_top_words=20 #设置每个主题展示词组个数
tf_feature_names=tf_vectorizer.get_feature_names()
print_top_words(lda,tf_feature_names,n_top_words)

结果如下:

Topic #0:
奔涌 后浪 BILIBILI 排面 泪目 高考 看到 P3 帅 弹幕 作文 TESTV 河流 沙滩 当自强 老泪纵横 必胜 热乎 星巴克 嘶吼
Topic #1:
干杯 哔哩哔哩 加油 FPX 哭 牌面 冲冲冲 复旦 中考 说 博爱 哥哥 牛壁 牛皮 写 电 鸭 刘振邦 子霖叔 青年人
Topic #2:
光 火 牛逼 和而不同 IG 老番茄 NB 美美与共 君子 青年 时代 前辈 同学 学习 有幸 感谢 遇见 冠军 浪 祖国
Topic #3:
站 B 爱 老师 中国 何冰 破 党妹 年轻 感动 共勉 谢谢 小破站 朋友 喜欢 RNG 李子 最好 时代 NANA
Topic #4:
致敬 强大 鼓励 赞美 内心 热泪盈眶 未来 奔跑 吝啬 青春 世界 合影 年轻人 激动 拥抱 热血沸腾 否定 表达 嘲讽 弱小

二、使用gensim的ldamodel做主题挖掘

from gensim.corpora import Dictionary
from gensim.models import ldamodel
from gensim.models import CoherenceModel, LdaModel
from gensim import models
%matplotlib inline
d=Dictionary(words_list) #分词列表转字典
corpus=[d.doc2bow(text) for text in words_list] #生成语料库
model=ldamodel.LdaModel(corpus,id2word=d,iterations=2500,num_topics=4,alpha='auto')#生成模型
model.show_topics(num_words=20) #展示每个主题下的20个词组

结果如下:

[(0,'0.028*"老师" + 0.027*"来" + 0.027*"站" + 0.024*"破" + 0.023*"小" + 0.021*"要" + 0.021*"是" + 0.021*"好" + 0.020*"何冰" + 0.017*"看" + 0.016*"未来" + 0.015*"冲" + 0.015*"哭" + 0.014*"致敬" + 0.012*"牛逼" + 0.011*"NB" + 0.010*"高能" + 0.009*"B站" + 0.008*"世界" + 0.008*"热血沸腾"'),(1,'0.418*"后浪" + 0.417*"奔涌" + 0.009*"谢谢" + 0.006*"奔跑" + 0.006*"中考" + 0.006*"前辈" + 0.006*"是" + 0.004*"感谢" + 0.004*"中国" + 0.004*"生活" + 0.004*"否定" + 0.004*"弱小" + 0.004*"嘲讽" + 0.003*"演员" + 0.003*"习惯" + 0.003*"看着" + 0.003*"感激" + 0.003*"满怀" + 0.002*"人" + 0.002*"优秀"'),(2,'0.337*"干杯" + 0.265*"哔哩哔哩" + 0.109*"有" + 0.053*"光" + 0.049*"火" + 0.035*"泪目" + 0.025*"爱" + 0.013*"牌面" + 0.004*"B站" + 0.004*"感动" + 0.003*"长江后浪推前浪" + 0.003*"朋友" + 0.002*"水印" + 0.002*"了解" + 0.002*"讲" + 0.002*"厉害" + 0.002*"事" + 0.002*"好看" + 0.002*"小人" + 0.002*"泪光"'),(3,'0.216*"加油" + 0.135*"排面" + 0.047*"BILIBILI" + 0.025*"人" + 0.016*"B" + 0.016*"强大" + 0.015*"鼓励" + 0.015*"赞美" + 0.015*"内心" + 0.014*"时代" + 0.014*"君子" + 0.014*"站" + 0.013*"吝啬" + 0.011*"美美与共" + 0.011*"干杯" + 0.010*"喜欢" + 0.010*"和而不同" + 0.009*"青春" + 0.009*"小破站" + 0.009*"今年"')]

可以看到不仅展示了主题词组,还展示了词组权重。

三、如何将结果可视化

import warnings
try:import pyLDAvis.gensimCAN_VISUALIZE=TruepyLDAvis.enable_notebook()from IPython.display import display
except ImportError:ValueError("SKIP: please install pyLDAvis")CAN_VISUALIZE=False
warnings.filterwarnings('ignore')
%matplotlib inlineprepared = pyLDAvis.gensim.prepare(model,corpus,d)
pyLDAvis.show(prepared, open_browser=True)

结果输出为html可交互的可视化图表

具体动图可参看我的B站视频,视频链接在文章开头。

四、如何确定主题数

4.1 观察可视化图形

通过上面的可视化图表,看每个类别圆形区域是否重叠较多,再在程序中手动调整主题数。

4.2 使用模型检验指标判断

通过一些模型检验指标来判断,例如u_mass, c_v等
设置两个用作比较的模型

goodLdaModel = LdaModel(corpus=corpus, id2word=dictionary, iterations=50, num_topics=3)
badLdaModel = LdaModel(corpus=corpus, id2word=dictionary, iterations=50, num_topics=10)

使用U_Mass Coherence

goodcm = CoherenceModel(model=goodLdaModel, corpus=corpus, dictionary=dictionary, coherence='u_mass')
badcm = CoherenceModel(model=badLdaModel, corpus=corpus, dictionary=dictionary, coherence='u_mass')

可视化主题模型

pyLDAvis.enable_notebook()
pyLDAvis.gensim.prepare(goodLdaModel, corpus, dictionary)
pyLDAvis.gensim.prepare(badLdaModel, corpus, dictionary)
print goodcm.get_coherence()
-14.0842451581
print badcm.get_coherence()
-14.4434307511

这个指标值越大越好,所以goodcm要好于badcm
使用C_V coherence

goodcm = CoherenceModel(model=goodLdaModel, texts=texts, dictionary=dictionary, coherence='c_v')
badcm = CoherenceModel(model=badLdaModel, texts=texts, dictionary=dictionary, coherence='c_v')

结果是:

print goodcm.get_coherence()
0.552164532134
print badcm.get_coherence()
0.5269189184

这个指标也是越大越好。

下一篇文章我将着重讲情感分析以及一点点情绪分析的内容,敬请期待

关于《后浪》的B站弹幕分析总结(四)——Python实现LDA内容主题挖掘及主题可视化相关推荐

  1. 关于《后浪》的B站弹幕分析总结(一)——爬取B站视频的上万条弹幕的方法

    目录 一.先尝试爬取1000条 1 .1 查找弹幕所在地址 1.2 代码实现 二.1000条不够我想要更多怎么办? 三.B站弹幕文件里的其他信息有用吗? 注意:这是一篇技术类文章 前几天我做了B站&l ...

  2. 关于《后浪》的B站弹幕分析总结(二)——jieba分词、常用词典、颜文字处理以及字符格式统一

    目录 一.你需要知道的几个常用词典 - **停用词典(停用词,颜文字,emoji)** - 否定词典,程度副词词典 - 情感极性词典,多维情感词典 二.统一字符.统一大小写.统一繁简体 - 统一字符 ...

  3. 关于《后浪》的B站弹幕分析总结(三)——怎么制作好看的交互式词云

    目录 一.对分词做词频统计 二.使用wordcloud展示词云 二.使用pyecharts绘制词云 三.使用词云制作工具 与本文相关内容链接: B站视频<[数说弹幕]我不小心看了后浪弹幕> ...

  4. 基于python的论文分析_【论文实现】一篇Sigkdd的弹幕分析论文的python实现【LDA 实践者】...

    [论文实现]一篇Sigkdd的弹幕分析论文的python实现 [LDA 实践者] Author : Jasper Yang School : Bupt warning : 此篇文章基于较为熟悉Gibb ...

  5. 【论文实现】一篇Sigkdd的弹幕分析论文的python实现【LDA 实践者】

    [论文实现]一篇Sigkdd的弹幕分析论文的python实现 [LDA 实践者] Author : Jasper Yang School : Bupt warning : 此篇文章基于较为熟悉Gibb ...

  6. python爬取b站弹幕分析_Python 爬取「后浪」弹幕,看看大家都在说什么

    前天,正好是五四青年节, B 站的一条献给年轻人的视频「后浪」火了,一时间到处都是各种讨论「后浪」的声音. 其他的平台先不管,先看看 B 站平台本身用户对「后浪」的评价. B 站的评论是弹幕的形式,想 ...

  7. python爬取b站弹幕分析_python爬取B站视频弹幕分析并制作词云

    目录1.分析网页 2.爬虫+jieba分词+制作词云2.1爬虫 2.2jieba分词 2.3制作词云 3.成品展示 4.完整代码 1.分析网页 视频地址:https://www.bilibili.co ...

  8. 爬虫6_周杰伦新歌《Mojito》B站弹幕分析

    6.12周杰伦发布新歌<Mojito>,赶紧蹭个热点来看一下大家弹幕都会说点什么. 爬取链接[官方MV]Mojito - 周杰伦 本项目源码,提取码duq8 目前弹幕只能抓取1000条,再 ...

  9. python爬取b站弹幕分析_B站弹幕爬取原理解析(python)

    感谢 原理 概念 cid : 爬取弹幕需要的id号,可以由BV号通过API接口获得 步骤BV转cid 浏览器输入:https://api.bilibili.com/x/player/pagelist? ...

最新文章

  1. 魅族手机使用鸿蒙系统,魅族宣布接入华为鸿蒙系统,这应该是黄章最正确的决定...
  2. 【Groovy】MOP 元对象协议与元编程 ( Groovy 类内部和外部分别获取 metaClass | 分析获取 metaClass 操作的字节码 | HandleMetaClass 注入方法 )
  3. 2_指令集、体系架构、微架构
  4. Linux 设备驱动的并发控制
  5. 报应!GitHub上线围剿Python计划,已有4万人跟进,你呢?
  6. C# 通过ImportNode AppendChild方法合并XmlDocument,XML转为DataTable
  7. sql server无法绑定由多个部分组成的标识符_HTML5服务器推送事件(Server-sent-event)...
  8. [Unity3D]深度相机 Depth Camera
  9. 微服务学习之服务治理、服务注册与发现、Eureka【Hoxton.SR1版】
  10. 2021-09-02Hive 未被external修饰的是内部表,被external修饰的是外部表
  11. 百度世界2021:百度大脑升级、昆仑芯2量产、智能云加速AI落地爆发
  12. 约瑟夫环c语言程序完整版,约瑟夫环的c语言实现(代码已实现)
  13. docker network详解、教程
  14. 机器学习笔记之基础概念
  15. 搭建mysql注入_常见的sql注入环境搭建
  16. 天龙八部 - 其它 - 属性伤害的计算方法
  17. STM32驱动PCF8563,使用模拟IIC
  18. 西安交通大学第14周大计基
  19. 数据库实验(进一步了解Sql server企业管理器)实验报告
  20. vue项目中高德地图根据城市名定位到城市中心位置,并在该位置做标记

热门文章

  1. 八招教你解决网络故障!
  2. 通用Mapper的example实例使用
  3. 腾讯免费企业邮箱服务器,怎样使用免费的腾讯企业邮箱
  4. #### Kafka Rebalance ####
  5. SD卡电平转换器 - NXS0506UP
  6. CS61A Proj 1
  7. 李连杰讲《功守道》:马云这个青年演员很敬业
  8. keep T 不是 KG等级_宅家锻炼堪比健身房,一对一“私教”,Keep 智能动感单车体验...
  9. 408计算机学科专业基础综合——操作系统
  10. ESL第八章 模型推断和平均 【参数】自助法/得分函数/信息矩阵/观测信息/费舍尔信息量、贝叶斯方法/无信息先验、高斯混合/GEM/MM算法、吉布斯、Bagging、委员会、Stacking、随机搜索