Created
January 18, 2015 19:47
-
-
Save Newlifer/46c76cd5a0b5ccc00eca to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{-# LANGUAGE OverloadedStrings #-} | |
import Text.Printf | |
import Control.Monad | |
import Data.Char | |
import Data.List | |
import System.IO | |
import Codec.Binary.UTF8.String (utf8Encode) | |
import qualified Data.Text.Encoding as T | |
levenshtein s1 s2 = last $ foldl (transform s1) [0..length s1] s2 where | |
transform str xs@(x:xs') c = res where | |
res = x + 1 : zipWith4 compute str xs xs' res | |
compute c' x y z = minimum [y + 1, z + 1, x + if c' == c then 0 else 1] | |
getLines = liftM lines . readFile | |
textRepresentation row = foldl (\acc y -> acc ++ (show y) ++ " ") "" row | |
removeNonLetters = filter isLetter | |
filterString :: [Char] -> [Char] | |
filterString a = unwords ( map removeNonLetters ( words a ) ) | |
{- | |
types = [ | |
"производство, хранение и поставки произведенного этилового спирта, в том числе денатурата" | |
,"производство, хранение и поставки произведенной алкогольной и спиртосодержащей пищевой продукции" | |
,"хранение этилового спирта, алкогольной и спиртосодержащей пищевой продукции" | |
,"закупка, хранение и поставки алкогольной и спиртосодержащей продукции" | |
,"производство, хранение и поставки спиртосодержащей непищевой продукции" | |
,"розничная продажа алкогольной продукции" | |
,"перевозки этилового спирта (в том числе денатурата) и нефасованной спиртосодержащей продукции с содержанием этилового спирта более 25 процентов объема готовой продукции" | |
] | |
-} | |
types = [ | |
"производство, хранение и поставки произведенного этилового спирта, в том числе денатурата" | |
,"производство, хранение и поставки произведенной алкогольной и спиртосодержащей пищевой продукции" | |
,"хранение этилового спирта, алкогольной и спиртосодержащей пищевой продукции" | |
,"закупка хранение и поставки" | |
,"спиртосодержащей непищевой" | |
,"розничная" | |
,"перевозки этилового спирта" | |
] | |
printTuple x = printf "%s %s\n" ( textRepresentation $ fst x ) ( snd x ) | |
singlePass :: [String] -> String -> [Int] | |
singlePass x y = map ( levenshtein y ) x | |
main = do | |
list <- getLines "H:\\development\\haskell\\rec\\source.txt" | |
let filtred_list = map filterString list | |
let filtred_types = map filterString types | |
let result = map ( singlePass filtred_types ) filtred_list | |
mapM_ printTuple ( sortBy ( \a b -> compare ( snd a ) ( snd b ) ) ( zip result filtred_list ) ) | |
putStrLn "end" |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment