packages feed

morfette-0.3: POS.hs

module POS (featureSpec)
where
import GramLab.Morfette.Features.Common
import qualified GramLab.Data.Diff.EditTree as E
import qualified Data.Map as Map
import Lemma (apply)
featureSpec global = FS { label    = (!!1)
                        , features = theFeatures global
                        , preprune = mkPreprune 0.3
                        , check    = \_ _ -> True 
                        , trainSettings = posTrainSettings }

leftCtx   = 2
rightCtx  = 1

maxSuffix = 7
maxPrefix = 5


theFeatures global tic = let prev = getSome  leftCtx   (left tic)
                            in
                              concatMap leftFeatures prev
                           ++ [Sym $ concat $ map getpos prev] -- concat prefix of previous poslabels
                           ++ focusFeatures     (focus tic)
                           ++ concatMap rightFeatures (getSome rightCtx   (right tic))
    where leftFeatures  (Just (Str form:Str label:ES script:_)) 
              = [ Sym $ label 
                , Sym $ apply script (low form)
                , Sym $ low form ]
          leftFeatures  Nothing                         = [Null , Null , Null]
          focusFeatures (Just (Str form:_))         = [ Sym $ low form 
                                                      , Sym $ spellingSpec form 
                                                      , lexmap (low form) ]
                                                      ++ prefixes maxPrefix (low form)
                                                      ++ suffixes maxSuffix (low form)
          rightFeatures (Just (Str form:_)) = [Sym (low form),lexmap (low form)]
          rightFeatures Nothing     = [Null, Null]
          low = lowercase
          lexmap w = Set $ map snd $ Map.findWithDefault [] w (dictLex global)
          getpos Nothing = ""
          getpos (Just (Str form:Str label:_)) = head (splitPOS (lang global) label)