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)))))))))
4

2 に答える 2

6

何が問題ですか?それはほとんど平易な英語です:

ハッシュテーブルgの値(または、そこに存在しない場合は0)に2を掛けた値とします。wordgood

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

ハッシュテーブル内ののb値(または、そこに存在しない場合は0)。wordbad

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

gこれを念頭に置いて、との合計がb5以上であるという仮定の下で

   (unless (< (+ g b) 5)

0.01またはのいずれかの最大値を返します

     (max .01

0.99またはのいずれかの最小値

          (min .99 

b/を/と/nbadの合計で割った値(浮動小数点値として、これらの個々の商は最大で1である必要があります)。bnbadgngood

               (float (/ (min 1 (/ b nbad))
                         (+ (min 1 (/ g ngood))   
                            (min 1 (/ b nbad)))))))))
于 2010-11-01T16:15:17.700 に答える
2

wordハッシュ テーブル内のgoodとの存在に基づいてスコアを計算しようとしているようbadです。

単語がハッシュ テーブルに存在しない場合は、値 0 が与えられます。それ以外の場合は、適切なテーブルに存在する場合は 2 (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 に維持しているようにも見えます。

あなたが使用したタグに基づいて、良いメールと悪いメールの単語のある種の頻度 (?) カウントに基づいて、単語の重み付けを計算しようとしていると推測します (これは単なる推測です)。

于 2010-11-01T14:42:20.330 に答える