module Main (main) where import Labeler (Config(..),ModelData(..) ,train,predict) import CorpusReader (corpus,corpusLabeled) import qualified Text import qualified Data.Binary as Binary import System.Environment (getArgs) import System.IO (hPutStrLn,stderr) import FeatureTemplate (parse) main :: IO () main = do (command:args) <- getArgs case command of "train" -> do let [ templatef ,rate ,beamp ,limit ,mincount ,trainf ,testf ,outf ] = args template <- parse `fmap` Text.readFile templatef traindat <- fmap corpusLabeled $ Text.readFile trainf testdat <- fmap corpusLabeled $ Text.readFile testf let conf = Config { featureTemplate = template , wordMinCount = read mincount , atomTable = error "main:Config.atomTable undefined" , minLabelFreq = 1 } Text.writeFile outf . Binary.encode . train conf (read rate) (read limit) (read beamp) traindat $ testdat "predict" -> do let [modelf] = args m <- fmap Binary.decode (Text.readFile modelf) testdat <- fmap corpus $ Text.getContents Text.putStr . Text.unlines . map Text.unlines . predict m $ testdat _ -> hPutStrLn stderr "Invalid command"