bitte Hilfe entziffern diesem Lisp-Extrakt
-
28-09-2019 - |
Frage
(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)))))))))
Lösung
Was ist das Problem? Es ist fast einfaches Englisch:
Let g
kann der Wert von word
in der Hash-Tabelle good
(oder 0, wenn nicht existent dort) mal 2
(let ((g (* 2 (or (gethash word good) 0)))
und b
den Wert von word
in der Hash-Tabelle bad
(oder 0, wenn nicht existent dort).
(b (or (gethash word bad) 0)))
Vor diesem Hintergrund und unter der Annahme, dass die Summe der g
und b
ist nicht kleiner als 5
(unless (< (+ g b) 5)
gibt die maximal entweder 0,01 oder
(max .01
das Minimum von entweder 0,99 oder
(min .99
b
/ nbad
dividiert durch die Summe aus b
/ nbad
und g
/ ngood
(als ein Gleitkommawert, und diese einzelnen Quotienten sollte höchstens 1 sein).
(float (/ (min 1 (/ b nbad))
(+ (min 1 (/ g ngood))
(min 1 (/ b nbad)))))))))
Andere Tipps
Sieht aus wie es versucht, eine Punktzahl zu berechnen, basierend auf der Anwesenheit von word
in der die Hash-Tabellen good
und bad
.
Wenn das Wort existiert nicht in einer Hash-Tabelle einen Wert von 0 gegeben ist, andernfalls, wenn es in der guten Tabelle existiert es durch 2 (verdoppelt) gewichtet wird.
Wenn die Gäste weniger als 5 berechnet die Partitur (Abschnitt unter unless
) wie folgt:
score = min(1, b/nbad) / (min(1, g/ngood) + min(1, b/nbad))
max(0.01, min(0.99, score))
Ich bin nicht sicher, was ngood
und nbad
sind aber dann zeigt n für mich sind sie wahrscheinlich zählt. Es sieht auch wie der Code wird der berechnete Wert unter 5. hält auch wie in der Score-Berechnung Es sieht der Nenner auf maximal 2 hält die unter die Partitur bis 0,5 gebunden gehalten wird.
Auf der Basis der Tags, die Sie verwendet haben, würde ich denke (und es ist nur eine Vermutung), dass es versucht, eine Gewichtung für Wort zu berechnen, basierend auf einer Art von Frequenz (?) Das Zählen des Wortes in Gut und schlecht E-Mail.