3
(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)))))))))
4

2 回答 2

6

问题是什么?它几乎是简单的英语:

让哈希表中g的值(如果不存在,则为 0)乘以 2wordgood

(let ((g (* 2 (or (gethash word good) 0)))

以及哈希表中b的值(如果不存在,则为 0)。wordbad

      (b (or (gethash word bad) 0)))

考虑到这一点,并假设 和 的gb不小于 5

   (unless (< (+ g b) 5)

返回最大值 0.01 或

     (max .01

最小值为 0.99 或

          (min .99 

b/nbad除以b/nbadg/的总和ngood(作为浮点值,这些单独的商最多应为 1)。

               (float (/ (min 1 (/ b nbad))
                         (+ (min 1 (/ g ngood))   
                            (min 1 (/ b nbad)))))))))
于 2010-11-01T16:15:17.700 回答
2

看起来它正在尝试根据word哈希表goodbad.

如果单词在哈希表中不存在,则其值为 0,否则如果它存在于好表中,则加权 2(加倍)。

如果分数小于 5,则按unless如下方式计算分数(以下部分):

score = min(1, b/nbad) / (min(1, g/ngood) + min(1, b/nbad))
max(0.01, min(0.99, score))

我不确定是什么ngoodnbad但 n 向我表明它们可能是计数。看起来代码将计算的分数保持在 5 以下。看起来在分数计算中,分母将保持在最大值 2 将分数的下限保持为 0.5。

根据您使用的标签,我猜测(这只是一个猜测)它正在尝试根据某种频率(?)计算单词的权重,计算好与坏电子邮件中的单词。

于 2010-11-01T14:42:20.330 回答