packages feed

chatter-0.4.0.0: appsrc/ChunkTrainer.hs

{-# LANGUAGE OverloadedStrings #-}
module ChunkTrainer where

import qualified Data.Text as T
import qualified Data.Text.IO as T
import System.Environment (getArgs)

import NLP.POS.AvgPerceptron (emptyPerceptron)
import qualified NLP.Chunk.AvgPerceptronChunker as Avg
import NLP.Chunk (train, saveChunker)
import NLP.Types.IOB

import qualified NLP.Corpora.Conll as C

main :: IO ()
main = do
  args <- getArgs
  let output = last args
      corpora = init args

      avgPerChunker :: Avg.Chunker C.Chunk C.Tag
      avgPerChunker = Avg.mkChunker emptyPerceptron

  rawCorpus <- mapM T.readFile corpora
  let eChunkedCorpora = parseIOB $ T.concat rawCorpus
  case eChunkedCorpora of
    Left err -> T.putStrLn err
    Right chunkedCorpora -> do
      chunker <- train avgPerChunker $ map toChunkTree chunkedCorpora
      saveChunker chunker output