自動振り分け処理中はロックをこまめにはずすようにしました。
また、スパムフィルタ自身がホワイトリストとブラックリストを持てるようにしたため、@Junkで個別にホワイトリストやブラックリストを指定できる必要はないであろうと考え、@Junkの動作を変えました。新しい書式は、
Boolean @Junk(Boolean?, Boolean?)
になります。一番目の引数を評価した結果が真になるとスパムでないと判定され、二番目の引数を評価した結果が真になるとスパムと判定されます。たとえば、10KB以上のサイズのメッセージをスパムではないと判定し、Subjectに「※未承諾広告」を含むメッセージをスパムと判定する場合には、
@Junk(@Greater(@Size(), 10240), @Contain(%Subject, '※未承諾広告'))
のようにします。これは、
@And(@Not(@Greater(@Size(), 10240)), @Or(@Contain(%Subject, '※未承諾広告'), @Junk()))
とするのとほぼ同じですが、後者では前の二つで判定されてしまうと@Junkが処理されないため学習されませんが、前者は引数の評価も含めて学習の対象になります。
というあたりで今回のスパムフィルタと振り分けルール周りの修正はおしまいにします。