from gensim import corpora
from gensim.models import LdaModel
from gensim import models
from gensim.corpora import Dictionary
import pandas as pd
import jieba.posseg as jp, jieba
#import opencc
#读取数据
texts=pd.read_excel(r'data-total.xlsx',header=None).astype(str)
#通过jieba进行切词生成词袋
text = [jp.cut(i) for i in texts.values.ravel()]
#添加停用词性
flags = ('n', 'nr', 'v', 'ns', 'nt', 'd')
#停用词列表,这里“cn_stopwords.txt”使用百度停用词表
stoplist = open('stopwords-master/HIT_stopwords.txt', 'r',encoding='utf-8-sig').read().split('\n')
#将于停用词性中相同词性的词和停用词表中的词剔除,并剔除长度为1的词
data = [[w.word for w in words if (w.word not in stoplist and w.flag in flags and len(w.word) > 1)] for words in text]
#print(data)
#将清洗后的数据转化为 Corpora_Dictionary
dictionary = corpora.Dictionary(data)
#压缩词向量,去掉出现的文章小于2的词,和在80%的文章都出现的词,整体长度限制在500
dictionary.filter_extremes(no_below=5, no_above=0.6)
corpus = [dictionary.doc2bow(text) for text in data]
#print(dictionary)
#进行TF/IDF编码, 这一步是用来调整语料中不同词的词频,将那些在所有文档中都出现的高频词的词频降低
tfidf = models.TfidfModel(corpus)
corpus_tfidf = tfidf[corpus]
#主题个数
num_topics = 5
#训练LDA模型,passes为迭代次数
lda = LdaModel(corpus=corpus, id2word=dictionary,
num_topics=num_topics, passes=100)
#打印主题
for topic in lda.print_topics(num_words=15, num_topics=num_topics):
print(topic)
代码如上
因为LDA在训练和推理步骤中都使用随机性。通过每次训练模型或执行推理时将numpy.random
种子重置为相同的值,使用numpy.random.seed
:
SOME_FIXED_SEED = 42
# before training/inference:
np.random.seed(SOME_FIXED_SEED)
您好,我是有问必答小助手,您的问题已经有小伙伴解答了,您看下是否解决,可以追评进行沟通哦~
如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~
ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632