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
|