r9521: rrf updates
[umlisp.git] / parse-rrf.lisp
index 8b13b3a6c562c30781f61fc44b99f38636b1f05f..793f81cfeb1d4fd04adf2450c18654f9c8783c83 100644 (file)
 (defvar *preparse-hash-init?* nil)
 
 (eval-when (:compile-toplevel :load-toplevel :execute)
-(let ((pfstr-hash nil)      ;;; Preferred concept strings by CUI
-      (cui-lrl-hash nil)    ;;; LRL by CUI
-      (lui-lrl-hash nil)    ;;; LRL by LUI
-      (cuisui-lrl-hash nil) ;;; LRL by CUISUI
-      (sab-srl-hash nil))   ;;; SRL by SAB
+(let ((pfstr-hash nil)      ;; Preferred concept strings by CUI
+      (cui-lrl-hash nil)    ;; LRL by CUI
+      (lui-lrl-hash nil)    ;; LRL by LUI
+      (sui-lrl-hash nil)    ;; LRL by SUI
+      (cuisui-lrl-hash nil) ;; LRL by CUISUI
+      (sab-srl-hash nil))   ;; SRL by SAB
   
   (defun make-preparse-hash-table ()
-    (if pfstr-hash
+    (if sui-lrl-hash
        (progn
          (clrhash pfstr-hash)
          (clrhash cui-lrl-hash)
          (clrhash lui-lrl-hash)
+         (clrhash sui-lrl-hash)
          (clrhash cuisui-lrl-hash)
          (clrhash sab-srl-hash))
       (setf
          pfstr-hash (make-hash-table :size 800000)
          cui-lrl-hash (make-hash-table :size 800000)
          lui-lrl-hash (make-hash-table :size 1500000)
+         sui-lrl-hash (make-hash-table :size 1500000)
          cuisui-lrl-hash (make-hash-table :size 1800000)
          sab-srl-hash (make-hash-table :size 100 :test 'equal))))
     
              (setf (gethash cui pfstr-hash) (nth 14 line))))
        (set-lrl-hash cui srl cui-lrl-hash)
        (set-lrl-hash lui srl lui-lrl-hash)
+       (set-lrl-hash sui srl sui-lrl-hash)
        (set-lrl-hash (make-cuisui cui sui) srl cuisui-lrl-hash)
         (multiple-value-bind (val found) (gethash sab sab-srl-hash)
           (declare (ignore val))
           (unless found
             (setf (gethash sab sab-srl-hash) srl))))))
   
-  (defun pfstr-hash (cui)
-    (gethash cui pfstr-hash))
+  (defun pfstr-hash (cui) (gethash cui pfstr-hash))
+  (defun cui-lrl (cui)    (gethash cui cui-lrl-hash))
+  (defun lui-lrl (lui)    (gethash lui lui-lrl-hash))
+  (defun sui-lrl (sui)    (gethash sui sui-lrl-hash))
+  (defun sab-srl (sab)    (aif (gethash sab sab-srl-hash) it 0))
+  (defun cuisui-lrl (cuisui) (gethash cuisui cuisui-lrl-hash))
   
-  (defun cui-lrl (cui)
-    (gethash cui cui-lrl-hash))
-  
-  (defun lui-lrl (lui)
-    (gethash lui lui-lrl-hash))
-  
-  (defun cuisui-lrl (cuisui)
-    (gethash cuisui cuisui-lrl-hash))
-  
-  (defun sab-srl (sab)
-    (aif (gethash sab sab-srl-hash) it 0))
 )) ;; closure
 
 (defun set-lrl-hash (key lrl hash)
 
 (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)
+      ("AUI" sql-u) ("AUI1" sql-u) ("AUI2" sql-u) ("PCUI" sql-u)
+      ("PLUI" 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)
       ("RNK" sql-s) ("RWS" sql-i) ("SRL" sql-s) ("SUI" sql-u) ("TUI" sql-u)
       ("UI" sql-u) ("UI2" sql-u) ("UI3" sql-u)
       ;; New fields for 2002AD
       ("RCUI" sql-u) ("VCUI" sql-u) ("CFR" sql-i) ("TFR" sql-i)
+      ("MAPSETCUI" sql-u)
       ) 
     "SQL data types for each non-string column")
 
 (defparameter +custom-tables+
     nil
+  #+ignore
+  '(("KCON" "SELECT CUI,STR FROM MRCONSO WHERE STT='PF' AND TS='P' AND ISPREF='Y' AND LAT='ENG'"))
   "Custom tables to create")
 
 (defparameter +custom-cols+
-    '(("MRCONSO.RRF" "KPFSTR" "TEXT" 1024
-              (lambda (x) (pfstr-hash (parse-ui (nth 0 x)))))
+    '(("MRCONSO.RRF" "KPFSTR" "TEXT"
+                    (slot-value (find-ucol "STR" "MRCONSO.RRF") 'max)
+                    (lambda (x) (pfstr-hash (parse-ui (nth 0 x)))))
       ("MRCONSO.RRF" "KCUISUI" "BIGINT" 0
        (lambda (x) (write-to-string (make-cuisui (parse-ui (nth 0 x)) (parse-ui (nth 5 x))))))
       ("MRCONSO.RRF" "KCUILUI" "BIGINT" 0
        (lambda (x) (write-to-string (make-cuilui (parse-ui (nth 0 x)) (parse-ui (nth 3 x))))))
-      ("MRCONSO.RRF" "KCUILRL" "INTEGER" 0
-       (lambda (x) (write-to-string (cui-lrl (parse-ui (nth 0 x))))))
-      ("MRCONSO.RRF" "KLUILRL" "INTEGER" 0
+      ("MRCONSO.RRF" "KCUILRL" "SMALLINT" 0
+       (lambda (x) (write-to-string (lui-lrl (parse-ui (nth 0 x))))))
+      ("MRCONSO.RRF" "KLUILRL" "SMALLINT" 0
        (lambda (x) (write-to-string (lui-lrl (parse-ui (nth 3 x))))))
+      ("MRCONSO.RRF" "KSUILRL" "SMALLINT" 0
+       (lambda (x) (write-to-string (sui-lrl (parse-ui (nth 5 x))))))
       ;; Deprecated, last in 2004AA -- skip index
       #+ignore
-      ("MRLO.RRF" "KLRL" "INTEGER" 0
+      ("MRLO.RRF" "KLRL" "SMALLINT" 0
        (lambda (x) (write-to-string 
                    (if (zerop (length (nth 4 x)))
                        (cui-lrl (parse-ui (nth 0 x)))
                      (cuisui-lrl (make-cuisui (parse-ui (nth 0 x)) (parse-ui (nth 4 x))))))))
-      ("MRSTY.RRF" "KLRL" "INTEGER" 0
+      ("MRSTY.RRF" "KLRL" "SMALLINT" 0
        (lambda (x) (write-to-string (cui-lrl (parse-ui (nth 0 x))))))
-      ("MRCOC.RRF" "KLRL" "INTEGER" 0
+      ("MRCOC.RRF" "KLRL" "SMALLINT" 0
        (lambda (x) (write-to-string 
                    (max (cui-lrl (parse-ui (nth 0 x)))
                         (kmrcl:aif (cui-lrl (parse-ui (nth 1 x))) kmrcl::it 0)))))
-      ("MRSAT.RRF" "KSRL" "INTEGER" 0
+      ("MRSAT.RRF" "KSRL" "SMALLINT" 0
        (lambda (x) (write-to-string (sab-srl (nth 9 x)))))
-      ("MRREL.RRF" "KSRL" "INTEGER" 0
+      ("MRREL.RRF" "KSRL" "SMALLINT" 0
        (lambda (x) (write-to-string (sab-srl (nth 10 x)))))
-      ("MRRANK.RRF" "KSRL" "INTEGER" 0
+      ("MRRANK.RRF" "KSRL" "SMALLINT" 0
        (lambda (x) (write-to-string (sab-srl (nth 1 x)))))
-      ("MRDEF.RRF" "KSRL" "INTEGER" 0
+      ("MRDEF.RRF" "KSRL" "SMALLINT" 0
        (lambda (x) (write-to-string (sab-srl (nth 4 x)))))
-      ("MRCXT.RRF" "KSRL" "INTEGER" 0
+      ("MRCXT.RRF" "KSRL" "SMALLINT" 0
        (lambda (x) (write-to-string (sab-srl (nth 2 x)))))
-      ("MRATX.RRF" "KSRL" "INTEGER" 0
-       (lambda (x) (write-to-string (sab-srl (nth 1 x)))))
-      ("MRXW_ENG.RRF" "KLRL" "INTEGER" 0
+      ("MRXW_ENG.RRF" "KLRL" "SMALLINT" 0
        (lambda (x) (write-to-string (cuisui-lrl (make-cuisui 
                                                 (parse-ui (nth 2 x))
                                                 (parse-ui (nth 4 x)))))))
-      ("MRXW_NONENG.RRF" "KLRL" "INTEGER" 0
+      ("MRXW_NONENG.RRF" "KLRL" "SMALLINT" 0
        (lambda (x) (write-to-string (cuisui-lrl (make-cuisui 
                                                 (parse-ui (nth 2 x))
                                                 (parse-ui (nth 4 x)))))))
-      ("MRXNW_ENG.RRF" "KLRL" "INTEGER" 0
+      ("MRXNW_ENG.RRF" "KLRL" "SMALLINT" 0
        (lambda (x) (write-to-string (cuisui-lrl (make-cuisui 
                                                 (parse-ui (nth 2 x))
                                                 (parse-ui (nth 4 x)))))))
-      ("MRXNS_ENG.RRF" "KLRL" "INTEGER" 0
+      ("MRXNS_ENG.RRF" "KLRL" "SMALLINT" 0
        (lambda (x) (write-to-string (cuisui-lrl (make-cuisui 
                                                 (parse-ui (nth 2 x))
                                                 (parse-ui (nth 4 x)))))))
   "Custom columns to create.(filename, col, sqltype, value-func).")
 
 (defparameter +index-cols+
-    '(("CUI" "MRATX") ("CUI1" "MRCOC") ("CUI" "MRCONSO") ("LUI" "MRCONSO") 
+    '(("CUI1" "MRCOC") ("CUI" "MRCONSO") ("LUI" "MRCONSO") 
       ("SRL" "MRCONSO") ("AUI" "MRCONSO")
       ("SUI" "MRCONSO") ("CUI" "MRCXT") ("CUI" "MRDEF") ("CUI" "MRLO")
       ("CUI1" "MRREL") ("CUI" "MRSAT") ("LUI" "MRSAT") ("SUI" "MRSAT")
       ("TUI" "MRSTY") ("CUI" "MRXNS_ENG") 
       #+ignore ("NSTR" "MRXNS_ENG" 10)
       ("CUI" "MRXNW_ENG") ("NWD" "MRXNW_ENG") ("WD" "MRXW_ENG")
-      ("KCUISUI" "MRCON") ("KCUILUI" "MRCON") ("KCUILRL" "MRCON")
-      ("KLUILRL" "MRCON") ("KCUISUI" "MRCXT") 
-      ("KCUISUI" "MRSO") ("KCUISUI" "MRSAT")  ("KCUILUI" "MRSAT")
+      ("KCUISUI" "MRCONSO") ("KCUILUI" "MRCONSO") ("KCUILRL" "MRCONSO")
+      ("KLUILRL" "MRCONSO") ("KCUISUI" "MRCXT") 
+      ("KCUISUI" "MRSAT")  ("KCUILUI" "MRSAT")
       ("KCUISUI" "MRXW_ENG") ("KCUISUI" "MRXNW_ENG") 
       ("KCUISUI" "MRXNS_ENG") ("KCUISUI" "MRXW_NONENG")
-      ("KSRL" "MRATX") ("KSRL" "MRCXT") ("KSRL" "MRDEF") ("KSRL" "MRRANK") 
+      ("KSRL" "MRCXT") ("KSRL" "MRDEF") ("KSRL" "MRRANK") 
       ("KSRL" "MRREL") ("KSRL" "MRSAT") ("KLRL" "MRCOC") 
       #+ignore ("KLRL" "MRLO")  ;; deprecated
       ("KLRL" "MRSTY") ("KLRL" "MRXW_ENG") ("KLRL" "MRXNW_ENG")
 (defparameter +custom-index-cols+
   nil
   #+ignore
-  '(("CUI" "MRCONFULL") ("SAB" "MRCONFULL") ("TUI" "MRCONFULL"))
+  '(("CUI" "KCON") ("LRL" "KCON"))
   "Indexes to custom tables")
 
 ;; File & Column functions
 "Initialize umls columns for custom columns"  
   (loop for customcol in +custom-cols+
        collect
-       (make-ucol (nth 1 customcol) "" 0 0 0 (nth 3 customcol)
-                  (nth 0 customcol) nil :sqltype (nth 2 customcol)
+       (make-ucol (nth 1 customcol) "" 0 0 0 (eval (nth 3 customcol))
+                  (nth 0 customcol) nil :sqltype (canonicalize-column-type (nth 2 customcol))
                   :custom-value-fun (nth 4 customcol))))
 
 (defun gen-ucols-generic (col-filename)