projects
/
gnus
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Revert last patch since that made it break even more
[gnus]
/
lisp
/
spam-stat.el
diff --git
a/lisp/spam-stat.el
b/lisp/spam-stat.el
index
4dce647
..
ec8b9f3
100644
(file)
--- a/
lisp/spam-stat.el
+++ b/
lisp/spam-stat.el
@@
-1,6
+1,6
@@
;;; spam-stat.el --- detecting spam based on statistics
;;; spam-stat.el --- detecting spam based on statistics
-;; Copyright (C) 2002
, 2003, 200
4 Free Software Foundation, Inc.
+;; Copyright (C) 2002
-201
4 Free Software Foundation, Inc.
;; Author: Alex Schroeder <alex@gnu.org>
;; Keywords: network
;; Author: Alex Schroeder <alex@gnu.org>
;; Keywords: network
@@
-8,20
+8,18
@@
;; This file is part of GNU Emacs.
;; 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
;; 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., 51 Franklin Street, Fifth Floor,
-;; Boston, MA 02110-1301, USA.
+;; along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>.
;;; Commentary:
;;; Commentary:
@@
-124,6
+122,8
@@
;;; Code:
(require 'mail-parse)
;;; 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
(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)
: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."
(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.
(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
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))
(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)
(defun spam-stat-buffer-change-to-spam ()
"Consider current buffer no longer normal mail but spam."
(setq spam-stat-nbad (1+ spam-stat-nbad)
@@
-416,8
+412,7
@@
With a prefix argument save unconditionally."
(when (or force spam-stat-dirty)
(let ((coding-system-for-write spam-stat-coding-system))
(with-temp-file spam-stat-file
(when (or force spam-stat-dirty)
(let ((coding-system-for-write spam-stat-coding-system))
(with-temp-file spam-stat-file
- (let ((standard-output (current-buffer))
- (font-lock-maximum-size 0))
+ (let ((standard-output (current-buffer)))
(insert (format ";-*- coding: %s; -*-\n" spam-stat-coding-system))
(insert (format "(setq spam-stat-ngood %d spam-stat-nbad %d
spam-stat (spam-stat-to-hash-table '(" spam-stat-ngood spam-stat-nbad))
(insert (format ";-*- coding: %s; -*-\n" spam-stat-coding-system))
(insert (format "(setq spam-stat-ngood %d spam-stat-nbad %d
spam-stat (spam-stat-to-hash-table '(" spam-stat-ngood spam-stat-nbad))
@@
-440,12
+435,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)))))
(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
(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)))))
(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'.
(defun spam-stat-to-hash-table (entries)
"Turn list ENTRIES into a hash table and store as `spam-stat'.
@@
-498,14
+493,26
@@
where DIFF is the difference between SCORE and 0.5."
(setcdr (nthcdr 14 result) nil)
result))
(setcdr (nthcdr 14 result) nil)
result))
+(eval-when-compile
+ (defmacro spam-stat-called-interactively-p (kind)
+ (condition-case nil
+ (progn
+ (eval '(called-interactively-p 'any))
+ ;; Emacs >=23.2
+ `(called-interactively-p ,kind))
+ ;; Emacs <23.2
+ (wrong-number-of-arguments '(called-interactively-p))
+ ;; XEmacs
+ (void-function '(interactive-p)))))
+
(defun spam-stat-score-buffer ()
"Return a score describing the spam-probability for this buffer.
Add user supplied modifications if supplied."
(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))
(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
(/ prod (+ prod (apply #'* (mapcar #'(lambda (x) (- 1 x))
probs)))))
(score1s
@@
-515,17
+522,17
@@
Add user supplied modifications if supplied."
(error nil)))
(ans
(if score1s (+ score0 score1s) score0)))
(error nil)))
(ans
(if score1s (+ score0 score1s) score0)))
- (when (
interactive-p)
+ (when (
spam-stat-called-interactively-p 'any)
(message "%S" ans))
ans))
(defun spam-stat-score-buffer-user (&rest args)
(let* ((scores
(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)))
(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 ()
(apply #'+ scores))))
(defun spam-stat-split-fancy ()
@@
-549,12
+556,14
@@
check the variable `spam-stat-score-data'."
;; Testing
(defun spam-stat-strip-xref ()
;; 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)))))
(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 "^[^.]"))
(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
+663,6
@@
COUNT defaults to 5"
(add-hook 'gnus-select-article-hook
'spam-stat-store-gnus-article-buffer))
(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)
(defun spam-stat-unload-hook ()
"Uninstall the spam-stat function hooks."
(interactive)
@@
-669,5
+675,4
@@
COUNT defaults to 5"
(provide 'spam-stat)
(provide 'spam-stat)
-;;; arch-tag: ff1d2200-8ddb-42fb-bb7b-1b5e20448554
;;; spam-stat.el ends here
;;; spam-stat.el ends here