2016-11-14 3 views
1

Je lis le code suivant pour en savoir un document model.Each doc2vec est défini comme un texte/ligne entre deux lignes:Comment résoudre les gensim KeyError quand j'essaie d'avoir le vecteur d'un document?

  • clueweb09-EN0001-XX-XXXXX
  • end_clueweb09-EN0001-XX-XXXXX

Ceci est mon code:

path='/home/work/Step2/test-input/html' 


alldocs = [] # will hold all docs in original order 


for fname in os.listdir(path): 
    with open(path+'/'+fname) as alldata: 
     for line in alldata: 
      docId= line 
      print docId 
      context= alldata.next() 
      #print context 
      tokens = gensim.utils.to_unicode(context).split() 
      end=alldata.next() 
      alldocs.append(LabeledSentence(tokens[:],[docId])) 

model = Doc2Vec(alpha=0.025, min_alpha=0.025) # use fixed learning rate 
model.build_vocab(alldocs) 
for epoch in range(10): 
    model.train(alldocs) 
    model.alpha -= 0.002 # decrease the learning rate 
    model.min_alpha = model.alpha # fix the learning rate, no decay 

# store the model to mmap-able files 
model.save(path+'/my_html_model.doc2vec') 

Mais j'ai eu l'erreur lorsque je l'ai écrit model.docvecs [ 'clueweb09-en0001-01-34238' ] mais quand j'écris model.docvecs [0] J'ai obtenu le résultat.

Ceci est l'erreur que je suis:

Traceback (most recent call last): 
    File "getLearingDoc.py", line 40, in <module> 
    print model.docvecs['clueweb09-en0001-01-34238'] 
    File "/home/flashkar/anaconda/lib/python2.7/site-packages/gensim/models/doc2vec.py", line 341, in __getitem__ 
    return self.doctag_syn0[self._int_index(index)] 
    File "/home/flashkar/anaconda/lib/python2.7/site-packages/gensim/models/doc2vec.py", line 315, in _int_index 
    return self.max_rawint + 1 + self.doctags[index].offset 
KeyError: 'clueweb09-en0001-01-34238' 

Je n'ai pas l'expérience en python et gensim s'il vous plaît me dire comment puis-je résoudre ce problème.

Répondre

0

Etes-vous sûr qu'une étiquette de 'clueweb09-en0001-01-34238' - pas de saut de ligne/etc - a été présentée pendant l'entraînement?

Vous pouvez voir tous les doctags de chaîne connus du modèle dans les clés de la dict model.docvecs.doctags ou dans la liste model.docvecs.offset2doctag.