From 51451987c4fee40b475e014ee5c801b1657d119d Mon Sep 17 00:00:00 2001 From: "Kevin M. Rosenberg" Date: Thu, 14 Sep 2006 13:29:43 +0000 Subject: [PATCH] r11151: make RUI a int4eger (unique identifier) field, add MRREL indices --- class-support.lisp | 13 +++++++++++++ classes.lisp | 2 +- package.lisp | 2 +- parse-rrf.lisp | 14 +++++++++----- sql-classes.lisp | 34 ++++++++++++++++++++++++++++------ utils.lisp | 9 +++++++++ 6 files changed, 61 insertions(+), 13 deletions(-) diff --git a/class-support.lisp b/class-support.lisp index dd96903..2b94e91 100644 --- a/class-support.lisp +++ b/class-support.lisp @@ -101,6 +101,19 @@ aui (fmt-aui (parse-integer aui)))) +(defgeneric fmt-rui (rui)) +(when *has-fixnum-class* + (defmethod fmt-rui ((rui fixnum)) + (prefixed-fixnum-string aui #\A 8))) + +(defmethod fmt-rui ((rui integer)) + (prefixed-integer-string rui #\A 8)) + +(defmethod fmt-rui ((rui string)) + (if (eql (aref rui 0) #\R) + rui + (fmt-rui (parse-integer rui)))) + (defgeneric fmt-eui (e)) (when *has-fixnum-class* (defmethod fmt-eui ((e fixnum)) diff --git a/classes.lisp b/classes.lisp index aed5b64..cee2fcd 100644 --- a/classes.lisp +++ b/classes.lisp @@ -214,7 +214,7 @@ (pfstr2 :value-type cdata :initarg :pfstr2 :reader pfstr2) (stype2 :value-type string :initarg :stype2 :reader stype2) (rela :value-type string :initarg :rela :reader rela) - (rui :value-type string :initarg :rui :reader rui) + (rui :value-type fixnum :initarg :rui :reader rui :print-formatter fmt-rui) (srui :value-type string :initarg :srui :reader srui) (sab :value-type string :initarg :sab :reader sab :hyperlink find-usab-rsab) (sl :value-type string :initarg :sl :reader sl) diff --git a/package.lisp b/package.lisp index f426ca4..d8fbe3f 100644 --- a/package.lisp +++ b/package.lisp @@ -33,7 +33,7 @@ #:ltyp #:lwd #:sdef #:sstr #:sstre1 #:sstre2 #:sty #:tui #:def #:sab #:srl #:tty #:rank #:supres #:atn #:atv #:vcui #:rcui #:vsab #:code #:saui :scui :sdui - #:rl #:sty2 #:ui #:ui2 #:ui3 #:eui #:bas #:eui2 #:bas2 + #:rl #:sty2 #:ui #:ui2 #:ui3 #:eui #:bas #:eui2 #:bas2 #:rui #:cui #:aui #:lui #:sui #:wd #:lat #:nstr :cuilist #:rsab #:lat #:s#def #:s#sty #:s#term #:s#str #:s#lo #:s#sat #:s#rel #:s#coc diff --git a/parse-rrf.lisp b/parse-rrf.lisp index 960653e..2e744ad 100644 --- a/parse-rrf.lisp +++ b/parse-rrf.lisp @@ -100,7 +100,7 @@ (defparameter +col-datatypes+ '(("AV" sql-f) ("BTS" sql-i) ("CLS" sql-i) ("COF" sql-i) ("CUI1" sql-u) ("AUI" sql-u) ("AUI1" sql-u) ("AUI2" sql-u) ("PCUI" sql-u) - ("PLUI" sql-u) ("PAUI" sql-u) + ("PLUI" sql-u) ("PAUI" sql-u) ("RUI" sql-u) ("CUI2" sql-u) ("CUI" sql-u) ("CXN" sql-s) ("FR" sql-i) ("LRL" sql-s) ("LUI" sql-u) ("MAX" sql-s) ("MIN" sql-s) ("RANK" sql-s) ("REF" sql-c) ("PTR" sql-c) @@ -210,10 +210,14 @@ (defparameter +index-cols+ '(("CUI1" "MRCOC") ("CUI" "MRCONSO") ("LUI" "MRCONSO") ("SRL" "MRCONSO") ("AUI" "MRCONSO") ("KPFENG" "MRCONSO") - ("SUI" "MRCONSO") ("CUI" "MRDEF") - ("CUI1" "MRREL") ("CUI" "MRSAT") ("LUI" "MRSAT") ("SUI" "MRSAT") - ("CUI" "MRSTY") - ("TUI" "MRSTY") ("CUI" "MRXNS_ENG") + ("SUI" "MRCONSO") ("SAUI" "MRCONSO") ("CODE" "MRCONSO") + ("SCUI" "MRCONSO") + ("CUI" "MRDEF") + ("CUI1" "MRREL") ("CUI2" "MRREL") + ("RUI" "MRREL") ("AUI" "MRREL") ("AUI2" "MRREL") + ("CUI" "MRSAT") ("LUI" "MRSAT") ("SUI" "MRSAT") + ("METAUI" "MRSAT") ("ATN" "MRSAT") + ("CUI" "MRSTY") ("TUI" "MRSTY") ("CUI" "MRXNS_ENG") ("AUI" "MRHIER") ("PTR" "MRHIER" 255) ("CUI" "MRHIER") ("CXN" "MRHIER") ("RELA" "MRHIER") ("PAUI" "MRHIER") ("SAB" "MRHIER") #+ignore ("NSTR" "MRXNS_ENG" 10) diff --git a/sql-classes.lisp b/sql-classes.lisp index c91ee8a..5543d58 100644 --- a/sql-classes.lisp +++ b/sql-classes.lisp @@ -204,6 +204,16 @@ is OBJNAME from TABLE where WHERE-NAME field = WHERE-VALUE with FIELDS" (setq ,sui (parse-sui ,sui)) ,sui)) +(defmacro ensure-aui-integer (aui) + `(if (stringp ,aui) + (setq ,aui (parse-aui ,aui)) + ,aui)) + +(defmacro ensure-rui-integer (rui) + `(if (stringp ,rui) + (setq ,rui (parse-rui ,rui)) + ,rui)) + (defmacro ensure-tui-integer (tui) `(if (stringp ,tui) (setq ,tui (parse-tui ,tui)) @@ -274,7 +284,7 @@ is OBJNAME from TABLE where WHERE-NAME field = WHERE-VALUE with FIELDS" (defun find-ucon-aui (aui &key (srl *current-srl*)) "Find list of ucon for aui" - (ensure-sui-integer aui) + (ensure-aui-integer aui) (collect-umlisp-query (mrconso (cui kcuilrl) srl aui aui :distinct t) (make-instance 'ucon :cui (ensure-integer cui) :pfstr (find-pfstr-cui cui) :lrl (ensure-integer kcuilrl)))) @@ -383,7 +393,17 @@ is OBJNAME from TABLE where WHERE-NAME field = WHERE-VALUE with FIELDS" srl cui1 cui :lrl "KSRL") (make-instance 'urel :cui1 cui :aui1 (ensure-integer aui1) :stype1 stype1 :rel rel :cui2 (ensure-integer cui2) :aui2 (ensure-integer aui2) :stype2 stype2 - :rui rui :srui srui :rela rela :sab sab :sl sl :rg rg :dir dir + :rui (ensure-integer rui) :srui srui :rela rela :sab sab :sl sl :rg rg :dir dir + :suppress suppress :cvf cvf :pfstr2 (find-pfstr-cui cui2)))) + +(defun find-urel-rui (rui &key (srl *current-srl*)) + "Return the urel for a rui" + (ensure-rui-integer rui) + (collect-umlisp-query (mrrel (aui1 rel stype1 cui2 aui2 stype2 rela rui srui sab sl rg dir suppress cvf) + srl rui rui :lrl "KSRL" :single t) + (make-instance 'urel :cui1 cui :aui1 (ensure-integer aui1) :stype1 stype1 :rel rel + :cui2 (ensure-integer cui2) :aui2 (ensure-integer aui2) :stype2 stype2 + :rui (ensure-integer rui) :srui srui :rela rela :sab sab :sl sl :rg rg :dir dir :suppress suppress :cvf cvf :pfstr2 (find-pfstr-cui cui2)))) (defun find-cui2-urel-cui (cui &key (srl *current-srl*)) @@ -398,8 +418,10 @@ is OBJNAME from TABLE where WHERE-NAME field = WHERE-VALUE with FIELDS" (ensure-cui-integer cui2) (collect-umlisp-query (mrrel (rel cui1 aui1 stype1 aui2 stype2 rela rui srui sab sl rg dir suppress cvf) srl cui2 cui2 :lrl "KSRL") - (make-instance 'urel :cui2 cui2 :rel rel :aui2 (ensure-integer aui2) :stype2 stype2 :rui rui :srui srui - :stype1 stype1 :cui1 (ensure-integer cui1) :aui1 (ensure-integer aui1) + (make-instance 'urel :cui2 cui2 :rel rel :aui2 (ensure-integer aui2) + :stype2 stype2 :rui (ensure-integer rui) :srui srui + :stype1 stype1 :cui1 (ensure-integer cui1) + :aui1 (ensure-integer aui1) :rela rela :sab sab :sl sl :rg rg :dir dir :suppress suppress :cvf cvf :pfstr2 (find-pfstr-cui cui2)))) @@ -533,8 +555,8 @@ is OBJNAME from TABLE where WHERE-NAME field = WHERE-VALUE with FIELDS" (defun find-uso-cuisui (cui sui &key (srl *current-srl*)) (ensure-sui-integer sui) (ensure-cui-integer cui) - (collect-umlisp-query (mrconso (aui sab code srl tty saui sdui scui lat str) srl kcuisui - (make-cuisui cui sui) :lrl srl) + (collect-umlisp-query (mrconso (aui sab code srl tty saui sdui scui lat str) + srl kcuisui (make-cuisui cui sui) :lrl srl) (make-instance 'uso :aui aui :sab sab :code code :srl srl :tty tty :cui cui :sui sui :saui saui :sdui sdui :scui scui :lat lat :str str))) diff --git a/utils.lisp b/utils.lisp index 7fa3395..9fc23e4 100644 --- a/utils.lisp +++ b/utils.lisp @@ -85,6 +85,15 @@ (nth-value 0 (parse-integer aui)))) aui)) +(defun parse-rui (rui) + (declare (optimize (speed 3) (safety 0))) + (if (stringp rui) + (let ((ch (schar rui 0))) + (if (char-equal ch #\R) + (parse-ui rui) + (nth-value 0 (parse-integer rui)))) + rui)) + (defun parse-eui (eui) (declare (optimize (speed 3) (safety 0))) (if (stringp eui) -- 2.34.1