基于LDA模型的主题分析
先看下数据:
1、建立词典、语料库
from gensim import corpora,models #主题挖掘,提取关键信息#建立词典,去重
pos_dict=corpora.Dictionary([ [i] for i in word_data_pos.word]) #shape=(n,1)
neg_dict=corpora.Dictionary([ [i] for i in word_data_neg.word])#建立语料库
pos_corpus=[ pos_dict.doc2bow(j) for j in [ [i] for i in word_data_pos.word] ] #shape=(n,(2,1))
neg_corpus=[ neg_dict.doc2bow(j) for j in [ [i] for i in word_data_neg.word] ]
2、主题数寻优
#构造主题数寻优函数def cos(vector1,vector2):'''函数功能:余玄相似度函数值越小越相似'''dot_product=0.0normA=0.0normB=0.0for a,b in zip(vector1,vector2):dot_product +=a*bnormA +=a**2normB +=b**2if normA==0.0 or normB==0.0:return Noneelse:return ( dot_product/((normA*normB)**0.5) )
#主题数寻优
#这个函数可以重复调用,解决其他项目的问题def LDA_k(x_corpus,x_dict):'''函数功能:'''#初始化平均余玄相似度mean_similarity=[]mean_similarity.append(1)#循环生成主题并计算主题间相似度for i in np.arange(2,11):lda=models.LdaModel(x_corpus,num_topics=i,id2word=x_dict) #LDA模型训练for j in np.arange(i):term=lda.show_topics(num_words=50)#提取各主题词top_word=[] #shape=(i,50)for k in np.arange(i):top_word.append( [''.join(re.findall('"(.*)"',i)) for i in term[k][1].split('+')]) #列出所有词#构造词频向量word=sum(top_word,[]) #列车所有词unique_word=set(word) #去重#构造主题词列表,行表示主题号,列表示各主题词mat=[] #shape=(i,len(unique_word))for j in np.arange(i):top_w=top_word[j]mat.append( tuple([ top_w.count(k) for k in unique_word ])) #统计list中元素的频次,返回元组#两两组合。方法一p=list(itertools.permutations(list(np.arange(i)),2)) #返回可迭代对象的所有数学全排列方式。y=len(p) # y=i*(i-1)top_similarity=[0]for w in np.arange(y):vector1=mat[p[w][0]]vector2=mat[p[w][1]]top_similarity.append(cos(vector1,vector2))# #两两组合,方法二
# for x in range(i-1):
# for y in range(x,i):#计算平均余玄相似度mean_similarity.append(sum(top_similarity)/ y)return mean_similarity
#计算主题平均余玄相似度pos_k=LDA_k(pos_corpus,pos_dict)
neg_k=LDA_k(neg_corpus,neg_dict)
pd.Series(pos_k,index=range(1,11)).plot()
plt.title('正面评论LDA主题数寻优')
plt.show()
pd.Series(neg_k,index=range(1,11)).plot()
plt.title('负面评论LDA主题数寻优')
plt.show()
pos_lda=models.LdaModel(pos_corpus,num_topics=2,id2word=pos_dict)
neg_lda=models.LdaModel(neg_corpus,num_topics=2,id2word=neg_dict)pos_lda.print_topics(num_topics=10)
neg_lda.print_topics(num_topics=10)
基于LDA模型的主题分析相关推荐
- 基于LDA模型的邮件主题分类
资源地址:希拉里邮件7000封左右,Emails.csv 运行环境:windows10(64bit) + python3.6 + pycharm Python源代码: import warnings ...
- NLP --- 文本分类(基于LDA的隐语意分析训练算法详解)
上一节详细介绍了什么是LDA,详细讲解了他的原理,大家应该好好理解,如果不理解,这一节就别看了,你是看不懂的,这里我在简单的叙述LDA的算法思想: 首先我们只拥有很多篇文本和一个词典,那么我们就可以在 ...
- NLP --- 文本分类(基于LDA的隐语意分析详解)
前几节我们分析了向量空间模型(VSM).基于奇异值分解(SVD)的潜语意分析(LSA).基于概率的潜语意分析(PLSA)这些模型都是为了解决文本分类问题,他们各自有自己的优点和缺点,其中VSM模型简单 ...
- 基于LDA模型的微博用户兴趣模型构建
目录 一.理论基础 二.核心程序 三.仿真结论 一.理论基础 用户在使用微博过程中产生的行为称为微博用户行为,这些行为根据用户在行使过程中属于实施者还是接受者,分为主动行为和被动行为.其中,在微博的日 ...
- 自然语言处理-应用场景-文本分类:基于LSTM模型的情感分析【IMDB电影评论数据集】--(重点技术:自定义分词、文本序列化、输入数据批次化、词向量迁移使用)
文本情感分类 1. 案例介绍 现在我们有一个经典的数据集IMDB数据集,地址:http://ai.stanford.edu/~amaas/data/sentiment/,这是一份包含了5万条流行电影的 ...
- 【项目实战】Python实现基于LDA主题模型进行电商产品评论数据情感分析
说明:这是一个机器学习.数据挖掘实战项目(附带数据+代码+文档+视频讲解),如需数据+代码+文档+视频讲解可以直接到文章最后获取. 视频: Python实现基于LDA模型进行电商产品评论数据情感分析 ...
- 自然语言处理(NLP)——LDA模型:对电商购物评论进行情感分析
目录 一.2020数学建模美赛C题简介 需求 评价内容 提供数据 二.解题思路 三.LDA简介 四.代码实现 1. 数据预处理 1.1剔除无用信息 1.1.1 剔除掉不需要的列 1.1.2 找出无效评 ...
- 文本挖掘:LDA模型对公号文章主题分析
转载自:[大数据部落]文本挖掘:LDA模型对公号文章主题分析@tecdat拓端 原文链接:http://tecdat.cn/?p=2175/ 1 语义透镜 顾客满意度和关注点 我们对于评价数据进行LD ...
- 基于LDA和baidu-aip的舆情分析项目
概述 本文主要分为数据获取(微博爬虫).文本分析(主题抽取.情感计算). 项目场景:以微博为数据源,分析新冠疫苗舆情的主题演化和情感波动趋势,结合时事进行验证,从而得出特殊事件对于舆情的特定影响,为突 ...
最新文章
- flink链接mysql_flink 将mysql作为Source和Sink的代码示例
- python gif动态图的合成
- 两个月的打卡活动圆满结束,今天公布兑奖详情
- [云炬创业学笔记]第二章决定成为创业者测试7
- 用MsgWaitForMultipleObjects代替WaitForSingleObject和WaitForMultipleObjects()
- linux服务器之间文件复制命令
- 项目版本管理的最佳实践:云效飞流Flow篇
- Python实战——2048
- kerberos linux 账号,使用AD / Kerberos进行身份验证/授权的Linux服务器是否需要计算机帐户?...
- gnome桌面终端程序 Guake
- vue中分割线的实现
- python密码学pdf_Python密码学编程 ([美]斯维加特) 中文完整pdf扫描版[199MB]
- 单元格内容分列多行_excel表格数据换行分列-EXCEL怎么分行呢?一个单元格有多行字,怎么向分列......
- java练习04|银行利率表如下表所示,请计算存款10000元,活期1年、活期2年,定期1年,定期2年后的本息合计。
- ***我是如何通过华为面试的?群面+技术面+综合面+英语面(Android岗)***
- 【ParaView教程】第四章 常见问题 —— 怎样计算正面投影面积?
- 获取ckeditor的内容
- mysql推binlog流_MySQL中binlog日记清理
- 拳头公司是哪个国家的
- 对各大预训练语言模型的简单总结和评述(BERT/RoBERTa/ALBERT/ELECTRA/ERNIE/structBERT/SpanBERT...)