packages feed

chatter 0.0.0.3 → 0.0.0.4

raw patch · 7 files changed

+82/−7 lines, 7 files

Files

chatter.cabal view
@@ -1,5 +1,5 @@ name:                chatter-version:             0.0.0.3+version:             0.0.0.4 synopsis:            A library of simple NLP algorithms. description:         chatter is a collection of simple Natural Language                      Processing algorithms.@@ -143,6 +143,8 @@                      NLP.Similarity.VectorSimTests                      NLP.POSTests                      NLP.POS.UnambiguousTaggerTests+                     NLP.TypesTests+                     Data.DefaultMapTests                      Corpora                      TestUtils 
src/Data/DefaultMap.hs view
@@ -3,6 +3,7 @@  import Data.Map (Map) import qualified Data.Map as Map+import Data.Serialize  -- | Defaulting Map; a Map that returns a default value when queried -- for a key that does not exist.@@ -37,3 +38,8 @@ -- standard `Data.Map.foldl` foldl :: (a -> b -> a) -> a -> DefaultMap k b -> a foldl fn acc m = Map.foldl fn acc (defMap m)++-- | Serialize instance+instance (Ord k, Serialize k, Serialize v) => Serialize (DefaultMap k v) where+  get   = fmap (uncurry DefMap) (getTwoOf get get)+  put m = (putTwoOf put put) (defDefault m, defMap m)
src/NLP/POS.hs view
@@ -51,7 +51,7 @@  import NLP.Corpora.Parsing (readPOS) -import NLP.Types (TaggedSentence, Tag(..)+import NLP.Types (TaggedSentence, Tag(..), Sentence                  , POSTagger(..), tagUNK, stripTags)  import qualified NLP.POS.LiteralTagger as LT@@ -125,10 +125,14 @@ tag :: POSTagger -> Text -> [TaggedSentence] tag p txt = let sentences = (posSplitter p) txt                 tokens    = map (posTokenizer p) sentences-                priority  = (posTagger p) tokens-            in case posBackoff p of-                 Nothing  -> priority-                 Just tgr -> combine priority (tag tgr txt)+            in tagTokens p tokens++tagTokens :: POSTagger -> [Sentence] -> [TaggedSentence]+tagTokens p tokens = let priority = (posTagger p) tokens+                     in case posBackoff p of+                          Nothing  -> priority+                          Just tgr -> combine priority (tagTokens tgr tokens)+  -- | Combine the results of POS taggers, using the second param to -- fill in 'tagUNK' entries, where possible.
src/NLP/Types.hs view
@@ -7,7 +7,7 @@ import Data.ByteString (ByteString) import Data.Map (Map) import qualified Data.Map as Map-import Data.Serialize (Serialize, put, get)+import Data.Serialize (Serialize, put, get, getTwoOf, putTwoOf) import Data.Set (Set) import qualified Data.Set as Set import Data.Text (Text)@@ -98,6 +98,10 @@                      , corpTermCounts :: Map Text Int                      -- ^ A count of the number of documents each term occurred in.                      } deriving (Read, Show, Eq, Ord)++instance Serialize Corpus where+  get   = fmap (uncurry Corpus) (getTwoOf get get)+  put c = (putTwoOf put put) (corpLength c, corpTermCounts c)  -- | Get the number of documents that a term occurred in. termCounts :: Corpus -> Text -> Int
+ tests/src/Data/DefaultMapTests.hs view
@@ -0,0 +1,28 @@+module Data.DefaultMapTests where++import Test.QuickCheck (Arbitrary, arbitrary)+import Test.QuickCheck.Instances ()+import Test.Framework.Providers.QuickCheck2 (testProperty)+import Test.Framework ( testGroup, Test )++import Data.Serialize (decode, encode)++import Data.DefaultMap (DefaultMap(..), fromList)++tests :: Test+tests = testGroup "NLP.Data.DefaultMapTests"+        [ testGroup "Serialize / Deserialize Tests"+          [ testProperty "DefaultMap round-trips" prop_defMapSerialize+          ]+        ]++instance (Arbitrary k, Arbitrary v, Ord k) => Arbitrary (DefaultMap k v) where+  arbitrary = do+      def <- arbitrary+      entries <- arbitrary+      return $ fromList def entries++prop_defMapSerialize :: DefaultMap String String -> Bool+prop_defMapSerialize c = case (decode . encode) c of+                           Right c' -> c == c'+                           Left _ -> False
tests/src/Main.hs view
@@ -23,6 +23,8 @@ import qualified NLP.Similarity.VectorSimTests as Vec import qualified NLP.POSTests as POS import qualified NLP.POS.UnambiguousTaggerTests as UT+import qualified NLP.TypesTests as TypeTests+import qualified Data.DefaultMapTests as DefMap  import Corpora @@ -57,6 +59,8 @@         , Vec.tests         , POS.tests         , UT.tests+        , TypeTests.tests+        , DefMap.tests         ]  
+ tests/src/NLP/TypesTests.hs view
@@ -0,0 +1,27 @@+module NLP.TypesTests where++import Test.QuickCheck (Arbitrary, arbitrary)+import Test.QuickCheck.Instances ()+import Test.Framework.Providers.QuickCheck2 (testProperty)+import Test.Framework ( testGroup, Test )++import Data.Serialize (decode, encode)+import NLP.Types (mkCorpus, Corpus(..))+++tests :: Test+tests = testGroup "NLP.Types"+        [ testGroup "Serialize / Deserialize Tests"+          [ testProperty "Corpus round-trips" prop_corpusSerialize+          ]+        ]++instance Arbitrary Corpus where+  arbitrary = do+      docs <- arbitrary+      return $ mkCorpus docs++prop_corpusSerialize :: Corpus -> Bool+prop_corpusSerialize c = case (decode . encode) c of+                           Right c' -> c == c'+                           Left _ -> False