crf-chain1-constrained-0.2.0: src/Data/CRF/Chain1/Constrained/Feature/Hidden.hs
-- | The module provides feature selection functions which extract
-- hidden features, i.e. all features which can be constructed
-- on the basis of observations and potential labels (constraints)
-- corresponding to individual words.
--
-- You can mix functions defined here with the selection functions
-- from the "Data.CRF.Chain1.Constrained.Feature.Present" module.
module Data.CRF.Chain1.Constrained.Feature.Hidden
( hiddenFeats
, hiddenOFeats
, hiddenTFeats
, hiddenSFeats
) where
import qualified Data.Vector as V
import Data.CRF.Chain1.Constrained.Dataset.Internal
import Data.CRF.Chain1.Constrained.Feature
-- | Hidden 'OFeature's which can be constructed based on the dataset.
-- The default set of potential interpretations is used for all unknown words.
hiddenOFeats :: AVec Lb -> [(Xs, b)] -> [Feature]
hiddenOFeats r0 ds =
concatMap f ds
where
f = concatMap oFeats . V.toList . fst
oFeats x =
[ OFeature o y
| o <- unX x
, y <- unR r0 x ]
-- | Hidden 'TFeature's which can be constructed based on the dataset.
-- The default set of potential interpretations is used for all unknown words.
hiddenTFeats :: AVec Lb -> [(Xs, b)] -> [Feature]
hiddenTFeats r0 ds =
concatMap (tFeats . fst) ds
where
tFeats xs = concatMap (tFeatsOn xs) [1 .. V.length xs - 1]
tFeatsOn xs k =
[ TFeature x y
| x <- unR r0 (xs V.! k)
, y <- unR r0 (xs V.! (k-1)) ]
-- | Hidden 'SFeature's which can be constructed based on the dataset.
-- The default set of potential interpretations is used for all unknown words.
hiddenSFeats :: AVec Lb -> [(Xs, b)] -> [Feature]
hiddenSFeats r0 ds =
let sFeats xs = [SFeature x | x <- unR r0 (xs V.! 0)]
in concatMap (sFeats . fst) ds
-- | Hidden 'Feature's of all types which can be constructed
-- on the basis of the dataset. The default set of potential
-- interpretations is used for all unknown words.
hiddenFeats :: AVec Lb -> [(Xs, b)] -> [Feature]
hiddenFeats r0 ds
= hiddenOFeats r0 ds
++ hiddenTFeats r0 ds
++ hiddenSFeats r0 ds