chatter-0.4.0.0: appsrc/POSTrainer.hs
{-# LANGUAGE OverloadedStrings #-}
module POSTrainer where
import qualified Data.Map as Map
import qualified Data.Text as T
import qualified Data.Text.IO as T
import System.Environment (getArgs)
import qualified NLP.POS.AvgPerceptronTagger as Avg
import qualified NLP.POS.UnambiguousTagger as UT
import NLP.POS (saveTagger, train)
import NLP.Types (POSTagger, Error)
import NLP.Types.IOB
import qualified NLP.Corpora.Conll as C
main :: IO ()
main = do
args <- getArgs
let output = last args
corpora = init args
avgPerTagger :: POSTagger C.Tag
avgPerTagger = Avg.mkTagger Avg.emptyPerceptron Nothing
initTagger :: POSTagger C.Tag
initTagger = UT.mkTagger Map.empty (Just avgPerTagger)
rawCorpus <- mapM T.readFile corpora
let eCorpora :: Either Error [[IOBChunk C.Chunk C.Tag]]
eCorpora = parseIOB $ T.concat rawCorpus
case eCorpora of
Left err -> T.putStrLn err
Right taggedCorpora -> do
let taggedSentences = map toTaggedSentence taggedCorpora
tagger <- train initTagger taggedSentences
saveTagger tagger output