问题描述
我正在尝试从头开始计算IDF值,以便我可以了解它在幕后的工作方式,但仍然无法获得预期的结果。
docs = {'d1' :'t3 t3 t3 t6 t6','d2' :'t1 t2 t3 t3 t6','d3' :'t3 t3 t4 t5','d4' :'t4 t5 t6 t6','d5' :'t1 t2 t3 t5'}
我应该计算一个名为query_sum_idf
的值,该值代表请求中发送的令牌的IDF总和,在这种情况下为['t5','t2']
在这种情况下,期望值为1.4271 ± 1.0e-04
,但是在开发微积分时,这是我所做的,并且得到了不同的结果:
math.log10(5 / float(3)) + math.log10(5 / float(2)) = 0.6197
,其中5
是文档总数,3
是所有文档中t5
的计数,最后2
是{{ 1}}。
如您所见,结果有所不同,所以我要问是否遗漏了一些东西。
解决方法
那里有有趣的问题。
我尝试自己完成此任务,并在Wikipedia上查找了IDF的常见定义。我这样计算IDF:
import math
def idf(docs,term):
count = 0
for key,doc in docs.items():
if term in doc: count += 1
return math.log(len(docs)/count)
问题是,您使用的是log10而不是自然对数。即使在Wiki上,也未定义使用哪个log
。希望我能帮上忙。