(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)))))))))
2 に答える
何が問題ですか?それはほとんど平易な英語です:
ハッシュテーブルg
の値(または、そこに存在しない場合は0)に2を掛けた値とします。word
good
(let ((g (* 2 (or (gethash word good) 0)))
ハッシュテーブル内ののb
値(または、そこに存在しない場合は0)。word
bad
(b (or (gethash word bad) 0)))
g
これを念頭に置いて、との合計がb
5以上であるという仮定の下で
(unless (< (+ g b) 5)
0.01またはのいずれかの最大値を返します
(max .01
0.99またはのいずれかの最小値
(min .99
b
/を/と/nbad
の合計で割った値(浮動小数点値として、これらの個々の商は最大で1である必要があります)。b
nbad
g
ngood
(float (/ (min 1 (/ b nbad))
(+ (min 1 (/ g ngood))
(min 1 (/ b nbad)))))))))
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 に維持しているようにも見えます。
あなたが使用したタグに基づいて、良いメールと悪いメールの単語のある種の頻度 (?) カウントに基づいて、単語の重み付けを計算しようとしていると推測します (これは単なる推測です)。