Spell Check

Me: write a spell checker in scheme that implements suggestions of corrections using the levenstein distance

ChatGPT:

(define (levenstein-distance str1 str2)
  (define (min3 a b c)
    (min (min a b) c))

  (define (lev-distance str1-len str2-len)
    (if (or (= str1-len 0) (= str2-len 0))
        (max str1-len str2-len)
        (let ((cost (if (char=? (string-ref str1 (sub1 str1-len))
                                (string-ref str2 (sub1 str2-len)))
                        0
                        1)))
          (min3 (lev-distance str1-len (sub1 str2-len))
                (lev-distance (sub1 str1-len) str2-len)
                (lev-distance (sub1 str1-len) (sub1 str2-len)
                              (+ cost))))))
  (lev-distance (string-length str1) (string-length str2)))

(define (spell-checker dictionary word)
  (let ((min-distance 100)
        (closest-word ""))
    (map (lambda (dict-word)
           (let ((distance (levenstein-distance dict-word word)))
             (when (< distance min-distance)
               (set! min-distance distance)
               (set! closest-word dict-word))))
         dictionary)
    closest-word))

(define dictionary '("hello" "world" "scheme" "levenstein" "distance"))

(spell-checker dictionary "worl")
;; Returns: "world"

(spell-checker dictionary "distnace")
 ;; Returns: "distance"

(spell-checker dictionary "schme")
;; Returns: "scheme"

links

social