chatter-0.5.1.0: tests/src/NLP/POSTests.hs
{-# LANGUAGE OverloadedStrings #-}
module NLP.POSTests where
import Test.QuickCheck.Instances ()
import Test.Tasty (TestTree, testGroup)
import Test.Tasty.QuickCheck (testProperty)
import qualified Data.Map as Map
import NLP.Types
import NLP.POS
import qualified NLP.POS.LiteralTagger as LT
import TestUtils
tests :: TestTree
tests = testGroup "NLP.POS"
[ testGroup "Evaluation" $ map (genTestF $ eval mamalTagger)
[ ("Half", [ TaggedSent [ (POS (RawTag "DT") "the"), (POS (RawTag "NN") "cat")]
, TaggedSent [ (POS (RawTag "DT") "the"), (POS (RawTag "NN") "dog")] ], 0.5)
, ("All ", [ TaggedSent [ (POS (RawTag "NN") "dog"), (POS (RawTag "NN") "cat")] ], 1.0)
, ("None", [ TaggedSent [ (POS (RawTag "DT") "the"), (POS (RawTag "NN") "couch")] ], 0)
]
, testGroup "Serialization"
[ testProperty "1 LiteralTagger" (prop_taggersRoundTrip mamalTagger)
, testProperty "2 LiteralTaggers" (prop_taggersRoundTrip animalTagger)
]
]
animalTagger :: POSTagger RawTag
animalTagger = LT.mkTagger (Map.fromList [("owl", RawTag "NN"), ("flea", RawTag "NN")]) LT.Sensitive (Just mamalTagger)
mamalTagger :: POSTagger RawTag
mamalTagger = LT.mkTagger (Map.fromList [("cat", RawTag "NN"), ("dog", RawTag "NN")]) LT.Sensitive Nothing
-- TODO need to make random taggers to really test this...
prop_taggersRoundTrip :: POSTagger RawTag -> String -> Bool
prop_taggersRoundTrip tgr input =
let Right roundTripped = (deserialize taggerTable $ serialize tgr) :: Either String (POSTagger RawTag)
in tagStr tgr ("cat owl " ++ input) == tagStr roundTripped ("cat owl " ++ input)