Python:AttributeError:“设置”对象没有属性“值”

时间:2020-02-27 12:24:51

标签: python python-3.x attributes

当尝试运行一些代码以对文档中的术语进行排名检索时,我一直收到此错误(标题中有详细说明)。

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感到困惑和陌生

2 个答案:

答案 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()方法。