SpamBayes
SpamBayes is a Bayesian spam filter written in Python which uses techniques laid out by Paul Graham in his essay "A Plan for Spam". It has subsequently been improved by Gary Robinson and Tim Peters, among others. The most notable difference between a conventional Bayesian filter and the filter used by SpamBayes is that there are three classifications rather than two: spam, non-spam (called ham in SpamBayes), and unsure. The user trains a message as being either ham or spam; when filtering a message, the spam filters generate one score for ham and another for spam. If the spam score is high and the ham score is low, the message will be classified as spam. If the spam score is low and the ham score is high, the message will be classified as ham. If the scores are both high or both low, the message will be classified as unsure. This approach leads to a low number of false positives and false negatives, but it may result in a number of unsures which need a human decision. Web filtering
Some work has gone into applying SpamBayes to filter internet content via a proxy web server. References

External links
 
 Paul Graham's original idea
 Essay discussing improvements on Graham's original idea
 Explaining how SpamBayes works
 Paper on SpamBayes for the Conference on E-mail and Anti-Spam
 Winning the War on spam: Comparison of Bayesian spam filters

Spam filtering
Anti-spam
Email
Free software programmed in Python