Skip to content

Instantly share code, notes, and snippets.

@dmikis
Created April 22, 2012 20:41
Show Gist options
  • Save dmikis/2466750 to your computer and use it in GitHub Desktop.
Save dmikis/2466750 to your computer and use it in GitHub Desktop.
Jaccard Coefficients
(defconstant +main-set-length+ 1000)
(defconstant +subset-length+ 129)
(defconstant +subsets-quantity+ 1000)
(defun create-first-set ()
(let ((*set* (make-array +main-set-length+ :fill-pointer 0)))
(dotimes (i +main-set-length+)
(vector-push (random 1000) *set*))
(return-from create-first-set *set*)))
(defun get-subset (set)
(let ((*subset* (make-array +subset-length+ :fill-pointer 0)))
(dotimes (i +subset-length+)
(vector-push (elt set (random +main-set-length+)) *subset*))
(return-from get-subset *subset*)))
(defun get-subsets (set)
(let ((*subsets* (make-array +subsets-quantity+ :fill-pointer 0)))
(dotimes (i +subsets-quantity+)
(vector-push (get-subset set) *subsets*))
(return-from get-subsets *subsets*)))
(defun sets-intersection (first-set second-set)
(remove ()
(map 'vector
(lambda (item)
(find item second-set))
first-set)))
(defun jaccard-index (first-set second-set)
(let ((isection (sets-intersection first-set second-set)))
(/ (length (sets-intersection first-set second-set))
(+ (length first-set)
(length second-set)
(- (length (sets-intersection first-set second-set)))))))
(defvar *sets* (get-subsets (create-first-set)))
(dotimes (i +subsets-quantity+)
(do ((j i (1+ j)))
((>= i +subsets-quantity+))
(format t
"~D ~D ~F~%"
i j
(jaccard-index (elt *sets* i)
(elt *sets* j)))))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment