当尝试运行一些代码以对文档中的术语进行排名检索时,我一直收到此错误(标题中有详细说明)。
AttributeError Traceback (most recent call last)
<ipython-input-23-93d0dd115e4c> in <module>()
----> 1 query_RR(postings,'england played well')
<ipython-input-21-647764dfc7e2> in query_RR(postings, qtext)
7 for w in words:
8 tf = math.log10(words.count(w))
----> 9 df = len(postings[w].values())
10 idf = math.log10(N/df)
11 query_weights[w] = tf * idf
AttributeError: 'set' object has no attribute 'values'
这里是发生错误的函数:
def query_RR(postings, qtext):
words = tokenize(qtext)
query_weights = {}
doc_scores = {}
for docID in range(N):
score = 0
for w in words:
tf = math.log10(words.count(w))
df = len(postings[w].values())
idf = math.log10(N/df)
query_weights[w] = tf * idf
for w in words:
if w in postings:
score += query_weights[w] + postings[w].keys()
doc_scores[docID] = score
res = heapq.nlargest(10,doc_scores)
return res
用于创建query_RR的过帐的函数是:
def indextextfiles_RR(path):
postings={}
for docID in range(N):
s = readfile(path, docID)
words = tokenize(s)
for w in words:
if w!='':
postings.setdefault(w,set()).add(docID)
return postings
我对Python感到困惑和陌生
答案 0 :(得分:1)
postings[w]
的类型似乎是一个集合。集合没有功能.values()
,但是如果要获取集合中的项目数,可以在集合上使用len()
。对您来说,这就是len(postings[w])
。
答案 1 :(得分:0)
set()
没有.values()
方法。如果需要值的长度,只需使用df = len(postings[w])
解决此问题后,您肯定会得到另一个错误。那是:
score += query_weights[w] + postings[w].keys()
set()
也没有.keys()
方法。