semiring-0.3: Data/Semiring/ViterbiNBestDerivation.hs
{-# LANGUAGE MultiParamTypeClasses, FunctionalDependencies, TypeSynonymInstances, FlexibleInstances #-}
module Data.Semiring.ViterbiNBestDerivation where
import Data.Semiring
import Data.List
import Data.Semiring.Viterbi
import Data.Semiring.ViterbiNBest
import Data.Semiring.Prob
import Data.Semiring.Derivation
-- | The 'ViterbiNBestDerivation' is an example of a more complicated semiring
-- built up from smaller components. It keeps track of the top N scoring paths
-- along with their derivations.
--
-- > type ViterbiNBestDerivation n m = ViterbiNBest n (Weighted Prob (Derivation m))
type ViterbiNBestDerivation n m = ViterbiNBest n (Weighted Prob (Derivation m))
-- | The 'ViterbiDerivation' is a simpler semiring. It just keeps track of the best
-- scoring path and it's derivation.
--
-- > type ViterbiDerivation m = Viterbi (Weighted Prob (Derivation m))
type ViterbiDerivation p m = Viterbi (Weighted p (Derivation m))
class BestScorer d s a | a -> d, a -> s where
getBestDerivation :: a -> d
getBestScore :: a -> s
instance (Monoid m, WeightedSemiring p) => BestScorer m p (ViterbiDerivation p m) where
getBestDerivation = fromDerivation . getInfo . fromViterbi
getBestScore = getWeight . fromViterbi
--getBestDerivation :: (Monoid m, WeightedSemiring p) => ViterbiDerivation p m -> m
--getBestScore :: (Monoid m, WeightedSemiring p) => ViterbiDerivation p m -> p