import codecs
import gensim
from gensim import corpora, models
import matplotlib.pyplot as plt
import matplotlib
from nltk.tokenize import RegexpTokenizer
from nltk.stem.porter import PorterStemmer
fp = codecs.open(r"F:\LDA analysis\cleaned_text.txt", 'r', encoding='UTF-8')
data = fp.read()
fp.close()
# 以下几行将train列表的每个元素都生成一个列表 形成列表嵌套
train0 = data.split(" ")
train = []
for i in range(len(train0)):
train1 = []
train1.append(train0[i])
train.append(train1)
dictionary = corpora.Dictionary(train) # 构建 document-term matrix
corpus = [dictionary.doc2bow(text) for text in train]
Lda = gensim.models.ldamodel.LdaModel
def perplexity(num_topics):
ldamodel = Lda(corpus, num_topics=num_topics, id2word=dictionary, passes=20) # passes为迭代次数,次数越多越精准
print(ldamodel.print_topics(num_topics=num_topics, num_words=5)) # num_words为每个主题下的词语数量
print(ldamodel.log_perplexity(corpus))
return ldamodel.log_perplexity(corpus)
# 绘制困惑度折线图
x = range(3,9) #主题范围数量
y = [perplexity(i) for i in x]
plt.plot(x, y)
plt.xlabel('主题数目')
plt.ylabel('困惑度大小')
plt.rcParams['font.sans-serif']=['SimHei']
matplotlib.rcParams['axes.unicode_minus']=False
plt.title('主题-困惑度变化情况')
plt.show()
基于困惑度确定LDA的主题数量
最新推荐文章于 2024-04-29 18:29:37 发布
本文介绍了如何使用Python的gensim库进行LatentDirichletAllocation(LDA)主题模型的构建,包括数据预处理、词袋模型创建、LDA模型训练,并展示了如何通过改变主题数量来分析困惑度的变化情况。
摘要由CSDN通过智能技术生成