主题分析()

本文介绍了一种使用LDA(Latent Dirichlet Allocation)主题模型对文本进行主题分析的方法。通过分词和词频统计,再利用LDA算法得出每篇文档所属的主题及其概率分布。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

import numpy as np
import jieba
# 文档链表
with open('十九大报告.txt','r') as f:
    docment=[]
    docment.append(f.read())

# 进行分词,并存入list:
result = []
for doc in docment:
    document3_cut = jieba.cut(doc)
    result.append(' '.join(document3_cut))
 
# 获取词频向量:
from sklearn.feature_extraction.text import CountVectorizer
from sklearn.decomposition import LatentDirichletAllocation
corpus = result
cntVector = CountVectorizer()
cntTf = cntVector.fit_transform(corpus)
# 输出选取词特征
vocs = cntVector.get_feature_names()
print('主题词袋:', len(vocs))
print(vocs)

lda = LatentDirichletAllocation(n_components=2,  # 主题个数
                                learning_offset=50., # 仅仅在算法使用online时有意义,取值要大于1。用来减小前面训练样本批次对最终模型的影响
                                random_state=0)
docres = lda.fit_transform(cntTf)
# 文档所属每个类别的概率
LDA_corpus = np.array(docres)
print('类别所属概率:\n', LDA_corpus)
# 每篇文章中对每个特征词的所属概率矩阵:list长度等于分类数量
# print('主题词所属矩阵:\n', lda.components_)
# 构建一个零矩阵
LDA_corpus_one = np.zeros([LDA_corpus.shape[0]])
# 对比所属两个概率的大小,确定属于的类别
LDA_corpus_one = np.argmax(LDA_corpus, axis=1) # 返回沿轴axis最大值的索引,axis=1代表行;最大索引即表示最可能表示的数字是多少
print('每个文档所属类别:', LDA_corpus_one)
 
# 打印每个单词的主题的权重值
tt_matrix = lda.components_
id = 0
for tt_m in tt_matrix:
    tt_dict = [(name, tt) for name, tt in zip(vocs, tt_m)]
    tt_dict = sorted(tt_dict, key=lambda x: x[1], reverse=True)
    # 打印权重值大于0.6的主题词:
    # tt_dict = [tt_threshold for tt_threshold in tt_dict if tt_threshold[1] > 0.6]
    # 打印每个类别前5个主题词:
    tt_dict = tt_dict[:8]
    print('主题%d:' % (id), tt_dict)
    id += 1
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值