请帮助破译这个lisp摘录 (let((g(*2(或(gethash word good)0))) (b(或(gethash-word-bad)0))) (除非(

请帮助破译这个lisp摘录 (let((g(*2(或(gethash word good)0))) (b(或(gethash-word-bad)0))) (除非(,lisp,spam-prevention,bayesian,Lisp,Spam Prevention,Bayesian,看起来它正试图根据哈希表好的和坏的中存在的单词来计算分数 如果哈希表中不存在该单词,则该单词的值为0,否则,如果该单词存在于good表中,则该单词的权重为2(加倍) 如果分数小于5,则按如下方式计算分数(低于的部分,除非): (let ((g (* 2 (or (gethash word good) 0))) (b (or (gethash word bad) 0))) (unless (< (+ g b) 5) (max .01 (min

看起来它正试图根据哈希表
好的
坏的
中存在的
单词
来计算分数

如果哈希表中不存在该单词,则该单词的值为0,否则,如果该单词存在于good表中,则该单词的权重为2(加倍)

如果分数小于5,则按如下方式计算分数(低于
的部分,除非
):

(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)))))))))
我不确定什么是
ngood
nbad
,但是n向我指出它们可能是计数。看起来代码是将计算的分数保持在5以下。在分数计算中,分母将保持在最大值2,分数下限保持在0.5


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

问题是什么?这几乎是通俗易懂的英语:

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

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

考虑到这一点,并假定
g
b
之和不小于5

      (b (or (gethash word bad) 0)))
最小值为0.99或

     (max .01
b
/
nbad
除以
b
/
nbad
g
/
ngood
之和(作为浮点数,这些个体商最多应为1)


是的,LISP通常不被阅读,而是被破译:这里定义了nbad和ngood吗?顺便说一句,是从这里开始的:,他在文本中解释了他在做什么。
      (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)))))))))