请帮助破译这个lisp提取物

时间:2010-11-01 14:23:20

标签: lisp spam-prevention bayesian

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

2 个答案:

答案 0 :(得分:6)

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

g为哈希表wordgood的值(如果不存在,则为0)次数2

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

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

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

答案 1 :(得分:2)

看起来它正在尝试根据哈希表wordgoodbad的存在来计算得分。

如果哈希表中不存在该词,则赋值为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。

基于您使用过的标签,我猜测(这只是一个猜测)它试图根据某种频率(?)计算单词的权重来计算单词的权重。电子邮件。