sequor-0.1: src/Main.hs
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"