:lrl 'klrl :order '(cui asc))
(find-ucon-cui cui :srl srl)))
+(defun find-uconso-word (word &key (srl *current-srl*) (like nil))
+ "Return list of uconso objects that match word. Optionally, use SQL's LIKE syntax"
+ (collect-umlisp-query-eval ('mrxw_eng '(cui) srl 'wd word :like like :distinct t
+ :lrl 'klrl :order '(cui asc))
+ (find-uconso-cui cui :srl srl)))
+
+(defun mrconso-query-word-cui (word sab srl like)
+ (format nil "SELECT c.cui FROM MRCONSO c,MRXW_ENG x WHERE x.WD ~A '~A' AND x.cui=c.cui AND ~A ~A"
+ (if like "LIKE" "=")
+ (clsql-sys::sql-escape-quotes word)
+ (etypecase sab
+ (string
+ (format nil " c.sab='~A'" (clsql-sys::sql-escape-quotes sab)))
+ (cons
+ (format nil " c.sab IN (~{'~A'~^,~})"
+ (mapcar 'clsql-sys::sql-escape-quotes sab)))
+ (null
+ (error "SAB missing")))
+ (if srl (format nil "AND KCUILRL <= ~A" srl) "")))
+
+(defun find-uconso-word-sab (word &key sab (srl *current-srl*) (like nil))
+ "Return list of uconso that match word in matching SAB. Optionally, use SQL's LIKE syntax"
+ (let ((query (mrconso-query-word-cui word sab srl like)))
+ (loop for cui in (remove-duplicates (sort (mapcar 'car (mutex-sql-query query)) #'<))
+ collect (find-uconso-cui cui))))
+
(defun find-ucon-word-sab (word &key sab (srl *current-srl*) (like nil))
- "Return list of ustr that match word in matching SAB. Optionally, use SQL's LIKE syntax"
- (let ((query (format nil "SELECT c.cui FROM MRCONSO c,MRXW_ENG x WHERE x.WD ~A '~A' AND x.cui=c.cui AND ~A ~A"
- (if like "LIKE" "=")
- (clsql-sys::sql-escape-quotes word)
- (etypecase sab
- (string
- (format nil " c.sab='~A'" (clsql-sys::sql-escape-quotes sab)))
- (cons
- (format nil " c.sab IN (~{'~A'~^,~})"
- (mapcar 'clsql-sys::sql-escape-quotes sab)))
- (null
- (error "SAB missing")))
- (if srl (format nil "AND KCUILRL <= ~A" srl) ""))))
+ "Return list of ucon that match word in matching SAB. Optionally, use SQL's LIKE syntax"
+ (let ((query (mrconso-query-word-cui word sab srl like)))
(loop for tuple in (mutex-sql-query query)
collect (make-instance 'ucon :cui (first tuple)))))
(find-uobj-multiword str #'find-ucon-word #'sort-score-pfstr-str
#'cui srl only-exact-if-match limit)))
+(defun find-uconso-multiword (str &key (srl *current-srl*)
+ (only-exact-if-match t)
+ limit
+ sab)
+ (if sab
+ (find-uobj-multiword str #'find-uconso-word-sab #'sort-score-pfstr-str
+ #'cui srl only-exact-if-match limit
+ :extra-lookup-args (list :sab sab))
+ (find-uobj-multiword str #'find-uconso-word #'sort-score-pfstr-str
+ #'cui srl only-exact-if-match limit)))
+
(defun find-uterm-multiword (str &key (srl *current-srl*)
(only-exact-if-match t)
limit)