やろーじだい

ブログと技術メモです。なにかあればより詳細に書こうということで最初は雑に書くようにしています。質問・要望等あれば Twitter かコメントに下さい。

Clojure でキーワードのスペルミスを検知して最も近いキーワードを表示する

やりたいこと

あらかじめキーワードを登録しておいて、それ以外のキーワードを使ってしまっている map をテストして、間違ったキーワードがある場合は登録してある最も近いキーワードを表示したい。

check.core> (def x {:foo 123 :baa 234})
check.core> (def ks #{:foo :bar})

check.core> (check-keywords-of-map x ks)
AssertionError Assert failed: Don't exist keyword :baa, do you mean :bar?

check.core> (check-keywords-of-map x #{:fo :ba})
AssertionError Assert failed: Don't exist keyword :foo, do you mean :fo?

check.core> (check-keywords-of-map x #{:foo :hoge})
AssertionError Assert failed: Don't exist keyword :baa, do you mean :foo?

方法

ライブラリ clj-fuzzy にある levenshtein を用いる。