- (cond
- ((char-equal #\C c)
- "Upper/lower case")
- ((char-equal #\W c)
- "Word order")
- ((char-equal #\S c)
- "Singular")
- ((char-equal #\P c)
- "Plural")
- ((char-equal #\O c)
- "Other"))))
-
-
-(defun ucon-parents (con &optional sab)
- (ucon-ancestors con sab t))
-
-(defun ucon-ancestors (ucon &optional sab single-level)
- "Returns a list of ancestor lists for a concept"
- (let* ((parent-rels (filter-urels-by-rel (s#rel ucon) "par"))
- (anc nil))
- (when sab
- (setq parent-rels (delete-if-not
- (lambda (rel) (string-equal sab (sab rel)))
- parent-rels)))
- (dolist (rel parent-rels (nreverse anc))
- (let ((parent (find-ucon-cui (cui2 rel))))
- (push
- (if single-level
- (list parent)
- (list* parent (car (ucon-ancestors parent (sab rel) nil))))
- anc)))))
-
-(defgeneric cxt-ancestors (obj))
-(defmethod cxt-ancestors ((con ucon))
- (loop for term in (s#term con)
- append (cxt-ancestors term)))
-
-
-(defmethod cxt-ancestors ((term uterm))
- (loop for str in (s#str term)
- append (cxt-ancestors str)))
-
-(defmethod cxt-ancestors ((str ustr))
- "Return the ancestory contexts of a ustr"
- (let* ((anc (remove-if-not
- (lambda (cxt) (string-equal "ANC" (cxl cxt)))
- (s#cxt str)))
- (num-contexts (if anc
- (apply #'max (mapcar (lambda (cxt) (cxn cxt)) anc))
- 0))
- (anc-lists '()))
- (dotimes (i num-contexts (nreverse anc-lists))
- (let* ((anc-this-cxn (remove-if-not
- (lambda (cxt) (= (1+ i) (cxn cxt))) anc)))
- (push
- (sort anc-this-cxn (lambda (a b) (< (rank a) (rank b))))
- anc-lists)))))