X-Git-Url: http://git.kpe.io/?a=blobdiff_plain;f=sql.lisp;h=94a7243e9da75dbbeeb019516f1405b4f1008de9;hb=77d1409857f947a3fd9e8a07d19ff937952a25b5;hp=e7ee3a469814000d67ae3b8f8487a11b11ffaf74;hpb=5b34425d5eb813ef3fec3722779673cf2fd4436e;p=umlisp.git diff --git a/sql.lisp b/sql.lisp index e7ee3a4..94a7243 100644 --- a/sql.lisp +++ b/sql.lisp @@ -7,7 +7,7 @@ ;;;; Programmer: Kevin M. Rosenberg ;;;; Date Started: Apr 2000 ;;;; -;;;; $Id: sql.lisp,v 1.3 2002/10/09 23:03:41 kevin Exp $ +;;;; $Id: sql.lisp,v 1.4 2002/10/16 15:22:28 kevin Exp $ ;;;; ;;;; This file, part of UMLisp, is ;;;; Copyright (c) 2000-2002 by Kevin M. Rosenberg, M.D. @@ -107,3 +107,74 @@ +(defun make-usrl () + (with-sql-connection (conn) + (sql-execute "drop table if exists USRL" conn) + (sql-execute "create table USRL (sab varchar(80), srl integer)" conn) + (dolist (tuple (mutex-sql-query "select distinct SAB,SRL from MRSO order by SAB asc")) + (sql-execute (format nil "insert into USRL (sab,srl) values ('~a',~d)" + (car tuple) (ensure-integer (cadr tuple))) + conn))) + (find-usrl-all)) + +(defun find-usrl-all () + (let ((usrls '()) + (tuples (mutex-sql-query "select SAB,SRL from USRL order by SAB desc"))) + (dolist (tuple tuples) + (push (make-instance 'usrl :sab (nth 0 tuple) + :srl (ensure-integer (nth 1 tuple))) usrls)) + usrls)) + +;; already reversed by sql + +(defun find-usrl_freq-all () + (let ((freqs '())) + (dolist (usrl (find-usrl-all)) + (let ((freq (ensure-integer + (caar (mutex-sql-query + (format nil "select count(*) from MRSO where SAB='~a'" + (sab usrl))))))) + (push (make-instance 'usrl_freq :usrl usrl :freq freq) freqs))) + (sort freqs #'> :key #'usrl_freq-freq))) + + +(defun find-ucon-normalized-multiword (str &key (srl *current-srl*)) + "Return sorted list of ucon's that match a multiword string" + (let* ((words (delimited-string-to-list str #\space)) + (ucons '()) + (nwords '())) + (dolist (word words) + (let ((nws (lvg:process-terms word))) + (dolist (nword nws) + (push nword nwords)))) + (dolist (word nwords) + (setq ucons (append ucons (find-ucon-word word :srl srl)))) + (umlisp::sort-score-ucon-str str (delete-duplicates ucons :test #'eql :key #'cui)))) +(defun find-ustr-normalized-multiword (str &key (srl *current-srl*)) + "Return sorted list of ustr's that match a multiword string" + (let* ((words (delimited-string-to-list str #\space)) + (ustrs '()) + (nwords '())) + (dolist (word words) + (let ((nws (lvg:process-terms word))) + (dolist (nword nws) + (push nword nwords)))) + (dolist (word nwords) + (setq ustrs (append ustrs (find-ustr-word word :srl srl)))) + (umlisp::sort-score-ustr-str str (delete-duplicates ustrs :test #'eql :key #'ustr-cui)))) + +(defun a (str) + (find-normalized-matches-for-str str #'find-ustr-normalized-word #'ustr-sui)) + +(defun find-normalized-matches-for-str (str lookup-func key-func) + "Return list of objects that normalize match for words in string, +eliminate duplicates." + (let ((objs '()) + (nwords '())) + (dolist (word (delimited-string-to-list str #\space)) + (dolist (nword (lvg:process-terms word)) + (unless (member nword nwords :test #'string-equal) + (push nword nwords)))) + (dolist (nw nwords) + (setq objs (append objs (funcall lookup-func nw)))) + (delete-duplicates objs :key key-func :test #'eql)))