xuxu20202020 2022-01-20 01:30 采纳率: 0%
浏览 224
已结题

在现有LDA基础上添加余弦相似度

目前代码已经实现了对于英文文本的LDA聚类,但是由于之后需要计算余弦相似度,因此希望代码能增加一部分,使其输出的主题-概率分布具有词向量的特征,即输出的为:主题+词向量+概率,并在此基础上实现余弦相似度的计算

目标结果如图所示:

img

现有代码如下:

import numpy as np
from gensim import corpora, models

if name == 'main':

# 读入文本数据
f = open('E:/KYLX/LDA代码/LDA数据/g2020-2021.txt', encoding='utf-8')  # 输入已经预处理后的文本
texts = [[word for word in line.split()] for line in f]
f.close()
M = len(texts)
print('文本数目:%d 个' % M)

# 建立词典
dictionary = corpora.Dictionary(texts)
V = len(dictionary)
print('词的个数:%d 个' % V)

# 计算文本向量g
corpus = [dictionary.doc2bow(text) for text in texts]  # 每个text对应的稀疏向量

# 计算文档TF-IDF
corpus_tfidf = models.TfidfModel(corpus)[corpus]

# LDA模型拟合
num_topics = 9  # 定义主题数
lda = models.LdaModel(corpus_tfidf, num_topics=num_topics, id2word=dictionary,
                      alpha=0.01, eta=0.01, minimum_probability=0.001,
                      update_every=1, chunksize=100, passes=1)

# 所有文档的主题
doc_topic = [a for a in lda[corpus_tfidf]]
print('Document-Topic:')
print(doc_topic)

# 打印文档的主题分布
num_show_topic = 10  # 每个文档显示前几个主题
print('文档的主题分布:')
doc_topics = lda.get_document_topics(corpus_tfidf)  # 所有文档的主题分布
idx = np.arange(M)  # M为文本个数,生成从0开始到M-1的文本数组
for i in idx:
    topic = np.array(doc_topics[i])
    topic_distribute = np.array(topic[:, 1])
    topic_idx = topic_distribute.argsort()[:-num_show_topic - 1:-1]  # 按照概率大小进行降序排列
    print('第%d个文档的前%d个主题:' % (i, num_show_topic))
    print(topic_idx)
    print(topic_distribute[topic_idx])

# 每个主题的词分布
num_show_term = 15  # 每个主题显示几个词
for topic_id in range(num_topics):
    print('主题#%d:\t' % topic_id)
    term_distribute_all = lda.get_topic_terms(topicid=topic_id)  # 所有词的词分布
    term_distribute = term_distribute_all[:num_show_term]  # 只显示前几个词
    term_distribute = np.array(term_distribute)
    term_id = term_distribute[:, 0].astype(np.int)
    print('词:', end="")
    for t in term_id:
        print(dictionary.id2token[t], end=' ')
    print('概率:', end="")
    print(term_distribute[:, 1])

# 将主题-词写入一个文档 topword.txt,每个主题显示20个词
with open('E:/KYLX/LDA代码/LDA数据/gg2020-2021.txt', 'w', encoding='utf-8') as tw:
    for topic_id in range(num_topics):
        term_distribute_all = lda.get_topic_terms(topicid=topic_id, topn=20)
        term_distribute = np.array(term_distribute_all)
        term_id = term_distribute[:, 0].astype(np.int)
        for t in term_id:
            tw.write(dictionary.id2token[t] + " ")
        tw.write("\n")
  • 写回答

1条回答 默认 最新

  • 有问必答小助手 2022-01-21 10:52
    关注

    你好,我是有问必答小助手,非常抱歉,本次您提出的有问必答问题,技术专家团超时未为您做出解答


    本次提问扣除的有问必答次数,将会以问答VIP体验卡(1次有问必答机会、商城购买实体图书享受95折优惠)的形式为您补发到账户。


    因为有问必答VIP体验卡有效期仅有1天,您在需要使用的时候【私信】联系我,我会为您补发。

    评论

报告相同问题?

问题事件

  • 系统已结题 1月28日
  • 创建了问题 1月20日

悬赏问题

  • ¥15 fluent的在模拟压强时使用希望得到一些建议
  • ¥15 STM32驱动继电器
  • ¥15 Windows server update services
  • ¥15 关于#c语言#的问题:我现在在做一个墨水屏设计,2.9英寸的小屏怎么换4.2英寸大屏
  • ¥15 模糊pid与pid仿真结果几乎一样
  • ¥15 java的GUI的运用
  • ¥15 Web.config连不上数据库
  • ¥15 我想付费需要AKM公司DSP开发资料及相关开发。
  • ¥15 怎么配置广告联盟瀑布流
  • ¥15 Rstudio 保存代码闪退