packages feed

chatter-0.0.0.3: tests/src/Bench.hs

{-# LANGUAGE PackageImports #-}
{-# LANGUAGE OverloadedStrings #-}
module Bench where

import Data.Text (Text)
import qualified Data.Text as T
import qualified Data.Text.IO as T

import Control.DeepSeq
import Criterion.Main
import Criterion.Config (defaultConfig, Config(..), ljust)
import Criterion (bench, bgroup, Benchmark)

import qualified "tokenize" NLP.Tokenize as StrTok
import qualified "chatter" NLP.Tokenize as TextTok
import NLP.POS (tagText)
import NLP.POS.AvgPerceptronTagger (trainNew, mkTagger)
import Corpora
import NLP.Corpora.Email

import qualified NLP.Similarity.VectorSimBench as VS

myConfig :: Config
myConfig = defaultConfig {
              -- Always GC between runs.
              cfgPerformGC = ljust True
            }

main :: IO ()
main = do
--  postagBench <- posTagging
  muc3_1 <- VS.muc3_01
  muc3_2 <- VS.muc3_02
  muc3_3 <- VS.muc3_03
  pTxt <- plugArchiveText
  let len = length pTxt
      plugTxt = take (len `div` 4) pTxt
      plugStr = map T.unpack plugTxt
  deepseq plugStr $ defaultMainWith myConfig (return ())
       [ bgroup "tokenizing"
                    [ bench "String Tokenizer" $ nf (map StrTok.tokenize) plugStr
                    , bench "Text Tokenizer" $ nf (map TextTok.tokenize) plugTxt
                    , bench "String Tokenizer" $ nf (map strTokenizer) plugTxt
                    ]

       --  bgroup "POS Tagging" [] -- postagBench
       -- , bgroup "Similarity" $ VS.benchmarks (muc3_1++muc3_2) muc3_3
       ]

strTokenizer :: Text -> [Text]
strTokenizer txt = map T.pack (StrTok.tokenize $ T.unpack txt)

-- posTagging :: IO [Benchmark]
-- posTagging = do
--   ca01 <- T.readFile brownCA01
--   ca02 <- T.readFile (brownCAFiles!!1)
--   let ca1_2 = T.unlines [ca01, ca02]
--   return [ bench "Train Brown ca01" $ trainNew ca01
--          , bench "Train & test Brown ca01" $ trainAndTag ca01 "the dog jumped"

--          , bench "Train Brown ca02" $ trainNew ca02
--          , bench "Train & test Brown ca02" $ trainAndTag ca02 "the dog jumped"

--          , bench "Train Brown ca01-02" $ trainNew ca1_2
--          , bench "Train & test Brown ca01-02" $ trainAndTag ca1_2 "the dog jumped"
--          ]

trainAndTag :: Text -> Text -> IO Text
trainAndTag corpus input = do
  tagger <- trainNew corpus
  return $ tagText (mkTagger tagger Nothing) input