alpino-tools-0.0.4: src/model_oracle.hs
{-# OPTIONS -XBangPatterns #-}
module Main where
import Prelude hiding (concat, filter)
import Data.Alpino.Model.Enumerator
import Data.Enumerator hiding (isEOF, length)
import Data.List (genericLength)
import Text.Printf (printf)
sumCount :: (Monad m, Fractional a, Integral b) => Iteratee a m (a, b)
sumCount = continue $ step (0.0, 0)
where step acc (Chunks []) = continue $ step acc
step (!sumAcc, !lenAcc) (Chunks xs) =
continue $ step (sumAcc + sum xs, lenAcc + genericLength xs)
step acc EOF = yield acc EOF
main :: IO ()
main = do
(scoreSum, scoreLen) <- run_ $ lineEnum $$ joinI $ instanceParser $$
joinI $ groupByKey $$
joinI $ bestScore $$ sumCount
putStrLn $ "Contexts: " ++ (show scoreLen)
putStrLn $ "Oracle: " ++ (printf("%.4f") $ scoreSum / fromIntegral scoreLen)