пожалуйста, помогите расшифровать этот экстракт LISP - PullRequest
3 голосов
/ 01 ноября 2010
(let ((g (* 2 (or (gethash word good) 0)))
      (b (or (gethash word bad) 0)))
   (unless (< (+ g b) 5)
     (max .01
          (min .99 (float (/ (min 1 (/ b nbad))
                             (+ (min 1 (/ g ngood))   
                                (min 1 (/ b nbad)))))))))

Ответы [ 2 ]

6 голосов
/ 01 ноября 2010

В чем проблема? Это почти простой английский:

Пусть g будет значением word в хеш-таблице good (или 0, если там не существует), умноженным на 2

(let ((g (* 2 (or (gethash word good) 0)))

и b значение word в хеш-таблице bad (или 0, если там не существует).

      (b (or (gethash word bad) 0)))

С учетом этого и исходя из предположения, что сумма g и b не меньше 5

   (unless (< (+ g b) 5)

возвращает максимум либо 0,01, либо

     (max .01

минимум 0,99 или

          (min .99 

b / nbad, деленное на сумму b / nbad и g / ngood (в качестве значения с плавающей запятой, и эти индивидуальные коэффициенты должны быть не более 1).

               (float (/ (min 1 (/ b nbad))
                         (+ (min 1 (/ g ngood))   
                            (min 1 (/ b nbad)))))))))
2 голосов
/ 01 ноября 2010

Похоже, что он пытается вычислить оценку на основе присутствия word в хеш-таблицах good и bad.

Если слово не существует в хеш-таблице, оноему присваивается значение 0, в противном случае, если оно существует в хорошей таблице, оно взвешивается на 2 (удвоено).

Если оценка меньше 5, рассчитайте оценку (часть ниже unless) следующим образом:

score = min(1, b/nbad) / (min(1, g/ngood) + min(1, b/nbad))
max(0.01, min(0.99, score))

Я не уверен, что такое ngood и nbad, но тогда n указывает мне, что они, вероятно, считаются.Выглядит так, как будто код сохраняет рассчитанную оценку ниже 5. Так же, как и при расчете оценки, знаменатель будет поддерживаться на максимуме 2, сохраняя нижнюю границу оценки до 0,5.

На основетеги, которые вы использовали, я бы предположил (и это всего лишь предположение), что он пытается вычислить вес для слова, основываясь на некоторой частоте (?) подсчета слова в хорошем или плохом электронном письме.

...