20 lines
449 B
Haskell
20 lines
449 B
Haskell
module Text.AlphabetDistance (
|
|
distance
|
|
, norm
|
|
) where
|
|
|
|
import Data.Char (toLower)
|
|
|
|
rank :: Char -> Int
|
|
rank c = 1 + fromEnum (toLower c) - fromEnum 'a'
|
|
|
|
norm :: String -> Float
|
|
norm "" = 0
|
|
norm (c:cs) = (fromIntegral (rank c) + norm cs) / 27
|
|
|
|
distance :: String -> String -> Float
|
|
distance "" "" = 0
|
|
distance "" s = norm s
|
|
distance s "" = norm s
|
|
distance (ca:sa) (cb:sb) = (abs $ fromIntegral (rank ca - rank cb) + distance sa sb) / 27
|