;;;; lift-search.lisp

(in-package #:cl-bible)

(defun frequent-words () (str:words "der die das dir mir wir ihr sie sein mein dein euer unser dem den in zu und"))

(defun lift-search (search-result)
  (comb (diff-verses (mapcar (lambda (verse) (nth 5 verse))
                             search-result))
        (length search-result)))

(defun count-words (words)
  (let (result)
    (mapc (lambda (word)
            (if (assoc word result :test #'string=)
                (incf (cdr (assoc word result :test #'string=)))
                (setf result (acons word 1 result))))
          words)
    (sort result (lambda (x y)
                   (> (cdr x) (cdr y))))))

(defun diff-verses (verses)
  (count-words (remove-if (lambda (word) (member word
                                                 (frequent-words)
                                                 :test #'string=))
                          (mapcan #'str:words verses))))

(defun comb (freqs length)
  (remove-if (lambda (word)
               (< (cdr word) (* 0.25 length)))
             freqs))
