请帮助破译这个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)))))))))