Update of /project/cl-irc/cvsroot/cl-irc/example In directory common-lisp.net:/home/bmastenbrook/cl-irc/example
Modified Files: cliki.lisp Log Message: MORE GRAMMAR
Date: Wed Jul 28 07:15:22 2004 Author: bmastenbrook
Index: cl-irc/example/cliki.lisp diff -u cl-irc/example/cliki.lisp:1.17 cl-irc/example/cliki.lisp:1.18 --- cl-irc/example/cliki.lisp:1.17 Tue Jul 27 13:51:56 2004 +++ cl-irc/example/cliki.lisp Wed Jul 28 07:15:22 2004 @@ -1,4 +1,4 @@ -;;;; $Id: cliki.lisp,v 1.17 2004/07/27 20:51:56 bmastenbrook Exp $ +;;;; $Id: cliki.lisp,v 1.18 2004/07/28 14:15:22 bmastenbrook Exp $ ;;;; $Source: /project/cl-irc/cvsroot/cl-irc/example/cliki.lisp,v $
;;;; cliki.lisp - CLiki as an infobot; only works on SBCL. @@ -191,15 +191,17 @@ (setf str (regex-replace-all "[^a-zA-Z0-9 ]" str "")) (let* ((terms (split-sequence #\space str)) (terms (mapcar #'(lambda (e) - (regex-replace-all "^(.+)s$" e "\1")) terms)) - (terms (mapcar #'(lambda (e) - (regex-replace-all "^(.+)ing$" e "\1")) terms)) + (loop for r = (regex-replace-all "^(.+)(ness|ing|ation|ion|ly)$" e "\1") + if (equal e r) return r + do (setf e r) + )) terms)) (terms (mapcar #'(lambda (e) - (regex-replace-all "^(.+)ation$" e "\1")) terms)) + (regex-replace-all "^(.+)([a-zA-Z])\2+$" e "\1\2")) terms)) (terms (mapcar #'(lambda (e) - (regex-replace-all "^(.+)ion$" e "\1")) terms)) - (max-score 0) - (max-score-items nil)) + (regex-replace-all "^(.+)s$" e "\1")) terms)) + (max-score 0) + (max-score-items nil)) + ;;(format t "terms is ~S~%" terms) (mapc #'(lambda (e) (let ((score (loop for i in terms @@ -589,6 +591,11 @@ (and str (format nil "~A: ~A" (elt str 0) (random-advice)))) + (let ((str (nth-value 1 (scan-to-strings "^(?i)advi[cs]e\s+(\S+)\s+(on|about)\s+(.+)$" first-pass)))) + (and str + (format nil "~A: ~A" + (elt str 0) + (search-advice (elt str 2))))) (let ((str (nth-value 1 (scan-to-strings "^(?i)advi[cs]e\s+(on|about)\s+(.+)$" first-pass)))) (and str (search-advice (elt str 1)))) @@ -633,10 +640,10 @@ (scan-for-more (trailing-argument message)) (let ((respond-to (if (string-equal (first (arguments message)) *cliki-nickname*) (source message) (first (arguments message))))) (if (valid-cliki-message message) - (let ((response (cliki-lookup (regex-replace *cliki-attention-prefix* (trailing-argument message) "") :sender (source message) :channel (first (irc:arguments message))))) + (let ((response (ignore-errors (cliki-lookup (regex-replace *cliki-attention-prefix* (trailing-argument message) "") :sender (source message) :channel (first (irc:arguments message)))))) (and response (privmsg *cliki-connection* respond-to response))) (if (string-equal (first (arguments message)) *cliki-nickname*) - (aif (cliki-lookup (trailing-argument message) :sender (source message)) + (aif (ignore-errors (cliki-lookup (trailing-argument message) :sender (source message))) (privmsg *cliki-connection* respond-to it)) (if (anybody-here (trailing-argument message)) (privmsg *cliki-connection* (first (arguments message)) (format nil "~A: hello." (source message))))))