(let ((g (* 2 (or (gethash word good) 0)))
(b (or (gethash word bad) 0)))
(unless (< (+ g b) 5)
(max .01
(min .99 (float (/ (min 1 (/ b nbad))
(+ (min 1 (/ g ngood))
(min 1 (/ b nbad)))))))))
问问题
200 次
2 回答
6
问题是什么?它几乎是简单的英语:
让哈希表中g
的值(如果不存在,则为 0)乘以 2word
good
(let ((g (* 2 (or (gethash word good) 0)))
以及哈希表中b
的值(如果不存在,则为 0)。word
bad
(b (or (gethash word bad) 0)))
考虑到这一点,并假设 和 的g
和b
不小于 5
(unless (< (+ g b) 5)
返回最大值 0.01 或
(max .01
最小值为 0.99 或
(min .99
b
/nbad
除以b
/nbad
和g
/的总和ngood
(作为浮点值,这些单独的商最多应为 1)。
(float (/ (min 1 (/ b nbad))
(+ (min 1 (/ g ngood))
(min 1 (/ b nbad)))))))))
于 2010-11-01T16:15:17.700 回答
2
看起来它正在尝试根据word
哈希表good
和bad
.
如果单词在哈希表中不存在,则其值为 0,否则如果它存在于好表中,则加权 2(加倍)。
如果分数小于 5,则按unless
如下方式计算分数(以下部分):
score = min(1, b/nbad) / (min(1, g/ngood) + min(1, b/nbad))
max(0.01, min(0.99, score))
我不确定是什么ngood
,nbad
但 n 向我表明它们可能是计数。看起来代码将计算的分数保持在 5 以下。看起来在分数计算中,分母将保持在最大值 2 将分数的下限保持为 0.5。
根据您使用的标签,我猜测(这只是一个猜测)它正在尝试根据某种频率(?)计算单词的权重,计算好与坏电子邮件中的单词。
于 2010-11-01T14:42:20.330 回答