Files
gf-core/src-3.0/PGF/Morphology.hs

33 lines
823 B
Haskell

module PGF.Morphology where
import PGF.ShowLinearize (collectWords)
import PGF.Data
import PGF.CId
import qualified Data.Map as Map
import Data.List (intersperse)
-- these 4 definitions depend on the datastructure used
type Morpho = Map.Map String [(Lemma,Analysis)]
lookupMorpho :: Morpho -> String -> [(Lemma,Analysis)]
lookupMorpho mo s = maybe noAnalysis id $ Map.lookup s mo
buildMorpho :: PGF -> CId -> Morpho
buildMorpho pgf = Map.fromListWith (++) . collectWords pgf
prFullFormLexicon :: Morpho -> String
prFullFormLexicon mo =
unlines [w ++ " : " ++ prMorphoAnalysis ts | (w,ts) <- Map.assocs mo]
prMorphoAnalysis :: [(Lemma,Analysis)] -> String
prMorphoAnalysis lps = unlines [l ++ " " ++ p | (l,p) <- lps]
type Lemma = String
type Analysis = String
noAnalysis :: [(Lemma,Analysis)]
noAnalysis = []