2010-11-01 57 views
3
(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))))))))) 
+3

是的,LISP通常不會被讀取,它被破譯:P – 2010-11-01 14:25:20

+1

nbad和ngood在哪裏定義? – 2010-11-01 14:43:01

+2

順便說一下:,他解釋了他在文本中所做的事情。 – Svante 2010-11-01 16:38:58

回答

6

問題是什麼?這幾乎是純英文:

gword值在散列表good(或0,如果不存在有)次2

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

bword在哈希表bad的值(或0如果不存在)。

 (b (or (gethash word bad) 0))) 

考慮到這一點,和推定的gb之和不小於5

(unless (< (+ g b) 5) 

回報最大要麼0.01或

 (max .01 

所述的下最小值爲0.99或

​​3210

b/nbad除以總和b/nbadg/ngood(作爲浮點值,並且這些單獨的商應該至多爲1)。

   (float (/ (min 1 (/ b nbad)) 
         (+ (min 1 (/ g ngood)) 
          (min 1 (/ b nbad))))))))) 
2

看起來是嘗試計算基礎上的word在哈希表goodbad存在的得分。

如果這個單詞不存在於一個散列表中,則它的值爲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。

基於你使用的標籤,我猜測(它只是一個猜測),它試圖根據某種頻率(?)來計算單詞的權重,壞的電子郵件