changeset 52:e0acd4c37121

n-gram fix darcs-hash:20070620160515-f76cc-af8dd2c245deac5551ef880abd8afe8b39f7c1e9.gz
author David Lewis <d.lewis@gold.ac.uk>
date Wed, 20 Jun 2007 17:05:15 +0100
parents 894fb5156603
children ce4a90427366
files utils/n-grams.lisp
diffstat 1 files changed, 5 insertions(+), 5 deletions(-) [+]
line wrap: on
line diff
--- a/utils/n-grams.lisp	Wed Jun 20 15:15:51 2007 +0100
+++ b/utils/n-grams.lisp	Wed Jun 20 17:05:15 2007 +0100
@@ -2,7 +2,7 @@
 
 (defun get-n-grams (state-sequence start-n &optional (finish-n nil) (test-for-duplicates nil))
   (let ((memory (make-array (or finish-n start-n) :initial-element :BLANK))
-	(pointer 0) (step 0) (prev-state)
+	(pointer 0) (step 1) (prev-state)
 	(n-grams (make-array (or finish-n start-n)
 			     :initial-element nil))
 	(current-sequence) (last-time))
@@ -13,8 +13,7 @@
 	(setf (aref memory pointer) state
 	      prev-state state
 	      current-sequence nil
-	      last-time nil
-	      step (1+ step))
+	      last-time nil)
 	(do ((i (mod (1+ pointer) (length memory)) (mod (1+ i) (length memory))))
 	    (last-time (setf current-sequence (reverse current-sequence)))
 	  (when (= pointer i)
@@ -22,7 +21,7 @@
 	  (push (aref memory i) current-sequence))
 	(setf pointer (mod (1+ pointer) (length memory)))
 	(loop for i from start-n to (or finish-n start-n)
-	   do (when (> step i)
+	   do (when (>= step i)
 		(unless (aref n-grams (1- i))
 		  (setf (aref n-grams (1- i)) (make-hash-table :test #'equal)))
 		(if (gethash (subseq current-sequence (- (or finish-n start-n) i))
@@ -31,7 +30,8 @@
 				   (aref n-grams (1- i))))
 		    (setf (gethash (subseq current-sequence (- (or finish-n start-n) i))
 				   (aref n-grams (1- i)))
-			  1))))))))
+			  1)))))
+      (incf step))))
 
 (defun get-n-gram (state-sequence n)
   (aref (get-n-grams state-sequence n) (1- n)))