(defun pfm-run-command-on-article (command &optional replace)

  (interactive "sCommand: \nP")
  (let ((n (gnus-summary-article-number))
        (g gnus-newsgroup-name))
     (with-temp-buffer
       (gnus-request-article n g (current-buffer))
       (shell-command-on-region
        (point-min) (point-max)
        command)
       (if replace
            (gnus-request-replace-article n g (current-buffer)))
        )))

(define-key gnus-summary-mode-map
         (read-kbd-macro "C-c R s")
         '(lambda () (interactive) (pfm-run-command-on-article "sa-learn --spam --single" ))
)
(define-key gnus-summary-mode-map
        (read-kbd-macro "C-c R h")
        '(lambda () (interactive) (pfm-run-command-on-article "sa-learn --ham --single"))
