Python Gensim:为每个主题提取100个最具代表性的文档
我有几个gensim模型,可容纳约500万个文档。我想从每个主题的每个模型中抽取前100个最具代表性的文档,以帮助我选择最佳模型 假设我有一个模型Python Gensim:为每个主题提取100个最具代表性的文档,python,tuples,gensim,lda,Python,Tuples,Gensim,Lda,我有几个gensim模型,可容纳约500万个文档。我想从每个主题的每个模型中抽取前100个最具代表性的文档,以帮助我选择最佳模型 假设我有一个模型lda和语料库corpus,我可以得到以下形式的主题概率: topic_probs = lda[corpus] 其中topic\u probs是元组列表:(topic\u num,topic\u prob) 我如何按主题对这个元组列表排序,然后按概率排序,然后从语料库中检索前100个文档?我猜答案看起来有点像,但我正在努力解决如何在维护文档索引的同时
lda
和语料库corpus
,我可以得到以下形式的主题概率:
topic_probs = lda[corpus]
其中topic\u probs
是元组列表:(topic\u num,topic\u prob)
我如何按主题对这个元组列表排序,然后按概率排序,然后从语料库中检索前100个文档?我猜答案看起来有点像,但我正在努力解决如何在维护文档索引的同时使用元组列表的问题
(这有点复杂,因为我不知道
gensim.LdaModel
的minimum\u probability
参数,所以概率<0.01的主题被抑制了。这些模型每次运行需要2-3天,所以如果可能的话,我想避免重新运行它们)。我已经设法解决了这个问题,虽然可能不是以最有效的方式,而且我没有时间让它完全便携
def lda_to_csv(model, outfile, corpus):
'''This function takes a gensim lda model as input, and outputs a csv with topics probs by document'''
topic_probs = model.get_document_topics(corpus) #get the list of topic probabilities by doc
topic_dict = [dict(x) for x in topic_probs] #convert to dictionary to convert to data frame
df = pd.DataFrame(topic_dict).fillna(0) #convert to data frame, fill topics < 0.01 as 0
df.to_csv(outfile)
def get_best_docs(df, n, k, texts):
'''Return the index of the n most representative documents from a list of topic responsibilities for each topic'''
'''n is the number of douments you want, k is the number of topics in the model, the texts are the FULL texts used to fit the model'''
#create column list to iterate over
k_cols = range(0, k)
#intialize empty list to hold results
n_rep_docs = []
#loop to extract documents for each topic
for i in k_cols:
inds = df.nlargest(n = n, columns = str(i))['docs'].astype(int).tolist()
#use list comprehension to extract documents
n_rep_docs.append([texts[ind] for ind in inds])
return n_rep_docs