【发布时间】:2015-02-17 10:37:41
【问题描述】:
我写了一个函数,它基本上计算逆文档频率(以 10 为底的日志(总文档数/包含特定单词的文档数))
我的代码:
def tfidf(docs,doc_freqs):
res = []
t = sum(isinstance(i, list) for i in docs)
for key,val in doc_freqs.items():
res.append(math.log10(t/val))
pos = defaultdict(lambda:[])
for docID, lists in enumerate(docs):
for element in set(lists):
pos[element].append([docID] + res)
return pos
我的输出:
index = tfidf([['a', 'b', 'c'], ['a']], {'a': 2., 'b': 1., 'c': 1.})
index['a']
[[0, 0.0, 0.3010299956639812, 0.3010299956639812], [1, 0.0, 0.3010299956639812, 0.3010299956639812]]
index['b']
[[0, 0.0, 0.3010299956639812, 0.3010299956639812]]
期望的输出:
index = tfidf([['a', 'b', 'c'], ['a']], {'a': 2., 'b': 1., 'c': 1.})
index['a']
[[0, 0.0], [1, 0.0]]
index['b']
[[0, 0.3010299956639812]]
所以基本上我只想显示该术语出现的 docid,后跟它的 idf 值。 (即)在上面的例子中,因为 term'a' 出现在两个文档中,idf 值为 0 。
谁能建议我需要在我的代码中进行哪些修改,以便根据运行时指定的术语仅打印相应的 idf 值??
请帮忙!!! 提前致谢。
【问题讨论】:
标签: python list dictionary tf-idf