DTM动态主题模型实战案例

针对三个月份某期刊论文的摘要进行时间片上的动态模型主题分析

代码实现所参考博客

文章目录

  • DTM动态主题模型实战案例
    • 代码实现所参考博客
  • 一、数据处理
  • 二、使用步骤
    • 1.引入库
    • 2.去除停用词,构建语料库以及词典
    • 3.构建模型
  • 三、结果展示
    • 1.某个主题三个时期主题下词语的概率分布
    • 2.查看生成文档的主题分布


提示:以下是本篇文章正文内容,下面案例可供参考

一、数据处理

所选取的数据集是某个期刊三个月以来的论文摘要,共计22条数据信息。每一条代表一条数据信息。

使用jieba分词对文本数据进行分词操作,结果会存在标点符号。

#encoding=utf-8
from __future__ import unicode_literals
import sys
sys.path.append("../")
import re
import jieba
import jieba.posseg
import jieba.analyse
import ref = open('1.txt', 'r', encoding='utf-8')
new_f = open("1.data.txt", "w", encoding="utf-8")
lines = f.readlines()
# 代码缺少中文标点符号逗号之类的,不全,分词结果会存在标点符号
r = '[’,。!"#$%&\'()*+,-./:;<=>?@[\\]^_`{|}~]+'for line in lines:print(line)line = re.sub(r, '',line)line = ' '.join(jieba.cut(line))new_f.write(line)print(line)

二、使用步骤

1.引入库

logging用于查看执行日志,导入的gensim版本是gensim-3.8.3,根据自己系统要求以及pyhton版本选择合适的版本,强调一下最好使用3.8.3版本,不然会报错。

#coding:utf-8
# 1.首先导入相关模块:
import logging
import sysfrom gensim import corpora
from six import iteritems
from gensim.models import ldaseqmodel
from gensim.corpora import Dictionary, bleicorpus
import csv

2.去除停用词,构建语料库以及词典

代码如下(示例):

# 2.接下面,我们需要将myCorpus.txt这个文档转化成DTM模型所需要的语料库,并构造词典
logging.basicConfig(format='%(asctime)s : %(levelname)s : %(message)s', level=logging.INFO) #输出日志信息,便于了解程序运行情况
## 切片词语列表
stoplist = set('$ 0 1 2 3 4 5 6 7 8 9 ?  _“  ” 、 。 《 》 一 一些 一何 一切 一则 一方面 一旦 一来 一样 一般 一转眼 万一 上 上下 下 不 不仅 不但 不光 不单 不只 不外乎 不如 不妨 不尽 不尽然 不得 不怕 不惟 不成 不拘 不料 不是 不比 不然 不特 不管 不至于 不若 不论 不过 不问 与 与其 与其说 与否 与此同时 且 且不说 且说 两者 个 个别 临 为 为了 为什么 为何 为止 为此 为着 乃 乃至 乃至于 么 之 之一 之所以  之类 乌乎 乎 乘 也 也好 也罢 了 二来 于 于是 于是乎 云云 云尔 些 亦 人 人们 人家 什么 什么样 今 介于 仍 仍旧 从 从此 从而 他 他人 他们 以 以上 以为 以便 以免 以及 以故 以期 以来 以至 以至于 以致 们 任 任何 任凭 似的 但 但凡 但是 何 何以 何况 何处 何时 余外 作为 你 你们 使  使得 例如 依 依据 依照 便于 俺 俺们  倘 倘使 倘或 倘然 倘若 借 假使 假如 假若 傥然 像 儿 先不先 光是 全体 全部 兮 关于 其 其一 其中 其二 其他 其余 其它 其次 具体地说 具体说来 兼之 内 再 再其次 再则 再有 再者 再者说 再说 冒 冲 况且 几 几时 凡 凡是 凭 凭借 出于 出来 分别 则 则甚 别 别人 别处 别是 别的 别管 别说 到 前后 前此 前者 加之 加以 即 即令 即使 即便 即如 即或 即若 却 去 又 又及 及 及其 及至 反之 反而 反过来 反过来说 受到 另 另一方面 另外  另悉 只 只当 只怕 只是 只有 只消 只要 叫 叮咚 可 可以 可是 可见 各 各个 各位 各种 各自 同 同时 后 后者 向 向使 向着 吓 吗 否则 吧 吧哒 吱 呀 呃 呕 呗 呜 呜呼 呢 呵 呵呵 呸 呼哧 咋 和 咚 咦 咧 咱 咱们 咳 哇 哈 哈哈 哉 哎 哎呀 哎哟 哗 哟 哦 哩 哪 哪个 哪些 哪儿 哪天 哪年 哪怕 哪样 哪边 哪里 哼 哼唷 唉 唯有 啊 啐 啥 啦 啪达 啷当 喂 喏 喔唷 喽 嗡 嗡嗡 嗬 嗯 嗳 嘎 嘎登 嘘 嘛 嘻 嘿 嘿嘿 因 因为 因了 因此 因着 因而 固然 在  在下 在于 地 基于 处在 多 多么 多少 大 大家 她  她们 好 如 如上 如上所述 如下 如何  其 如同 如是 如果 如此 如若 始而 孰料 孰知 宁 宁可 宁愿 宁肯 它 对 对于对待 对方 对比 将 小  尔 尔后 尔尔 尚且 就 就是 就是了  就是说 就算 就要 尽 尽管 尽管如此 岂但 己 已 已矣 巴 巴巴 并 并且 并非 庶乎 庶几 开外 开始 归 归齐 当 当地 当然 当着 彼 彼时 彼此 往 待 很 得 得了 怎 怎么 怎么办 怎么样 怎奈 怎样 总之 总的来看 总的来说 总的说来 总而言之 恰恰相反 您 惟其 慢说 我 我们 或 或则 或是 或曰 或者 截至 所 所以 所在 所幸 所有 才 才能 打 打从 把 抑或 拿 按 按照 换句话说 换言之 据 据此 接着 故 故此 故而 旁人 无 无宁 无论 既 既往 既是 既然 时候 是 是以 是的 曾 替 替代 最 有 有些 有关 有及 有时 有的 望 朝 朝着 本 本人 本地 本着 本身 来 来着 来自 来说 极了 果然 果真 某 某个 某些 某某 根据 欤 正值 正如 正巧 正是 此 此地 此处 此外 此时 此次 此间 毋宁 每 每当 比 比及 比如 比方 没奈何 沿 沿着 漫说 焉 然则 然后 然而 照 照着 犹且 犹自甚且 甚么 甚或 甚而 甚至 甚至于 用 用来 由 由于 由是 由此 由此可见 的 的确 的话 直到 相对而言 省得 看 眨眼 着 着呢 矣 矣乎 矣哉 离 竟而 第 等 等到 等等 简言之 管 类如 紧接着 纵 纵令 纵使 纵然 经 经过 结果 给 继之 继后 继而 综上所述 罢了 者 而 而且 而况 而后 而外 而已 而是 而言 能 能否 腾 自 自个儿 自从 自各儿 自后 自家 自己 自打 自身 至 至于 至今 至若 致 般的 若 若夫 若是 若果  若非 莫不然 莫如 莫若 虽 虽则 虽然 虽说 被 要 要不 要不是 要不然 要么 要是 譬喻  譬如 让 许多 论 设使 设或 设若 诚如 诚然 该 说来 诸 诸位 诸如 谁 谁人谁料 谁知 贼死 赖以 赶 起 起见 趁 趁着 越是 距 跟 较 较之 边 过 还 还是 还有 还要 这 这一来 这个 这么 这么些 这么样 这么点儿 这些 这会儿 这儿 这就是说 这时 这样 这次 这般 这边 这里 进而 连 连同 逐步 通过 遵循 遵照 那 那个 那么 那么些 那么样 那些 那会儿 那儿 那时 那样 那般 那边 那里 都 鄙人 鉴于 针对 阿 除 除了 除外 除开  除此之外 除非 随 随后 随时 随着 难道说 非但 非徒 非特 非独 靠 顺 顺着 首先'.split())
#构造词典,并去除停用词以及文档中只出现过一次的词
# dictionary = corpora.Dictionary(line.lower().split() for line in open('datasets/myCorpus.txt'))
dictionary = corpora.Dictionary(line.lower().split() for line in open('datasets/1.data.txt', encoding='utf-8'))
stop_ids = [dictionary.token2id[stopword]for stopword in stoplistif stopword in dictionary.token2id]
once_ids = [tokenid for tokenid, docfreq in iteritems(dictionary.dfs) if docfreq == 1]
dictionary.filter_tokens(stop_ids + once_ids)  # 去除只出现过一次的词
dictionary.compactify()       # 删除去除单词后的空格
print(dictionary)
dictionary.save('datasets/news_dictionary')  # 保存词典
#将文档加载成构造语料库
class MyCorpus(object):def __iter__(self):for line in open('datasets/1.data.txt', encoding='utf-8'):yield dictionary.doc2bow(line.lower().split())
corpus_memory_friendly = MyCorpus()
corpus = [vector for vector in corpus_memory_friendly]  # 将读取的文档转换成语料库
print('语料库'*10)
print(corpus)
corpora.BleiCorpus.serialize('datasets/news_corpus', corpus)  # 存储为Blei lda-c格式的语料库
# 我试图将LDA安装到LDA-C格式的语料库中。我已经让它为HDP模型工作,但我似乎无法让它在gensim中适用于LDA。我希望得到每个文档的主题概率向量以及每个主题的单词概率分布。
# 这是可行的HDP模型
# .dat文件具有LDA-C格式的语料库,而.vocab文件具有唯一的单词
output = open('data.csv', 'w', newline='')

3.构建模型

logging用于查看执行日志,导入的gensim版本是gensim-3.8.3,根据自己系统要求以及pyhton版本选择合适的版本,强调一下最好使用3.8.3版本,不然会报错。

# 3.通过上面的工作,我们已经将文档转换成了DTM模型所需要的词典以及语料库,下面把语料库、词典加载到模型中
try:dictionary = Dictionary.load('datasets/news_dictionary') # 加载词典
except FileNotFoundError as e:raise ValueError("SKIP: Please download the Corpus/news_dictionary dataset.")
corpus = bleicorpus.BleiCorpus('datasets/news_corpus')# 加载语料库
time_slice = [7, 9, 6]   #设置这个语料库的间隔,此处分为三个时期,第一个时期内有438条新闻,第二为430条,第三个为456条。
num_topics = 3  #设置主题数,此处为5个主题
print(corpus)
ldaseq = ldaseqmodel.LdaSeqModel(corpus=corpus, id2word=dictionary, time_slice=time_slice, num_topics=num_topics) #将语料库、词典、参数加载入模型中进行训练
print('corpusTopic = ldaseq.print_topics(time=0)')
corpusTopic = ldaseq.print_topics(time=0)  # 输出指定时期主题分布,此处第一个时期主题分
print(ldaseq.print_topics(time=0))
print('='*50)
print('词料库主题')
print(corpusTopic)topicEvolution = ldaseq.print_topic_times(topic=0) # 查询指定主题在不同时期的演变,此处为第一个主题的
print('='*50)
print('主题的在不同时期演变')
print(ldaseq.print_topic_times(topic=0))
print(ldaseq.print_topic_times(topic=1))
print(ldaseq.print_topic_times(topic=2))# 写入数据的csv
output = open('data.csv', 'w', newline='')
writer = csv.writer(output)
for row in ldaseq.print_topic_times(topic=0):if row:  # 去除空行writer.writerow([row])
for row in ldaseq.print_topic_times(topic=1):if row:  # 去除空行writer.writerow([row])
for row in ldaseq.print_topic_times(topic=2):if row:  # 去除空行writer.writerow([row])
print('='*50)
print('查看第i篇文档的主题分布')
doc = ldaseq.doc_topics(0) # 查询指定文档的主题分布,此处为第一篇文档的主题分布
print(doc)
# print(ldaseq.doc_topics(1))
# print(ldaseq.doc_topics(2))
# print(ldaseq.doc_topics(3))
# print(ldaseq.doc_topics(4))
# for row in ldaseq.print_topic_times(ldaseq.doc_topics(0)):
#     if row:  # 去除空行
#         writer.writerow([row])
i = 0
for i in range(23):writer.writerow(ldaseq.doc_topics(i))# for row in ldaseq.print_topic_times(ldaseq.doc_topics(1)):
#     if row:  # 去除空行
#         writer.writerow([row])
# for row in ldaseq.print_topic_times(ldaseq.doc_topics(2)):
#     if row:  # 去除空行
#         writer.writerow([row])
print('='*100)
ldaseq.print_topics(time=0)
# 不同主题三个时期的情况
ldaseq.save('dtm_news')
dtm_model = ldaseq.load('dtm_news')

三、结果展示

1.某个主题三个时期主题下词语的概率分布


前三行为第一个主题(主题类型:区块链)在三个时期下词语的分布,中间三行为第二个主题(主题类型:忘了)的三个时期,最后三行为第三个主题(主题类型:人工智能)在三个时期下的分布。

2.查看生成文档的主题分布

DTM动态主题模型实战案例相关推荐

  1. gensim实现LDA主题模型-------实战案例(分析希拉里邮件的主题)

    数据集下载:https://download.csdn.net/download/qq_41185868/10963668 第一步: 加载一些必要的库, 我们用的是gensim中的LDA模型,所以必须 ...

  2. gensim中动态主题模型(DTM)两种实现方法(一)

    目录 (一)gensim.models.ldaseqmodel包 1.基本使用方法 2.缩水的地方 (二)gensim.models.wrappers.dtmmodel.DtmModel包 1.没有c ...

  3. gensim中动态主题模型(DTM)两种实现方法(二)

    第一部分内容请点此阅读:gensim中动态主题模型(DTM)两种实现方法(一) 目录 (二)gensim.models.wrappers.dtmmodel.DtmModel包 1.如何使用呢? 2.c ...

  4. Gensim中动态主题模型——dtmmodel的使用

    import gensim import jieba import pandas as pd from gensim import corpora,models from gensim.models. ...

  5. 连续时间动态主题模型(Continuous Time Dynamic Topic Models, cDTM)

    用于分析和管理大量电子文档的工具变得越来越重要.近年来,离散数据的分层贝叶斯模型,已成为一种广泛使用的文本探索和预测分析方法. 主题模型,例如潜在Dirichlet分配(LDA)和更一般的离散分量分析 ...

  6. NLP自然语言处理—主题模型LDA案例:挖掘人民网留言板文本数据

    全文链接:tecdat.cn/?p=2155 随着网民规模的不断扩大,互联网不仅是传统媒体和生活方式的补充,也是民意凸显的地带.领导干部参与网络问政的制度化正在成为一种发展趋势,这种趋势与互联网发展的 ...

  7. 主题模型(LDA)案例:挖掘人民网留言板文本数据

    原文链接://tecdat.cn/?p=2155 随着网民规模的不断扩大,互联网不仅是传统媒体和生活方式的补充,也是民意凸显的地带.领导干部参与网络问政的制度化正在成为一种发展趋势,这种趋势与互联网发 ...

  8. LDA等主题模型实战(一)

    文章目录 前言 正文 评估方式 LDA模型 LDA之gibbs采样算法 LDA之EM算法 Biterm Topic Model Topic Modeling with Minimal Domain K ...

  9. Python LDA主题模型实战

    导入相关的包 https://github.com/lda-project/lda :lda包的文档! 采用LDA库,pip install lda import numpy as np import ...

  10. 主题模型(LDA)案例:分析人民网留言板数据

    随着网民规模的不断扩大,互联网不仅是传统媒体和生活方式的补充,也是民意凸显的地带.领导干部参与网络问政的制度化正在成为一种发展趋势,这种趋势与互联网发展的时代需求是分不开的. ▼ 人民网<地方领 ...

最新文章

  1. “元宇宙”数字化理解
  2. 集合已修改;可能无法执行枚举操作。
  3. Keras将死于谷歌之手?reddit网友写“送葬文”,引发热议
  4. 为何要fork()两次来避免产生僵尸进程?
  5. flink 三种时间机制_Flink的时间与watermarks详解
  6. 国内免费GPU资源哪里找,让我告诉你最新的薅羊毛“秘籍”
  7. 这么多连麦方案,到底哪种适合你?
  8. SQL语句大全,所有的SQL都在这里 !极度建议收藏...
  9. mysql gui 修改密码_MySQL修改root密码的各种方法整理
  10. Discuz在Firefox下无法切换至编辑器状态解决(Z)
  11. 从零开始配置vim(22)——lsp简介与treesitter 配置
  12. 云计算概念及发展历程
  13. adb 修改安卓设备的Mac地址
  14. 广东省民营企业合作交流协会会长谭铭卓一行到访
  15. u盘制作启动盘 安装win10操作系统
  16. 数据库1NF,2NF,3NF,BCNF总结
  17. DataList和ListView数据控件的使用
  18. matplotlib  plt.lengend
  19. MongoDB与Spring整合(支持事务)——SpringDataMongoDB
  20. linux查看raid情况工具,HP_DELL RAID卡查看工具介绍

热门文章

  1. 基于 vue-element-admin 基础模板实现侧边栏菜单动态渲染
  2. 五款实用的微信小程序(免费证件照)
  3. 21克c1语言,C1人称代词
  4. JAVA当前时间timestamp_java获取获得Timestamp类型的当前系统时间
  5. 浙大PAT 1013题 1013. Battle Over Cities
  6. 组态王与Modbus协议的地址对应规则
  7. AbstractApplicationContext的refresh方法
  8. 美国大学网址大全(按州排序)
  9. 十种排序算法总结(冒泡、插入、选择、希尔、归并、堆、快速,计数,桶,基数)
  10. QQ点不开链接/空间/邮箱。提示:windows找不到文件