Hello,<br>&nbsp;&nbsp; Sorry that I am joining this discussion late.<br><br>As mentioned above, the reason that I made this change was that the bayesian database was getting poorly trained.&nbsp; I had cases where the same message was not being caught by the bayesian filter, and being trained as ham, and then failing some other spam filter, which deleting the message.&nbsp; This was happening several hundred times with the same message, so the bayesian database was getting really screwed up.
<br><br>&nbsp; The root of this problem was that that the message got removed from the database, so I (the user) had no way to help fix the database.<br><br>&nbsp; Here is a potential proposal that would solve this problem, and not require the filters to be run twice
<br><br>1) Make it possible to have a plugin return the fact that some state has been persisted.<br>2) Set this as a property of the comment.<br>3) If one of the following plugins wants to delete the comment, it will call the Delete() method.&nbsp; 
<br>4) In this method it checks to see if the &quot;something has been persisted&quot; bit and doesn&#39;t actually delete the comment, but just hides it.<br><br><br>An alternative to this is to have the comment keep a reference to the filters that have persisted something.&nbsp; In the delete method, before the comment is deleted, all of the filters are given a chance to clean up their state.
<br><br><br>--Paul<br><br><div><span class="gmail_quote">On 11/29/07, <b class="gmail_sendername">Jon Daley</b> &lt;<a href="mailto:plogworld@jon.limedaley.com">plogworld@jon.limedaley.com</a>&gt; wrote:</span><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
On Fri, 30 Nov 2007, Mark Wu wrote:<br>&gt; What you do is make the bayesian filter&nbsp;&nbsp;work worse not better.<br>&gt;<br>&gt; There are several plugins use pipeline filter, we take authimage,<br>&gt; host-block, anti-dns-spam, content-filter as exmple:
<br>&gt;<br>&gt; If one of them failed, you ask baysianFilter to training the comment as a<br>&gt; spam, It is not a good idea.<br>&gt;<br>&gt; 1. Authimage failed: it is due to user input wrong code, but he is not spam.<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;I disagree.&nbsp;&nbsp;What percentage of the auth image failures are due to<br>being a spammer versus a user.&nbsp;&nbsp;If users are failing a lot, this plugin<br>should be removed from the system.&nbsp;&nbsp;The whole point is that spammers fail
<br>the auth image, right?<br><br>&gt; 2. host-block: some one keep post something from some IP, but the content is<br>&gt; not spam, and the &quot;IP&quot; yes .... and our bayesian does not training IP<br>&gt; 3. anti-dns: the same as host block
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;I disagree again.&nbsp;&nbsp;I guess if you are trying to block your friends<br>rather than spammers, you would be correct.&nbsp;&nbsp;I think the point of the host<br>block is to try to catch the cases where the bayesian filter missed the
<br>spam.<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;I guess it is a disagreement about how the bayesian filter should<br>work.&nbsp;&nbsp;For my email, I train every single spam and non-spam that I get for<br>the last three years.&nbsp;&nbsp;I am not really affected by the so-called image
<br>spams, with random text, etc.&nbsp;&nbsp;My bayesian filter happily trains away, and<br>blocks pretty much all of those sorts of spams.&nbsp;&nbsp;Bayesian filtering works<br>better if it is helped, not worse.&nbsp;&nbsp;It is a matter of statistics.
<br><br>&gt; 4. content filter: We just don&#39;t want some &quot;word&quot; to post into our comment,<br>&gt; but it is not spam.<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;This one is your best argument, but I still say that you should<br>let the bayesian filter train on everything and it will come out the best.
<br>Your method has the filter trained the opposite way - the bayesian filter<br>takes a comment that fails the auth image and trains it as non-spam.<br>Which is worse?<br><br>&gt; And, If you DO reallty won&#39;t to solve the order problem, we should add a
<br>&gt; priority to register filter , like<br>&gt;<br>&gt; $registerFilter( $filter, $priority )<br>&gt;<br>&gt; And, before we run the process(), we need to sort the global filter array()<br>&gt; by priority. That&#39;s the right method.
<br>&gt;<br>&gt; Becasue we can always put the baysianFilter in the last order everytime.<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Yes, but I think there could be other plugins that would want to<br>be treated &quot;special&quot; and run last.&nbsp;&nbsp;Maybe plugins could request to be run
<br>at the end or something.<br><br>&gt; Nit just run them twice, and add a &quot;hacky&quot; secondRun flag there to avoid<br>&gt; filter to something.<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;I think the $secondRun flag could be replaced with<br>$previouslyRejected, if you would like, since I think that since the
<br>bayesian filter always runs first, the only time previouslyRejected will<br>be set to true is when it is the second run.<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;By the way, if we go with your code, you should probably use the<br>previouslyRejected flag.
<br>_______________________________________________<br>pLog-svn mailing list<br><a href="mailto:pLog-svn@devel.lifetype.net">pLog-svn@devel.lifetype.net</a><br><a href="http://limedaley.com/mailman/listinfo/plog-svn">http://limedaley.com/mailman/listinfo/plog-svn
</a><br></blockquote></div><br>