X-Git-Url: https://cgit.sxemacs.org/?a=blobdiff_plain;f=lisp%2Fspam-stat.el;h=04f90ee038df2f058330ffee117ef6ef61dbc4c9;hb=12f0d4b89c61c49e5aa8767d9db2b0839f9b27bf;hp=1b1530d9c2e03ee959cb6f92036346d0ea6da4cc;hpb=745b1694ea12a50d303192a362755019f7fa6971;p=gnus diff --git a/lisp/spam-stat.el b/lisp/spam-stat.el index 1b1530d9c..04f90ee03 100644 --- a/lisp/spam-stat.el +++ b/lisp/spam-stat.el @@ -1,6 +1,6 @@ ;;; spam-stat.el --- detecting spam based on statistics -;; Copyright (C) 2002, 2003, 2004 Free Software Foundation, Inc. +;; Copyright (C) 2002-2012 Free Software Foundation, Inc. ;; Author: Alex Schroeder ;; Keywords: network @@ -8,20 +8,18 @@ ;; This file is part of GNU Emacs. -;; This is free software; you can redistribute it and/or modify it -;; under the terms of the GNU General Public License as published by -;; the Free Software Foundation; either version 2, or (at your option) -;; any later version. +;; GNU Emacs is free software: you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation, either version 3 of the License, or +;; (at your option) any later version. -;; This is distributed in the hope that it will be useful, but WITHOUT -;; ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -;; or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public -;; License for more details. +;; GNU Emacs is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. ;; You should have received a copy of the GNU General Public License -;; along with GNU Emacs; see the file COPYING. If not, write to the -;; Free Software Foundation, Inc., 59 Temple Place - Suite 330, -;; Boston, MA 02111-1307, USA. +;; along with GNU Emacs. If not, see . ;;; Commentary: @@ -124,6 +122,8 @@ ;;; Code: (require 'mail-parse) +(defvar gnus-original-article-buffer) + (defgroup spam-stat nil "Statistical spam detection for Emacs. Use the functions to build a dictionary of words and their statistical @@ -138,12 +138,6 @@ See `spam-stat-to-hash-table' for the format of the file." :type 'file :group 'spam-stat) -(defcustom spam-stat-install-hooks t - "Whether spam-stat should install its hooks in Gnus. -This is set to nil if you use spam-stat through spam.el." - :type 'boolean - :group 'spam-stat) - (defcustom spam-stat-unknown-word-score 0.2 "The score to use for unknown words. Also used for words that don't appear often enough." @@ -180,7 +174,7 @@ no effect when spam-stat is invoked through spam.el." (defcustom spam-stat-score-buffer-user-functions nil "List of additional scoring functions. -Called one by one on the buffer. +Called one by one on the buffer. If all of these functions return non-nil answers, these numerical answers are added to the computed spam stat score on the buffer. If @@ -375,6 +369,8 @@ Use `spam-stat-ngood', `spam-stat-nbad', `spam-stat-good', (spam-stat-buffer-words)) (setq spam-stat-dirty t)) +(autoload 'gnus-message "gnus-util") + (defun spam-stat-buffer-change-to-spam () "Consider current buffer no longer normal mail but spam." (setq spam-stat-nbad (1+ spam-stat-nbad) @@ -440,12 +436,12 @@ spam-stat (spam-stat-to-hash-table '(" spam-stat-ngood spam-stat-nbad)) (null spam-stat-last-saved-at) (not (equal spam-stat-last-saved-at (nth 5 (file-attributes spam-stat-file))))) - (progn + (progn (load-file spam-stat-file) (setq spam-stat-dirty nil - spam-stat-last-saved-at + spam-stat-last-saved-at (nth 5 (file-attributes spam-stat-file))))) - (t (message "Spam stat file not loaded: no change in disk.."))))) + (t (message "Spam stat file not loaded: no change in disk."))))) (defun spam-stat-to-hash-table (entries) "Turn list ENTRIES into a hash table and store as `spam-stat'. @@ -501,11 +497,11 @@ where DIFF is the difference between SCORE and 0.5." (defun spam-stat-score-buffer () "Return a score describing the spam-probability for this buffer. Add user supplied modifications if supplied." - (interactive) ; helps in debugging. + (interactive) ; helps in debugging. (setq spam-stat-score-data (spam-stat-buffer-words-with-scores)) (let* ((probs (mapcar 'cadr spam-stat-score-data)) (prod (apply #'* probs)) - (score0 + (score0 (/ prod (+ prod (apply #'* (mapcar #'(lambda (x) (- 1 x)) probs))))) (score1s @@ -515,17 +511,17 @@ Add user supplied modifications if supplied." (error nil))) (ans (if score1s (+ score0 score1s) score0))) - (when (interactive-p) + (when (interactive-p) (message "%S" ans)) ans)) (defun spam-stat-score-buffer-user (&rest args) (let* ((scores - (mapcar - (lambda (fn) + (mapcar + (lambda (fn) (apply fn args)) spam-stat-score-buffer-user-functions))) - (if (memq nil scores) nil + (if (memq nil scores) nil (apply #'+ scores)))) (defun spam-stat-split-fancy () @@ -549,12 +545,14 @@ check the variable `spam-stat-score-data'." ;; Testing (defun spam-stat-strip-xref () - "Strip the the Xref header." + "Strip the Xref header." (save-restriction (mail-narrow-to-head) (when (re-search-forward "^Xref:.*\n" nil t) (delete-region (match-beginning 0) (match-end 0))))) +(autoload 'time-to-number-of-days "time-date") + (defun spam-stat-process-directory (dir func) "Process all the regular files in directory DIR using function FUNC." (let* ((files (directory-files dir t "^[^.]")) @@ -654,9 +652,6 @@ COUNT defaults to 5" (add-hook 'gnus-select-article-hook 'spam-stat-store-gnus-article-buffer)) -(when spam-stat-install-hooks - (spam-stat-install-hooks-function)) - (defun spam-stat-unload-hook () "Uninstall the spam-stat function hooks." (interactive) @@ -669,5 +664,4 @@ COUNT defaults to 5" (provide 'spam-stat) -;;; arch-tag: ff1d2200-8ddb-42fb-bb7b-1b5e20448554 ;;; spam-stat.el ends here