from nltk.tokenize import RegexpTokenizer
from stop_words import get_stop_words
from gensim import corpora, models
import gensim
import os
from os import path
from time import sleep
tokenizer = RegexpTokenizer(r'\w+')
en_stop = set(get_stop_words('en'))
with open(os.path.join('c:\users\kaila\jobdescription.txt')) as f:
Reader = f.read()
texts = unicode(Reader, errors='replace')
tdm = []
#Converted all the text to lowercase for uniform analysis
raw = texts.lower()
#Tokenized the text to individual terms and created the stop list
tokens = tokenizer.tokenize(raw)
stopped_tokens = [i for i in tokens if not i in en_stop]
tdm.append(stopped_tokens)
dictionary = corpora.Dictionary(tdm)
corpus = [dictionary.doc2bow(i) for i in tdm]
sleep(3)
#Implemented the LdaModel
ldamodel = gensim.models.ldamodel.LdaModel(corpus, num_topics=10, id2word = dictionary)
print(ldamodel.print_topics(num_topics=5, num_words=8))
问题是我的结果有类似的词来描述所有主题,概率太低了。有什么我做错了吗?如果有人能帮助我取得更好的成绩,那就太好了。
以下是我的结果:
(0,你' 0.019 *将+ 0.010 *经验+ 0.009 *账户+ 0.009 *财务+ 0.008 *会计+ 0.008 *财务+ 0.008 *团队+ 0.007 *报告'),( 4,u' 0.016 *将+ 0.009 *财务+ 0.009 *经验+ 0.008 *管理+ 0.008 *会计+ 0.007 *角色+ 0.007 *财务+ 0.007 *工作'),(7,u' 0.017 *将+ 0.013 *经验+ 0.012 *财务+ 0.008 *角色+ 0.008 *财务+ 0.007 *会计+ 0.007 *帐户+ 0.007 *年'),(2,你&0.09 *将* + 0.011 *经验+ 0.010 *金融+ 0.008 *角色+ 0.007 *业务+ 0.007 *账户+ 0.007 *报告+ 0.007 *工作'),(5,u' 0.013 *将+ 0.011 *财务+ 0.011 *经验+ 0.009 *财务+ 0.008 *管理+ 0.008 *会计+ 0.008 *角色+ 0.007 *请')
答案 0 :(得分:1)
不,你没有做错任何事,但你误解了输出。 LDA为每个主题下的所有字典单词生成概率分布。主题数量等于您想要的主题数量。在这里,您提供的答案对我来说似乎是合乎逻辑的,因为您已经打印了主题5主题和每个主题下的主题8个单词及其概率值。顺便说一下,概率值可以非常小,不用担心。
此输出的一个可能原因可能是:用于训练LDA模型的数据集不够多,因此几个主题下的顶层词几乎相同,这也表示所推断的主题彼此非常接近。如果您期望多样化的主题,那么您需要具有良好代表性的数据,以获得所需数量的主题。