module NLP.Brillig where
import Control.Arrow ( second, (***) )
import qualified Data.Text as T
import qualified Data.Map as Map
import Data.Text ( Text )
newtype Tag = Tag { fromTag :: Text } deriving (Ord, Eq)
instance Show Tag where
show = show . fromTag
type Tagged a = (a, Tag)
type Count = Map.Map Text (Map.Map Tag Int)
readTag :: Text -> (Text, Tag)
readTag = (T.init *** Tag) . T.breakOnEnd "/"
showTag :: Tagged Text -> Text
showTag (w,t) = T.concat [ w, "/", fromTag t]
retag :: ([Tag] -> [Tag]) -> [Tagged Text] -> [Tagged Text]
retag f ts = zipWith replace newtags ts
where
newtags = f (map snd ts)
replace t2 (w,_) = (w, t2)