2016-12-07 32 views
0

我使用gensim構建一個LSI語料庫,然後應用以下gensim教程查詢相似(tut1tut2ñtut3doc2id測繪在gensim

我問題是,當我嘗試calcualte查詢相似如圖所示下面的代碼我以(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

你有一個文件語料庫,我想這是一個文件語料庫文本列表,還有一個相似性列表,其中包含文檔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])