diff --git a/DataModel.hs b/DataModel.hs index fffeb07..2aab73a 100644 --- a/DataModel.hs +++ b/DataModel.hs @@ -42,7 +42,7 @@ empty = ItemSet (Set.fromList []) data Rule = Rule ItemSet ItemSet deriving (Eq) instance Show Rule where - show (Rule a b) = show a ++ "->" ++ show b + show (Rule a b) = show a ++ "," ++ show b instance Freq Rule where frequency table (Rule (ItemSet set1) (ItemSet set2)) = frequency table $ diff --git a/phase2.hs b/phase2.hs index fc98a22..e9a098c 100644 --- a/phase2.hs +++ b/phase2.hs @@ -2,6 +2,7 @@ import CSVParser import DataModel import ExtractRules import qualified Data.Set as Set +import qualified Data.List as List import System.Environment(getArgs) import Control.Monad(when) @@ -9,7 +10,7 @@ main :: IO() main = do args <- getArgs when (3 > length args) (error "Usage: phase2 table.csv frequents.csv threshold [out.assoc]") - let threshold = read $ last args + let threshold = read $ args !! 2 tableFile <- readFile $ head args freqFile <- readFile $ args !! 1 case parseCSV tableFile of @@ -18,13 +19,12 @@ main = do case parseCSV freqFile of Left _ -> error "Could not parse frequent patterns" Right freqFileContent -> do - --putStrLn output - print $ zip rules (map (lift table) rules) + print $ zip rules $ map (lift table) rules when (length args > 3) $ writeFile (args !! 3) output where freqPats = map ((ItemSet. Set.fromList .map Item) . tail) freqFileContent table = map (ItemSet. Set.fromList .map Item) tableFileContent - rules = extractRules threshold table freqPats - output = init $ foldr ((\x old -> old++x++"\n").show) "" rules + rules = List.sortBy (\x y -> compare (lift table y) (lift table x)) $ extractRules threshold table freqPats + output = init $ foldr ((\x old -> old ++ x ++ "\n").show) "" $ take 10 rules