文档章节

LDA主题分析代码实现

WYF_DATA
 WYF_DATA
发布于 2017/07/11 17:00
字数 783
阅读 24
收藏 0
点赞 0
评论 0

主题文本分析:

 

首先读取txt文本,并删除stop_list中存放的停止词汇

f = open('..\\LDA_test.txt')

texts = [[word for word in line.strip().lower().split() if word not in stop_list] for line in f]

print('Text = ')

pprint(texts)  #输出格式处理好的文本内容

 

然后计算生成文本内容的词典

dictionary = corpora.Dictionary(texts)

print('corpora.Dictionary:')

print(dictionary)

 

然后将每个文档或者文档中的每个句子(一行)向量化

corpus = [dictionary.doc2bow(text) for text in texts]

print('corpus')

print(corpus)

 

然后计算词频

corpus_tfidf = models.TfidfModel(corpus)[corpus]

print('corpus_tfidf:')

print(corpus_tfidf)

 

然后可以条用LSI模型做文本分析

lsi = models.LsiModel(corpus_tfidf, num_topics=2, id2word=dictionary)

topic_result = [a for a in lsi[corpus_tfidf]]

pprint(topic_result) #输出每个文档或者每行句子的主题

 

或者输出每个主题的词汇构成

print('LSI Topics:')

pprint(lsi.print_topics(num_topics=2, num_words=5))

计算文档两两之间的相似度

similarity = similarities.MatrixSimilarity(lsi[corpus_tfidf])   # similarities.Similarity()

print('Similarity:')

pprint(list(similarity))

 

 

 

也可以用LDA模型来做主题分析

num_topics = 2

lda = models.LdaModel(corpus_tfidf, num_topics=num_topics, id2word=dictionary,

                          alpha='auto', eta='auto', minimum_probability=0.001, passes=10)

输出每个文档的主题分布:
doc_topic = [doc_t for doc_t in lda[corpus_tfidf]]

print('Document-Topic:\n')

pprint(doc_topic)

或者:

for doc_topic in lda.get_document_topics(corpus_tfidf):

print(doc_topic)

 

然后输出每个主题的词分布:

for topic_id in range(num_topics):

   print('Topic', topic_id)

   # pprint(lda.get_topic_terms(topicid=topic_id))

   pprint(lda.show_topic(topic_id))

 

计算文档之间的相似度

similarity = similarities.MatrixSimilarity(lda[corpus_tfidf])

print('Similarity:')

pprint(list(similarity))

 

 

基于lda第三方库实现的主题分析

需要先安装这个第三方库lda( pip install lda)

首先要把每个文档的格式转换为向量来表示

所以多个文档就形成了一个矩阵,维度为k*n,k为每个文档向量的长度,n为文档个数

例如:矩阵中的每个元素可以用tf—idf词频来表示

 

利用LDA模型进行建模

topic_num = 20

model = lda.LDA(n_topics=topic_num, n_iter=800, random_state=1)

model.fit(X)

 

输出各个主题的词分布

topic_word = model.topic_word_

print(("type(topic_word): {}".format(type(topic_word))))

print(("shape: {}".format(topic_word.shape)))

 

print((topic_word[:, :5]))  #由于词分布太长了,所以只用输出部分

 

可以输出每个主题topK个词汇:
n = 7

for i, topic_dist in enumerate(topic_word):

    topic_words = np.array(vocab)[np.argsort(topic_dist)][:-(n + 1):-1]

print(('*Topic {}\n- {}'.format(i, ' '.join(topic_words))))

 

其中vocab为所有文档的词汇元组,就是对应词向量的词汇元组

长度等于每个文档词向量的长度

 

最终输出我们想要知道的每个文档对应的最有可能的主题:

doc_topic = model.doc_topic_

print(("type(doc_topic): {}".format(type(doc_topic))))

print(("shape: {}".format(doc_topic.shape)))

for i in range(10):

    topic_most_pr = doc_topic[i].argmax()

print(("文档: {} 主题: {} value: {}".format(i, topic_most_pr, doc_topic[i][topic_most_pr])))

 

 

最后是可视化:
mpl.rcParams['font.sans-serif'] = ['SimHei']

    mpl.rcParams['axes.unicode_minus'] = False

 

    # Topic - word

    plt.figure(figsize=(7, 6))

    # f, ax = plt.subplots(5, 1, sharex=True)

    for i, k in enumerate([0, 5, 9, 14, 19]):

        ax = plt.subplot(5, 1, i+1)

        ax.plot(topic_word[k, :], 'r-')

        ax.set_xlim(-50, 4350)   # [0,4258]

        ax.set_ylim(0, 0.08)

        ax.set_ylabel("概率")

        ax.set_title("主题 {}".format(k))

    plt.xlabel("词", fontsize=13)

    plt.tight_layout()

    plt.suptitle('主题的词分布', fontsize=15)

    plt.subplots_adjust(top=0.9)

    plt.show()

 

    # Document - Topic

    plt.figure(figsize=(7, 6))

    # f, ax= plt.subplots(5, 1, figsize=(8, 6), sharex=True)

    for i, k in enumerate([1, 3, 4, 8, 9]):

        ax = plt.subplot(5, 1, i+1)

        ax.stem(doc_topic[k, :], linefmt='g-', markerfmt='ro')

        ax.set_xlim(-1, topic_num+1)

        ax.set_ylim(0, 1)

        ax.set_ylabel("概率")

        ax.set_title("文档 {}".format(k))

    plt.xlabel("主题", fontsize=13)

    plt.suptitle('文档的主题分布', fontsize=15)

    plt.tight_layout()

    plt.subplots_adjust(top=0.9)

    plt.show()

© 著作权归作者所有

共有 人打赏支持
WYF_DATA
粉丝 1
博文 4
码字总数 5290
作品 0
主题模型LDA

主题模型,说实话之前学的时候还真没见过,所以看到这一章的时候感觉很是疑惑,不知道主题模型是要干什么。看完后感觉这个主题模型应该是nlp中的一种特殊的聚类方式,可以通过对文档提取主题...

NORTHhan ⋅ 2016/04/11 ⋅ 0

教程 | 一文读懂如何用LSA、PSLA、LDA和lda2vec进行主题建模

  选自 Medium   作者:Joyce Xu   机器之心编译   参与:乾树、王淑婷      本文是一篇关于主题建模及其相关技术的综述。文中介绍了四种最流行的技术,用于探讨主题建模,它们分...

机器之心 ⋅ 06/08 ⋅ 0

LDA(Dirichlet Distribution)主题模型基本知识与理解(一)

最近在研究无监督模型与降维技术,说起无监督模型,我们首先想到的是聚类技术(Clustering),而在实际生产中,很多方法可以被用来做降维(正则化Lasso/Ridge回归、PCA主成分分析、小波分析、...

little_fire ⋅ 05/28 ⋅ 0

【文智背后的奥秘】系列篇——文本聚类系统

版权声明:本文由文智原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/131 来源:腾云阁 https://www.qcloud.com/community 一.文本聚类概述 文本聚类是...

偶素浅小浅 ⋅ 2016/11/04 ⋅ 0

留给人类的时间不多了?现在不学机器学习更待何时!

立即参团 原价 ¥899.00 目前已达最低价 ¥399.00 >>点击文末阅读原文参团<< 机器学习(升级版Ⅶ) 课程目标:本课程特点是从数学层面推导最经典的机器学习算法,以及每种算法的示例和代码实...

bjweimengshu ⋅ 2017/11/21 ⋅ 0

Apache Spark 官方文档 翻译 - spark lda

学习[spark lda]https://spark.apache.org/docs/latest/mllib-clustering.html#latent-dirichlet-allocation-lda() 英文文档,顺便翻译了方便学习。 理论参数 狄利克雷分配(Latent Dirichle......

___k先生 ⋅ 2017/12/11 ⋅ 0

pyLDAvis 模块代码及应用

背景 pyLDAvis模块是python中的一个对LDA主题模型算法的可视化模块。本文的代码是根据github上的某个项目代码修改而得,很感谢github及创造原始代码的大牛朋友们! import pandas as pd df =...

H2016 ⋅ 01/10 ⋅ 0

用机器学习研究UFO目击报告!数据科学之魅:隐含狄利克雷分布

更多深度文章,请关注:https://yq.aliyun.com/cloud 本篇文章是讨论热门机器学习算法的文章合集中的一篇。如果你想了解更加详尽的背景知识以及我的写作初衷,请阅读这篇文章。 背景 隐含狄利...

【方向】 ⋅ 2017/01/10 ⋅ 0

Python文本挖掘-PDF和脚本见附件

课程要点 •分词以及词权重 •文本分类算法 •文本检索和LDA 常国珍《Python数据科学:全栈技术详解》 3 课程大纲 1)文本挖掘介绍 2)中文分词 3)文本特征提取与相关性的度量 4)文本分类 5)主...

Ben_Chang ⋅ 05/01 ⋅ 0

机器学习常见分类算法

机器学习常见分类算法 朴素贝叶斯分类器(Naive Bayes) 主要思想: 朴素贝叶斯法是基于贝叶斯定理与特征条件独立假设的分类方法。对于给定的训练数据集,首先基于特征条件独立假设学习输入/...

srcool ⋅ 2016/11/05 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

android -------- 颜色的半透明效果配置

最近有朋友问我 Android 背景颜色的半透明效果配置,我网上看资料,总结了一下, 开发中也是常常遇到的,所以来写篇博客 常用的颜色值格式有: RGB ARGB RRGGBB AARRGGBB 这4种 透明度 透明度...

切切歆语 ⋅ 7分钟前 ⋅ 0

CentOS开机启动subversion

建立自启动脚本: vim /etc/init.d/subversion 输入如下内容: #!/bin/bash## subversion startup script for the server## chkconfig: 2345 90 10# description: start the subve......

随风而飘 ⋅ 11分钟前 ⋅ 0

Nginx + uwsgi @ubuntu

uwsgi 安装 sudo apt-get install python3-pip # 注意 ubuntu python3默认没有安装pippython3 -m pip install uwsgi 代码(test.py) def application(env, start_response): start_res......

袁祾 ⋅ 12分钟前 ⋅ 0

版本控制工具

CSV , SVN , GIT ,VSS

颖伙虫 ⋅ 14分钟前 ⋅ 0

【2018.06.19学习笔记】【linux高级知识 13.1-13.3】

13.1 设置更改root密码 13.2 连接mysql 13.3 mysql常用命令

lgsxp ⋅ 22分钟前 ⋅ 0

LVM

LVM: 硬盘划分分区成物理卷->物理卷组成卷组->卷组划分逻辑分区。 1.磁盘分区: fdisk /dev/sdb 划分几个主分区 输入t更改每个分区类型为8e(LVM) 使用partprobe生成分区的文件:如/dev/sd...

ZHENG-JY ⋅ 50分钟前 ⋅ 0

彻底删除Microsoft Office的方法

参照此链接彻底删除Office https://support.office.com/zh-cn/article/%e4%bb%8e-pc-%e5%8d%b8%e8%bd%bd-office-9dd49b83-264a-477a-8fcc-2fdf5dbf61d8?ui=zh-CN&rs=zh-CN&ad=CN......

Kampfer ⋅ 今天 ⋅ 0

大盘与个股之间关系

大盘走多:积极出手 顺势加码 大盘走空: 少量出手 退场观望 大盘做头:逆势减码 少量操作 大盘做底 : 小量建仓 小量试单

guozenhua ⋅ 今天 ⋅ 0

Day16 LVM(逻辑卷管理)与磁盘故障小案例

lvm详解 简述 LVM的产生是因为传统的分区一旦分区好后就无法在线扩充空间,也存在一些工具能实现在线扩充空间但是还是会面临数据损坏的风险;传统的分区当分区空间不足时,一般的解决办法是再...

杉下 ⋅ 今天 ⋅ 0

rsync实现多台linux服务器的文件同步

一、首先安装rsync,怎样安装都行,rpm,yum,还是你用源码安装都可以。因为我用的是阿里云的ESC,yum install rsync就ok了。 二、配置rsync服务 1.先建立个同步数据的帐号 123 groupadd r...

在下头真的很硬 ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部