{-# OPTIONS -XBangPatterns #-} module Main where import Prelude hiding (concat, filter) import qualified Data.Alpino.Model as AM import Data.Alpino.Model.Conduit import Data.Conduit (Sink, runResourceT, ($=), ($$)) import qualified Data.Conduit.Binary as CB import qualified Data.Conduit.List as CL import Data.List (genericLength) import System.IO (stdin) import Text.Printf (printf) statistics :: Monad m => Sink [AM.TrainingInstance] m (Int, Int, Int) statistics = CL.fold handleCtx (0, 0, 0) where handleCtx (!evts, !ctxs, !maxCtx) ctx = (evts + ctxLen, succ ctxs, max maxCtx ctxLen) where ctxLen = genericLength ctx main :: IO () main = do (evts, ctxs, maxCtx) <- runResourceT (CB.sourceHandle stdin $= CB.lines $= bsToTrainingInstance $= groupByKey $$ statistics) putStrLn $ "Contexts: " ++ (show ctxs) putStrLn $ "Max. events: " ++ (show maxCtx) putStrLn $ "Avg. events: " ++ (printf "%.2f" $ (fromIntegral evts / fromIntegral ctxs :: Double))