From 77d1409857f947a3fd9e8a07d19ff937952a25b5 Mon Sep 17 00:00:00 2001 From: "Kevin M. Rosenberg" Date: Wed, 16 Oct 2002 15:22:28 +0000 Subject: [PATCH] r3065: *** empty log message *** --- classes.lisp | 12 ++++++++- package.lisp | 3 ++- sql.lisp | 73 +++++++++++++++++++++++++++++++++++++++++++++++++++- 3 files changed, 85 insertions(+), 3 deletions(-) diff --git a/classes.lisp b/classes.lisp index a81cdc3..f8eb3a9 100644 --- a/classes.lisp +++ b/classes.lisp @@ -7,7 +7,7 @@ ;;;; Programmer: Kevin M. Rosenberg ;;;; Date Started: Apr 2000 ;;;; -;;;; $Id: classes.lisp,v 1.5 2002/10/14 15:03:43 kevin Exp $ +;;;; $Id: classes.lisp,v 1.6 2002/10/16 15:22:28 kevin Exp $ ;;;; ;;;; This file, part of UMLisp, is ;;;; Copyright (c) 2000-2002 by Kevin M. Rosenberg, M.D. @@ -34,6 +34,16 @@ (funcall (funcall (kmrcl::obj-data-value-func fmt) obj) obj)))))) +(defclass usrl (umlsclass) + ((sab :type string :initarg :sab :reader sab) + (srl :type integer :initarg :srl :reader srl)) + (:metaclass kmrcl:ml-class) + (:default-initargs :sab nil :srl nil) + (:title "Source Restriction Level") + (:fields (sab :string) (srl :fixnum)) + (:documentation "Custom Table: Source Restriction Level")) + + (defclass urank (umlsclass) ((rank :type fixnum :initarg :rank :reader rank) (sab :type string :initarg :sab :reader sab) diff --git a/package.lisp b/package.lisp index e4e013d..79e3436 100644 --- a/package.lisp +++ b/package.lisp @@ -7,7 +7,7 @@ ;;;; Programmer: Kevin M. Rosenberg ;;;; Date Started: Apr 2000 ;;;; -;;;; $Id: package.lisp,v 1.6 2002/10/14 19:26:36 kevin Exp $ +;;;; $Id: package.lisp,v 1.7 2002/10/16 15:22:28 kevin Exp $ ;;;; ;;;; This file, part of UMLisp, is ;;;; Copyright (c) 2000-2002 by Kevin M. Rosenberg, M.D. @@ -28,6 +28,7 @@ #:ucon #:uterm #:ustr + #:usrl #:sty #:tui 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))) -- 2.34.1