(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)))))))))
答案 0 :(得分:6)
有什么问题?这几乎是简单的英语:
让g
为哈希表word
中good
的值(如果不存在,则为0)次数2
(let ((g (* 2 (or (gethash word good) 0)))
和b
哈希表word
中bad
的值(如果不存在,则为0)。
(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)))))))))
答案 1 :(得分: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。
基于您使用过的标签,我猜测(这只是一个猜测)它试图根据某种频率(?)计算单词的权重来计算单词的权重。电子邮件。