gensim中的doc2id映射

时间:2016-12-07 08:39:17

标签: python similarity gensim

我使用gensim构建LSI语料库,然后根据gensim教程(tut1tut2 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)]

1 个答案:

答案 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])