从头开始计算IDF

2024-04-28 12:07:46 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图从头开始计算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是所有文档中t2的计数

正如你所看到的,结果是不同的,所以我在问我是否遗漏了什么


Tags: 文件文档docsmathfloat计数t1t3
1条回答
网友
1楼 · 发布于 2024-04-28 12:07:46

你有一个有趣的问题

我试着自己做这项工作,并在维基百科上查阅了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要使用它。我希望我能帮忙

相关问题 更多 >