Ehu*_*RAK 3 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)))))))))
Run Code Online (Sandbox Code Playgroud)
问题是什么?这几乎是简单的英语:
让g是的值word在散列表good(或0,如果不存在有)2倍
(let ((g (* 2 (or (gethash word good) 0)))
Run Code Online (Sandbox Code Playgroud)
和散列表中b的值(如果不存在则为0).wordbad
(b (or (gethash word bad) 0)))
Run Code Online (Sandbox Code Playgroud)
考虑到这一点,并根据该总和的假设g和b不小于5
(unless (< (+ g b) 5)
Run Code Online (Sandbox Code Playgroud)
返回0.01或者最大值
(max .01
Run Code Online (Sandbox Code Playgroud)
最小值为0.99或
(min .99
Run Code Online (Sandbox Code Playgroud)
b/ nbad通过的总和除以b/ nbad和g/ ngood(作为一个浮点值,并且这些个体商应该至多为1).
(float (/ (min 1 (/ b nbad))
(+ (min 1 (/ g ngood))
(min 1 (/ b nbad)))))))))
Run Code Online (Sandbox Code Playgroud)