File tree 4 files changed +35
-25
lines changed
4 files changed +35
-25
lines changed Original file line number Diff line number Diff line change 1
- {:paths [" src" " resources" ]
2
- :deps {org.clojure/clojure {:mvn/version " 1.10.0" }}
3
- :aliases {:test {:extra-paths [" test" " dev" ]
4
- :extra-deps {org.clojure/test.check {:mvn/version " 0.9.0" }}
5
- :main-opts [" -m" " cognitect.test-runner" ]}}
6
- :mvn/repos {" central" {:url " https://repo1.maven.org/maven2/" }
7
- " clojars" {:url " https://clojars.org/repo" }}}
1
+ {:paths [" src" " resources" ],
2
+ :deps
3
+ {org.clojure/clojure #:mvn{:version " 1.10.0" },
4
+ org.apache.commons/commons-text #:mvn{:version " 1.6" }},
5
+ :aliases
6
+ {:test
7
+ {:extra-paths [" test" " dev" ],
8
+ :extra-deps #:org.clojure{test.check #:mvn{:version " 0.9.0" }},
9
+ :main-opts [" -m" " cognitect.test-runner" ]}},
10
+ :mvn/repos
11
+ {" central" {:url " https://repo1.maven.org/maven2/" },
12
+ " clojars" {:url " https://clojars.org/repo" }}}
Original file line number Diff line number Diff line change 13
13
slurp
14
14
split-at-line-breaks
15
15
(mapcat #(string/split % #"-" ))
16
+ (filter #(>= (count %) 2 ))
17
+ (map string/lower-case)
16
18
set))
17
19
18
20
(defonce words (build-dictionary pt-br))
Original file line number Diff line number Diff line change 1
- (ns spell-checker.levenshtein )
1
+ (ns spell-checker.levenshtein
2
+ (:import (org.apache.commons.text.similarity LevenshteinDistance)))
2
3
3
- (defn- cost [word-a word-b]
4
- (if (= (last word-a) (last word-b))
5
- 0
6
- 1 ))
4
+ (def ^:private levenshtein (LevenshteinDistance. ))
7
5
8
- (declare distance )
9
- (defn- distance* [word-a word-b]
10
- (let [cost (cost word-a word-b)]
11
- (min
12
- (inc (distance (subs word-a 0 (dec (count word-a))) word-b))
13
- (inc (distance word-a (subs word-b 0 (dec (count word-b)))))
14
- (+ cost (distance (subs word-a 0 (dec (count word-a))) (subs word-b 0 (dec (count word-b))))))))
15
-
16
- (defn- distance [word-a word-b]
17
- (cond
18
- (empty? word-a) (count word-b)
19
- (empty? word-b) (count word-a)
20
- :else (distance* word-a word-b)))
6
+ (defn distance [word-a word-b]
7
+ (.apply levenshtein word-a word-b))
Original file line number Diff line number Diff line change
1
+ (ns spell-checker.solution
2
+ (:require [spell-checker.dictionary :as dictionary]
3
+ [spell-checker.levenshtein :as levenshtein]))
4
+
5
+ (defn check-spelling [dict word]
6
+ (if (dict word)
7
+ {:result :correct-word }
8
+ {:result :misspelled-word
9
+ :suggestion (apply min-key (partial levenshtein/distance word) dict)}))
10
+
11
+ (comment
12
+ " Evaluate the forms bellow to see the results"
13
+ (check-spelling dictionary/words " cavalo" )
14
+ (check-spelling dictionary/words " viajem" )
15
+ (check-spelling dictionary/words " viajen" )
16
+ (check-spelling dictionary/words " vakaa" ))
You can’t perform that action at this time.
0 commit comments