生成的错误是:
File "/home/tweet_v8/tweetSum/Summarizer/Sentence.py", line 42, in _tfIdfSentence
w.append( self.lsa.getCell(doc, self.vectorSpace.keywords()[(term,)]) )
KeyError: (u'l.a.',)
该函数的编写如下:
# tf-idf computation for one sentence
def _tfIdfSentence (self, sent, doc):
w = []
for term in sent:
w.append( self.lsa.getCell(doc, self.vectorSpace.keywords()[(term,)]) )
#print sent
if max(w) > 0:
#print [float(i)/max(w) for i in w], w, doc, sent
return [float(i)/max(w) for i in w]
else:
return [0]
我不知道这行代码有什么问题。
w.append( self.lsa.getCell(doc, self.vectorSpace.keywords()[(term,)]) )
有谁知道如何解决这个问题?
答案 0 :(得分:0)
您获得了KeyError
,因为在(u'l.a.',)
词典中找不到搜索到的词典self.vectorSpace.keywords()
。
要避免KeyError
,请使用dict
的{{1}}设置默认值,如果您要搜索的密钥不存在:
get()
您可以用您需要的任何值替换w.append( self.lsa.getCell(doc, self.vectorSpace.keywords().get((term,), 'default') )
。
另一种方法是使用defaultdict。
答案 1 :(得分:0)
KeyError: (u'l.a.',)
Python告诉你键(字典的键/值对)“l.a.” unicode类型不存在。
如果你只想将它设置为某事,你可以在try /除KeyError中包装它。
答案 2 :(得分:0)
由于某种原因,您遇到的错误称为KeyError
,如果没有可重现的代码示例,我们无法理解 您做错了什么。但是,一个可以向您解释KeyError
是什么:
>>> d = {'a': 'happy'}
>>> d['a']
'happy'
>>> d['something_that_does_not_exist']
Traceback (most recent call last):
File "<console>", line 1, in <module>
KeyError: 'something_that_does_not_exist'
你知道,你拥有的是字典,或者通常称为 hash-map 。现在,当哈希映射中不存在密钥时,您将获得KeyError
。
答案 3 :(得分:0)
显然, self.vectorSpace.keywords()会返回一个字典。您希望此字典包含某个值 - 它不包含。或者它包含值 - 但是以非unicode形式。 尝试使用 str(term)而不是 term 一点效率改进:
kew_words = self.vectorSpace.keywords()
for term in sent:
try:
w.append(self.lsa.getCell(doc, key_words[(str(term),)]
except KeyError:
<do some stuff>
如果您打印* key_words * - 并检查其内容
,它会有所帮助