15/11/01 21:25:08.29 srdwxzCV.net
>>78
fもお願いします。
ここでは、たとえばtrigramを考えていました。
もっとよい実装があればお願いします。
(defun trigram (s1 s2)
(flet ((decompose
(s)
(let* ((l (length s))
(n (if (>= l 3) (- l 3) 0))
(j (if (>= l 3) 3 l)))
(loop for i from 0 to n collect (substring s i (+ i j))))))
(let ((l1 (decompose s1))
(l2 (decompose s2)))
(let ((s1l2 (loop for i in l2 sum (funcall #'(lambda () (if (search i s1) 1 0)))))
(s2l1 (loop for i in l1 sum (funcall #'(lambda () (if (search i s2) 1 0))))))
(/ (+ s1l2 s2l1) (float (+ (length l1) (length l2))))))))
>>79
gは、たとえば『列の各要素間の類似度に比例し距離の二乗に反比例する値の総和が最大になるような列に整列する関数』を考えていました。
もっとよい実装があればお願いします。