1 ;;; $Id: classes.lisp,v 1.2 2002/10/09 02:23:22 kevin Exp $
3 ;;; UMLS object defintions and printing routines
6 (declaim (optimize (speed 3) (safety 1)))
10 (:metaclass kmrcl::ml-class)
11 (:documentation "Parent class of all UMLS objects"))
14 (defmethod print-object ((obj umlsclass) (s stream))
15 (print-unreadable-object (obj s :type t :identity t)
16 (let ((fmt (make-instance 'kmrcl::textformat)))
18 s (funcall (kmrcl::obj-data-fmtstr fmt) obj)
20 (funcall (funcall (kmrcl::obj-data-value-func fmt) obj) obj))))))
25 (defclass urank (umlsclass)
26 ((rank :type fixnum :initarg :rank :reader rank)
27 (sab :type string :initarg :sab :reader sab)
28 (tty :type string :initarg :tty :reader tty)
29 (supres :type string :initarg :supres :reader supres))
30 (:metaclass kmrcl::ml-class)
31 (:default-initargs :rank nil :sab nil :tty nil :supres nil)
33 (:fields (rank :fixnum) (sab :string) (tty :string) (supres :string)))
35 (defclass udef (umlsclass)
36 ((def :type string :initarg :def :reader def)
37 (sab :type string :initarg :sab :reader sab))
38 (:metaclass kmrcl::ml-class)
39 (:default-initargs :def nil :sab nil)
41 (:ref-fields (sab find-bsab-sab))
42 (:fields (sab :string) (def :cdata)))
44 (defclass usat (umlsclass)
45 ((sab :type string :initarg :sab :reader sab)
46 (code :type string :initarg :code :reader code)
47 (atn :type string :initarg :atn :reader atn)
48 (atv :type string :initarg :atv :reader atv))
49 (:metaclass kmrcl::ml-class)
50 (:default-initargs :sab nil :code nil :atn nil :atv nil)
51 (:title "Simple Attribute")
52 (:ref-fields (sab find-bsab-sab))
53 (:fields (sab :string) (code :string) (atn :string) (atv :cdata)))
55 (defclass uso (umlsclass)
56 ((sab :type string :initarg :sab :reader sab)
57 (code :type string :initarg :code :reader code)
58 (tty :type string :initarg :tty :reader tty)
59 (srl :type fixnum :initarg :srl :reader srl))
60 (:metaclass kmrcl::ml-class)
61 (:default-initargs :sab nil :code nil :tty nil :srl nil)
63 (:ref-fields (sab find-bsab-sab) (tty find-btty-tty))
64 (:fields (sab :string) (code :string) (tty :string) (srl :fixnum)))
66 (defclass ucxt (umlsclass)
67 ((sab :type string :initarg :sab :reader sab)
68 (code :type string :initarg :code :reader code)
69 (rnk :type fixnum :initarg :rnk :reader rnk)
70 (cxn :type fixnum :initarg :cxn :reader cxn)
71 (cxl :type string :initarg :cxl :reader cxl)
72 (cxs :type string :initarg :cxs :reader cxs)
73 (cui2 :type fixnum :initarg :cui2 :reader cui2)
74 (hcd :type string :initarg :hcd :reader hcd)
75 (rela :type string :initarg :rela :reader rela)
76 (xc :type string :initarg :xc :reader xc))
77 (:metaclass kmrcl::ml-class)
78 (:default-initargs :sab nil :code nil :rnk nil :cxn nil :cxl nil :cxs nil
79 :cui2 nil :hcd nil :rela nil :xc nil)
81 (:ref-fields (sab find-bsab-sab) (cui2 find-ucon-cui))
83 (sab :string) (code :string) (rnk :fixnum) (cxn :fixnum) (cxl :string)
84 (hcd :string) (rela :string) (xc :string) (cui2 :string fmt-cui)
87 (defclass ustr (umlsclass)
88 ((sui :type fixnum :initarg :sui :reader sui)
89 (cui :type fixnum :initarg :cui :reader cui)
90 (lui :type fixnum :initarg :lui :reader lui)
91 (cuisui :type integer :initarg :cuisui :reader cuisui )
92 (str :type string :initarg :str :reader str)
93 (lrl :type fixnum :initarg :lrl :reader lrl)
94 (stt :type string :initarg :stt :reader stt)
97 (s#cxt :reader s#cxt))
98 (:metaclass kmrcl::ml-class)
100 :sui nil :cui nil :lui nil :cuisui nil :str nil :lrl nil :stt nil)
102 (:subobjects-lists (s#sat usat) (s#so uso) (s#cxt ucxt))
103 (:fields (sui :string fmt-sui) (stt :string) (lrl :fixnum) (str :cdata))
104 (:ref-fields (sui find-ustr-sui)))
106 (defclass ulo (umlsclass)
107 ((isn :type string :initarg :isn :reader isn)
108 (fr :type fixnum :initarg :fr :reader fr)
109 (un :type string :initarg :un :reader un)
110 (sui :type fixnum :initarg :sui :reader sui)
111 (sna :type string :initarg :sna :reader sna)
112 (soui :type string :initarg :soui :reader soui))
113 (:metaclass kmrcl::ml-class)
114 (:default-initargs :isn nil :fr nil :un nil :sui nil :sna nil :soui nil)
116 (:fields (isn :string) (fr :fixnum) (un :string) (sna :string)
117 (soui :string) (sui :string fmt-sui) (suistr :string)))
119 (defclass uterm (umlsclass)
120 ((lui :type fixnum :initarg :lui :reader lui)
121 (cui :type fixnum :initarg :cui :reader cui)
122 (lat :type string :initarg :lat :reader lat)
123 (ts :type string :initarg :ts :reader ts)
124 (lrl :type fixnum :initarg :lrl :reader lrl)
125 (s#str :reader s#str)
126 (s#sat :reader s#sat))
127 (:metaclass kmrcl::ml-class)
128 (:default-initargs :lui nil :cui nil :lat nil :ts nil :lrl nil)
130 (:subobjects-lists (s#sat usat) (s#str ustr))
131 (:fields (lui :string fmt-lui) (lat :string) (ts :string) (lrl :fixnum))
132 (:ref-fields (lui find-uterm-lui)))
134 (defclass usty (umlsclass)
135 ((tui :type fixnum :initarg :tui :reader tui)
136 (sty :type string :initarg :sty :reader sty))
137 (:metaclass kmrcl::ml-class)
138 (:default-initargs :tui nil :sty nil)
139 (:title "Semantic Type")
140 (:ref-fields (tui find-ucon-tui (("subobjects" "no"))))
141 (:fields (tui :string fmt-tui) (sty :string)))
143 (defclass urel (umlsclass)
144 ((rel :type string :initarg :rel :reader rel)
145 (cui1 :type fixnum :initarg :cui1 :reader cui1)
146 (cui2 :type fixnum :initarg :cui2 :reader cui2)
147 (pfstr2 :type string :initarg :pfstr2 :reader pfstr2)
148 (rela :type string :initarg :rela :reader rela)
149 (sab :type string :initarg :sab :reader sab)
150 (sl :type string :initarg :sl :reader sl)
151 (mg :type string :initarg :mg :reader mg))
152 (:metaclass kmrcl::ml-class)
154 :rel nil :cui1 nil :cui2 nil :pfstr2 nil :rela nil :sab nil :sl nil :mg nil)
155 (:title "Relationship")
156 (:ref-fields (rel find-brel-rel) (sab find-bsab-sab) (cui2 find-ucon-cui))
157 (:fields (rel :string) (rela :string) (sab :string) (sl :string)
158 (mg :string) (cui2 :string fmt-cui) (pfstr2 :cdata)))
160 (defclass ucoc (umlsclass)
161 ((cui1 :type fixnum :initarg :cui1 :reader cui1)
162 (cui2 :type fixnum :initarg :cui2 :reader cui2)
163 (pfstr2 :type string :initarg :pfstr2 :reader pfstr2)
164 (soc :type string :initarg :soc :reader soc)
165 (cot :type string :initarg :cot :reader cot)
166 (cof :type fixnum :initarg :cof :reader cof)
167 (coa :type string :initarg :coa :reader coa))
168 (:metaclass kmrcl::ml-class)
170 :cui1 nil :cui2 nil :pfstr2 nil :soc nil :cot nil :cof nil :coa nil)
171 (:title "Co-occuring Concept")
172 (:ref-fields (cui2 find-ucon-cui))
173 (:fields (soc :string) (cot :string) (cof :fixnum) (coa :cdata)
174 (cui2 :string fmt-cui) (pfstr2 :cdata)))
177 (defclass uatx (umlsclass)
178 ((sab :type string :initarg :sab :reader sab)
179 (rel :type string :initarg :rel :reader rel)
180 (atx :type string :initarg :atx :reader atx))
181 (:metaclass kmrcl::ml-class)
182 (:default-initargs :sab nil :rel nil :atx nil)
183 (:title "Associated Expression")
184 (:fields (sab :string) (rel :string) (atx :cdata)))
186 (defclass ucon (umlsclass)
187 ((cui :type fixnum :initarg :cui :reader cui )
188 (pfstr :initarg :pfstr :reader pfstr)
189 (lrl :initarg :lrl :reader lrl)
190 (s#term :reader s#term)
191 (s#def :reader s#def)
193 (s#rel :reader s#rel)
194 (s#coc :reader s#coc)
195 (s#sat :reader s#sat)
196 (s#atx :reader s#atx)
197 (s#sty :reader s#sty))
198 (:metaclass kmrcl::ml-class)
199 (:default-initargs :cui nil :pfstr nil :lrl nil)
202 (s#def udef) (s#sty usty) (s#lo ulo) (s#atx uatx) (s#sat usat) (s#rel urel)
203 (s#coc ucoc) (s#term uterm))
204 (:fields (cui :string fmt-cui) (lrl :fixum) (pfstr :cdata))
205 (:ref-fields (cui find-ucon-cui)))
207 (defclass uxw (umlsclass)
208 ((wd :type string :initarg :wd :reader wd)
209 (cui :type fixnum :initform nil :initarg :cui :reader cui)
210 (lui :type fixnum :initform nil :initarg :lui :reader lui)
211 (sui :type fixnum :initform nil :initarg :sui :reader sui))
212 (:metaclass kmrcl::ml-class)
213 (:default-initargs :wd nil :cui nil :lui nil :sui nil)
215 (:fields (wd :string) (cui :string fmt-cui) (lui :string fmt-lui)
216 (sui :string fmt-sui)))
218 (defclass uxnw (umlsclass)
219 ((lat :type string :initarg :lat :reader lat)
220 (nwd :type string :initarg :nwd :reader nwd)
221 (cuilist :type list :initarg :cuilist :reader uxnw-cuilist))
222 (:metaclass kmrcl::ml-class)
223 (:default-initargs :lat nil :nwd nil :cuilist nil)
225 (:fields (lat :string) (nwd :string) (cuilist :string)))
227 (defclass uxns (umlsclass)
228 ((lat :type string :initarg :lat :reader lat)
229 (nstr :type string :initarg :nstr :reader nstr)
230 (cuilist :type list :initarg :cuilist :reader cuilist))
231 (:metaclass kmrcl::ml-class)
232 (:default-initargs :lat nil :nstr nil :cuilist nil)
234 (:fields (lat :string) (nstr :string) (cuilist :string)))
239 (defclass lexterm (umlsclass)
240 ((eui :type fixnum :initarg :eui :reader eui)
241 (wrd :type string :initarg :wrd :reader wrd)
242 (s#abr :reader s#abr)
243 (s#agr :reader s#agr)
244 (s#cmp :reader s#cmp)
245 (s#mod :reader s#mod)
246 (s#nom :reader s#nom)
247 (s#prn :reader s#prn)
248 (s#prp :reader s#prp)
249 (s#spl :reader s#spl)
250 (s#trm :reader s#trm)
251 (s#typ :reader s#typ))
252 (:metaclass kmrcl::ml-class)
253 (:default-initargs :eui nil :wrd nil)
254 (:title "Lexical Term")
256 (s#abr labr) (s#agr lagr) (s#cmp lcmp) (s#mod lmod) (s#nom unom)
257 (s#prn lprn) (s#prp lprp) (s#spl lspl) (s#trm ltrm) (s#typ ltyp))
258 (:fields (eui :string fmt-eui) (wrd :string))
259 (:ref-fields (eui find-lexterm-eui)))
262 (defclass labr (umlsclass)
263 ((eui :type integer :initarg :eui :reader eui)
264 (bas :type string :initarg :bas :reader bas)
265 (abr :type string :initarg :abr :reader abr)
266 (eui2 :type integer :initarg :eui2 :reader eui2)
267 (bas2 :type string :initarg :bas2 :reader bas2))
268 (:metaclass kmrcl::ml-class)
269 (:default-initargs :eui nil :bas nil :abr nil :eui2 nil :bas2 nil)
270 (:title "Abbreviations and Acronyms")
271 (:fields (eui :string fmt-eui) (bas :string) (abr :string)
272 (eui2 :string fmt-eui) (bas2 :string )))
274 (defclass lagr (umlsclass)
275 ((eui :type integer :initarg :eui :reader eui)
276 (str :type string :initarg :str :reader str)
277 (sca :type string :initarg :sca :reader sca)
278 (agr :type string :initarg :agr :reader agr)
279 (cit :type string :initarg :cit :reader cit)
280 (bas :type string :initarg :bas :reader bas))
281 (:metaclass kmrcl::ml-class)
282 (:default-initargs :eui nil :str nil :sca nil :agr nil :cit nil :bas nil)
283 (:title "Agreement and Inflection")
284 (:fields (eui :string fmt-eui) (str :string) (sca :string) (agr :string)
285 (cit :string) (bas :string)))
287 (defclass lcmp (umlsclass)
288 ((eui :type integer :initarg :eui :reader eui)
289 (bas :type string :initarg :bas :reader bas)
290 (sca :type string :initarg :sca :reader sca)
291 (com :type string :initarg :com :reader com))
292 (:metaclass kmrcl::ml-class)
293 (:default-initargs :eui nil :bas nil :sca nil :com nil)
294 (:title "Complementation")
295 (:fields (eui :string fmt-eui) (bas :string) (sca :string) (com :string)))
297 (defclass lmod (umlsclass)
298 ((eui :type integer :initarg :eui :reader eui)
299 (bas :type string :initarg :bas :reader bas)
300 (sca :type string :initarg :sca :reader sca)
301 (psnmod :type string :initarg :psnmod :reader psnmod)
302 (fea :type string :initarg :fea :reader fea))
303 (:metaclass kmrcl::ml-class)
304 (:default-initargs :eui nil :bas nil :sca nil :psnmod nil :fea nil)
306 (:fields (eui :string fmt-eui) (bas :string) (sca :string) (psnmod :string)
309 (defclass lnom (umlsclass)
310 ((eui :type integer :initarg :eui :reader eui)
311 (bas :type string :initarg :bas :reader bas)
312 (sca :type string :initarg :sca :reader sca)
313 (eui2 :type integer :initarg :eui2 :reader eui2)
314 (bas2 :type string :initarg :bas2 :reader bas2)
315 (sca2 :type string :initarg :sca2 :reader sca2))
316 (:metaclass kmrcl::ml-class)
317 (:default-initargs :eui nil :bas nil :sca nil :eui2 nil :bas2 nil :sca2 nil)
318 (:title "Nominalizations")
319 (:fields (eui :string fmt-eui) (bas :string) (sca :string)
320 (eui2 :string fmt-eui) (bas2 :string) (sca2 :string)))
322 (defclass lprn (umlsclass)
323 ((eui :type integer :initarg :eui :reader eui)
324 (bas :type string :initarg :bas :reader bas)
325 (num :type string :initarg :num :reader num)
326 (gnd :type string :initarg :gnd :reader gnd)
327 (cas :type string :initarg :cas :reader cas)
328 (pos :type string :initarg :pos :reader pos)
329 (qnt :type string :initarg :qnt :reader qnt)
330 (fea :type string :initarg :fea :reader fea))
331 (:metaclass kmrcl::ml-class)
332 (:default-initargs :eui nil :bas nil :num nil :gnd nil :cas nil
333 :pos nil :qnt nil :fea nil)
335 (:fields (eui :string fmt-eui) (bas :string) (num :string) (gnd :string)
336 (cas :string) (pos :string) (qnt :string) (fea :string)))
338 (defclass lprp (umlsclass)
339 ((eui :type integer :initarg :eui :reader eui)
340 (bas :type string :initarg :bas :reader bas)
341 (str :type string :initarg :str :reader str)
342 (sca :type string :initarg :sca :reader sca)
343 (fea :type string :initarg :fea :reader fea))
344 (:metaclass kmrcl::ml-class)
345 (:default-initargs :eui nil :bas nil :str nil :sca nil :fea nil)
346 (:title "Properties")
347 (:fields (eui :string fmt-eui) (bas :string) (str :string) (sca :string)
351 (defclass lspl (umlsclass)
352 ((eui :type integer :initarg :eui :reader eui)
353 (spv :type string :initarg :spv :reader spv)
354 (bas :type string :initarg :bas :reader bas))
355 (:metaclass kmrcl::ml-class)
356 (:default-initargs :eui nil :spv nil :bas nil)
357 (:title "Spelling Variants")
358 (:fields (eui :string fmt-eui) (spv :string) (bas :string)))
362 (defclass ltrm (umlsclass)
363 ((eui :type integer :initarg :eui :reader eui)
364 (bas :type string :initarg :bas :reader bas)
365 (gen :type string :initarg :gen :reader gen))
366 (:metaclass kmrcl::ml-class)
367 (:default-initargs :eui nil :bas nil :gen nil)
368 (:title "Trade Marks")
369 (:fields (eui :string fmt-eui) (bas :string) (gen :string)))
371 (defclass ltyp (umlsclass)
372 ((eui :type integer :initarg :eui :reader eui)
373 (bas :type string :initarg :bas :reader bas)
374 (sca :type string :initarg :sca :reader sca)
375 (typ :type string :initarg :typ :reader typ))
376 (:metaclass kmrcl::ml-class)
377 (:default-initargs :eui nil :bas nil :sca nil :typ nil)
378 (:title "Inflection Type")
379 (:fields (eui :string fmt-eui) (bas :string) (sca :string) (typ :string)))
381 (defclass lwd (umlsclass)
382 ((wrd :type string :initarg :wrd :reader wrd)
383 (euilist :type list :initarg :euilist :reader euilist))
384 (:metaclass kmrcl::ml-class)
385 (:default-initargs :wrd nil :euilist nil)
386 (:title "Lexical Word Index")
387 (:fields (wrd :string) (euilist :string)))
389 ;;; Semantic NET objects
391 (defclass sdef (umlsclass)
392 ((rt :type string :initarg :rt :reader rt)
393 (ui :type integer :initarg :ui :reader ui)
394 (styrl :type string :initarg :styrl :reader styrl)
395 (stnrtn :type string :initarg :stnrtn :reader stnrtn)
396 (def :type string :initarg :def :reader def)
397 (ex :type string :initarg :ex :reader ex)
398 (un :type string :initarg :un :reader un)
399 (rh :type string :initarg :rh :reader rh)
400 (abr :type string :initarg :abr :reader abr)
401 (rin :type string :initarg :rin :reader rin))
402 (:metaclass kmrcl::ml-class)
404 :rt nil :ui nil :styrl nil :stnrtn nil :def nil :ex nil :un nil :rh nil
406 (:title "Basic information about Semantic Types and Relations")
408 (rt :string) (ui :string fmt-tui) (styrl :string) (stnrtn :string-tui)
409 (def :string) (ex :string) (un :string) (rh :string) (abr :string)
412 (defclass sstr (umlsclass)
413 ((styrl :type string :initarg :styrl :reader styrl)
414 (rl :type string :initarg :rl :reader rl)
415 (styrl2 :type string :initarg :styrl2 :reader styrl2)
416 (ls :type string :initarg :ls :reader ls))
417 (:metaclass kmrcl::ml-class)
418 (:default-initargs :styrl nil :rl nil :styrl2 nil :ls nil)
419 (:title "Structure of the Network")
420 (:fields (styrl :string) (rl :string) (styrl2 :string) (ls :string)))
422 (defclass sstre1 (umlsclass)
423 ((ui :type integer :initarg :ui :reader ui)
424 (ui2 :type integer :initarg :ui2 :reader ui2)
425 (ui3 :type integer :initarg :ui3 :reader ui3))
426 (:metaclass kmrcl::ml-class)
427 (:default-initargs :ui nil :ui2 nil :ui3 nil)
428 (:title "Fully Inherited Set of Releatons (TUI's)")
429 (:fields (ui :string fmt-tui) (ui2 :string fmt-tui) (ui3 :string fmt-tui)))
431 (defclass sstre2 (umlsclass)
432 ((sty :type string :initarg :ui :reader sty)
433 (rl :type string :initarg :ui2 :reader rl)
434 (sty2 :type string :initarg :ui3 :reader sty2))
435 (:metaclass kmrcl::ml-class)
436 (:default-initargs :sty nil :rl nil :sty2 nil)
437 (:title "Fully Inherited Set of Releatons (strings)")
438 (:fields (sty :string) (rl :string) (sty2 :string)))
440 ;;; Formatting routines
442 (defmethod fmt-cui ((c ucon))
443 (format nil "C~7,'0d" (cui c)))
445 (defmethod fmt-cui ((c fixnum))
446 (format nil "C~7,'0d" c))
448 (defmethod fmt-cui ((c string))
449 (if (eql (aref c 0) #\C)
451 (format nil "C~7,'0d" (parse-integer c))))
453 (defmethod fmt-cui ((c null))
456 (defmethod fmt-lui ((l uterm))
457 (format nil "L~7,'0d" (lui l)))
459 (defmethod fmt-lui ((l fixnum))
460 (format nil "L~7,'0d" l))
462 (defmethod fmt-lui ((l string))
463 (if (eql (aref l 0) #\L)
465 (format nil "L~7,'0d" (parse-integer l))))
467 (defmethod fmt-sui ((s ustr))
468 (format nil "S~7,'0d" (sui s)))
470 (defmethod fmt-sui ((s fixnum))
471 (format nil "S~7,'0d" s))
473 (defmethod fmt-sui ((s string))
474 (if (eql (aref s 0) #\S)
476 (format nil "S~7,'0d" (parse-integer s))))
478 (defmethod fmt-tui ((s fixnum))
479 (format nil "T~3,'0d" s))
481 (defmethod fmt-tui ((s string))
482 (if (eql (aref s 0) #\T)
484 (format nil "T~3,'0d" (parse-integer s))))
486 (defmethod fmt-eui ((e fixnum))
487 (format nil "E~7,'0d" e))
489 (defmethod fmt-eui ((e string))
490 (if (eql (aref e 0) #\E)
492 (format nil "E~7,'0d" (parse-integer e))))
494 (defmethod fmt-eui ((e null))
497 ;;; Generic display functions
499 (eval-when (:compile-toplevel :load-toplevel :execute)
500 (defun english-term-p (obj)
501 (and (eq (class-name (class-of obj)) 'uterm)
502 (string-equal (lat obj) "ENG"))))
504 (defun display-umls-obj
505 (obj &key (os *standard-output*) (format :text) (label nil)
506 (file-wrapper t) (english-only nil) (subobjects nil)
509 obj :os os :format format :label label :subobjects subobjects
510 :file-wrapper file-wrapper
511 :english-only-function (if english-only #'english-term-p nil)
514 (defmacro defludisp-ml-class (newfuncname lookup-func)
515 "Defines functions for looking up and displaying objects"
517 (keyval &key (os *standard-output*) (format :text) (label nil)
518 (file-wrapper t) (english-only nil) (subobjects nil))
519 (let ((obj (funcall ,lookup-func keyval)))
520 (display-umls-obj obj :os os :format format :label label
521 :file-wrapper file-wrapper :english-only english-only
522 :subobjects subobjects))))
524 (defludisp-ml-class disp-con #'find-ucon-cui)
525 (defludisp-ml-class disp-term #'find-uterm-lui)
526 (defludisp-ml-class disp-str #'find-ustr-sui)