packages feed

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"