我已经使用LDA模型(使用Gensim)实现了基于特定文档的类似文档。我想要做的下一件事是,如果我有多个文档,那么如何基于作为输入提供的多个文档获取类似文档。
我使用此link
实施了LDA单个查询的示例代码 -
dictionary = corpora.Dictionary.load('dictionary.dict')
corpus = corpora.MmCorpus("corpus.mm")
lda = models.LdaModel.load("model.lda") #result from running online lda (training)
index = similarities.MatrixSimilarity(lda[corpus])
index.save("simIndex.index")
docname = "docs/the_doc.txt"
doc = open(docname, 'r').read()
vec_bow = dictionary.doc2bow(doc.lower().split())
vec_lda = lda[vec_bow]
sims = index[vec_lda]
sims = sorted(enumerate(sims), key=lambda item: -item[1])
print sims
现在,如果我有另一个文档,那么如何实现它。
答案 0 :(得分:0)
您可以使用lda.update(corpus_new)
使用其他文档更新现有的LDA模型。
答案 1 :(得分:0)
我认为你正在寻找的是这段代码。
newData= [dictionary.doc2bow(text) for text in texts] #Where text is new data
newCorpus= lsa[vec_bow_jobs] #this is new corpus
sims=[]
for similarities in index[newCorpus]:
sims.append(similarities)
#to get similarity with each document in the original corpus
sims=pd.DataFrame(np.array(sims)).transpose()
然而,使用LDA模型测量相似性时,余弦相似性不是最佳选择。寻找Jensen Shanon距离的实施。我找到了这个代码,但没有让它在我的情况下工作。 Lda similarity with Jensen Shanon Distance