我使用gensim构建LSI语料库,然后根据gensim教程(tut1,tut2 n tut3)
应用查询相似性我的问题是,当我尝试计算查询相似度时,如下面的代码所示,我得到(docID,simScore)元组形式的结果。
我需要使用 docID 来检索文档的字符串表示。 (类似于corpora.Dictionary
)中的token2id映射
谷歌搜索我找不到任何有用的东西
我的搜索代码
def search(self):
#Load necessary information
dictionary = corpora.Dictionary.load('dictionary.dict')
corpus_tfidf = corpora.MmCorpus('corpus.mm') # comes from the first tutorial, "From strings to vectors"
#print(corpus_tfidf)
#Generate LSI model
#lsi = models.LsiModel(corpus, id2word=dictionary, num_topics=2)
lsi = LsiModel(corpus_tfidf,num_topics=2)
#construct index
index = similarities.MatrixSimilarity(lsi[corpus_tfidf]) # transform corpus to LSI space and index it
#Construct query vector
doc = "Human machine interface for lab abc computer applications"
vec_bow = dictionary.doc2bow(doc.lower().split())
vec_lsi = lsi[vec_bow] # convert the query to LSI space
#Calcualte similarity
sims = index[vec_lsi] # perform a similarity query against the corpus
sims = sorted(enumerate(sims), key=lambda item: -item[1])
print(sims) # print sorted (document number, similarity score) 2-tuples
结果示例
[(1, 0.9962855), (4, 0.99420911), (2, 0.98064679), (3, 0.97580492), (0, 0.9755646), (8, 0.34740543), (6, 0.1566827), (7, 0.15566549), (5, 0.13825497)]
答案 0 :(得分:0)
你有一个文档语料库,我猜这是一个文本列表,你也有一个相似性列表,包含docs id。因此,您可以使用以下内容将id映射到文本:
corpus = ['a','b','c']
sims = [(0,0.1),(1,0.2),(2,0.3)]
labeled_sims = [(corpus[id],sim) for id,sim in sims]
将返回:
[('a',0.1),('b',0.2),('c',0.3)]
或者你也可以在排序之前这样做:
labeled_sims = zip(corpus,sims)
将返回:
[('a',(0,0.1)),('b',(1,0.2)),('c',(2,0.3))]
可以进一步分类:
labeled_sims = sorted(enumerate(labeled_sims), key=lambda item: -item[1][1])