module NLP.GenI.Polarity.Types where
import qualified Data.Set as Set
import Data.Generics ( Data )
import Data.Typeable ( Typeable )
import Data.Text ( Text )
import qualified Data.Text as T
import Control.DeepSeq
import NLP.GenI.Pretty
data PolarityKey = PolarityKeyAv Text Text
| PolarityKeyStr Text
| PolarityKeyVar Text
deriving (Eq, Ord, Data, Typeable)
instance Pretty PolarityKey where
pretty (PolarityKeyAv a v) = a <> ":" <> v
pretty (PolarityKeyStr s) = s
pretty (PolarityKeyVar a) = a <> ":_"
type SemPols = [Int]
data PolarityAttr = SimplePolarityAttr { spkAtt :: Text }
| RestrictedPolarityAttr { _rpkCat :: Text, rpkAtt :: Text }
deriving (Eq, Ord, Typeable)
readPolarityAttrs :: String -> Set.Set PolarityAttr
readPolarityAttrs = Set.fromList . map helper . words
where
helper s = case break (== '.') s of
(a,"") -> SimplePolarityAttr (T.pack a)
(c,a) -> RestrictedPolarityAttr (T.pack c) (T.pack (drop 1 a))
showPolarityAttrs :: Set.Set PolarityAttr -> String
showPolarityAttrs = unwords . map show . Set.toList
instance Show PolarityAttr where
show (SimplePolarityAttr a) = T.unpack a
show (RestrictedPolarityAttr c a) = T.unpack c ++ "." ++ T.unpack a
instance NFData PolarityKey where
rnf (PolarityKeyAv x1 x2) = rnf x1 `seq` rnf x2 `seq` ()
rnf (PolarityKeyStr x1 ) = rnf x1 `seq` ()
rnf (PolarityKeyVar x1 ) = rnf x1 `seq` ()
instance NFData PolarityAttr where
rnf (SimplePolarityAttr x1) = rnf x1 `seq` ()
rnf (RestrictedPolarityAttr x1 x2) = rnf x1 `seq` rnf x2 `seq` ()