From 421b3e4681ac8974d750897d808ab10ff9ea2dc8 Mon Sep 17 00:00:00 2001 From: IGI-111 Date: Tue, 7 Apr 2015 14:28:40 +0000 Subject: [PATCH] various improvements, corrected logic errors --- ExtractRules.hs | 4 ++-- phase1.hs | 4 ++-- phase2.hs | 25 +++++++++++++++++-------- 3 files changed, 21 insertions(+), 12 deletions(-) diff --git a/ExtractRules.hs b/ExtractRules.hs index 50b3727..1299ea3 100644 --- a/ExtractRules.hs +++ b/ExtractRules.hs @@ -6,8 +6,8 @@ import qualified Data.Set as Set import qualified Data.Map as Map import Data.Map(Map) -extractRules :: Confidence -> [ItemSet] -> [Rule] -extractRules threshold patterns = filter (\x -> threshold <= confidence patterns x) rules where +extractRules :: Confidence -> [ItemSet] -> [ItemSet] -> [Rule] +extractRules threshold table patterns = filter (\x -> threshold <= confidence table x) rules where rules = Map.foldrWithKey (\k v old -> ruleFromSubset v k : old) [] subsets subsets = foldr (\x old -> insertMultiple (filteredPowerset x) x old) Map.empty patterns filteredPowerset (ItemSet set) = map (ItemSet . Set.fromList) $ diff --git a/phase1.hs b/phase1.hs index 500617a..aa56fe7 100644 --- a/phase1.hs +++ b/phase1.hs @@ -18,8 +18,8 @@ main = do Right val -> do let table = map (ItemSet. Set.fromList .map Item) val let freqPats = concat (frequentPatterns threshold table) - let output = formatToCSV table freqPats - putStrLn output + let output = formatToCSV table freqPats + putStrLn output when (length args > 2) $ writeFile (args !! 2) $ output diff --git a/phase2.hs b/phase2.hs index 7240594..c126122 100644 --- a/phase2.hs +++ b/phase2.hs @@ -8,12 +8,21 @@ import Control.Monad(when) main :: IO() main = do args <- getArgs - when (2 /= length args) (error "Usage: phase2 ") - let filename = head args + when (3 /= length args) (error "Usage: phase2 ") let threshold = read $ last args - file <- readFile filename - case parseCSV file of - Left _ -> error "Could not parse out.csv" - Right val -> do - let table = map (ItemSet. Set.fromList .map Item) val - print $ extractRules threshold table + tableFile <- readFile $ head args + freqFile <- readFile $ args !! 1 + case parseCSV tableFile of + Left _ -> error "Could not parse table" + Right tableFileContent -> + case parseCSV freqFile of + Left _ -> error "Could not parse frequent patterns" + Right freqFileContent -> do + putStrLn output + when (length args > 2) $ + writeFile (args !! 2) $ output + where + freqPats = map (ItemSet. Set.fromList .map Item) (map tail freqFileContent) + table = map (ItemSet. Set.fromList .map Item) tableFileContent + rules = extractRules threshold table freqPats + output = init $ foldr (\x old -> old++x++"\n") "" $ map show rules