packages feed

FM-SBLEX-3.0: src/dalin/EncodeSw.hs

module EncodeSw where

import Char
import Frontend

import qualified Data.Map as Map

sw_encodings = Map.insert "parole" (Just parole_pos,Just parole_inhs,Just parole_param) (Map.insert "SUC" (Just suc_pos,Just suc_inhs,Just suc_param) Map.empty)
parole_pos  _ = ""

parole_inhs _ = []

parole_param (pos,p,inhs) = 
 case pos of
   "pm" -> case words p of
             xs | elem "nom" xs -> "NP00N@0S"
             xs | elem "gen" xs -> "NP00G@0S"
             _ -> parole_param ("nn",p,inhs)
   "ab" -> case p of
             "invar" -> "RG0S"
             "pos"   -> "RGPS"
             "komp"  -> "RGCS"
             "super" -> "RGSS"
             "c"     -> "RG0C"
             "sms"   -> "RG0C"
             _ -> error $ "ab " ++ p
   "av" -> case p of
             "pos indef sg f nom"     -> "AQPUSNIS"
             "pos indef sg f gen"     -> "AQPUSGIS"
             "pos indef sg m nom"     -> "AQPUSNIS"
             "pos indef sg m gen"     -> "AQPUSGIS"
             "pos indef sg n nom"     -> "AQPNSNIS"
             "pos indef sg n gen"     -> "AQPNSNIS"
             "pos indef pl nom"       -> "AQPNSNIS"
             "pos indef pl gen"       -> "AQP0PG0S"
             "pos def sg no_masc nom" -> "AQP0SNDS"
             "pos def sg no_masc gen" -> "AQP0SGDS"
             "pos def sg masc nom"    -> "AQPMSNDS"
             "pos def sg masc gen"    -> "AQPMSGDS"
             "pos def pl nom"         -> "AQP0PN0S"
             "pos def pl gen"         -> "AQP0PG0S"
             "komp nom"               -> "AQC00N0S"
             "komp gen"               -> "AQC00G0S"
             "super indef nom"        -> "AQS0PNIS"
             "super def no_masc nom"  -> "AQS00NDS"
             "super def masc nom"     -> "AQSMSNDS"
             "super def masc gen"     -> "AQSMSGDS"
             "c"                      -> "AQC0000C"
             "sms"                    -> "AQC0000C"
             "super indef gen"        -> "AQS0PGIS"
             "super def no_masc gen"  -> "AQS00GDS"
             "invar"                  -> "AQP00N0S"
             _ -> error $ "av " ++ p
   "nn" -> case p of
            "sg indef nom" -> "NC" ++ pgender inhs ++ "SN@IS"
            "sg indef gen" -> "NC" ++ pgender inhs ++ "SG@IS"
            "sg def nom"   -> "NC" ++ pgender inhs ++ "SN@DS"
            "sg def gen"   -> "NC" ++ pgender inhs ++ "SG@DS"
            "pl indef nom" -> "NC" ++ pgender inhs ++ "PN@IS"
            "pl indef gen" -> "NC" ++ pgender inhs ++ "PG@IS"
            "pl def nom"   -> "NC" ++ pgender inhs ++ "PN@DS"
            "pl def gen"   -> "NC" ++ pgender inhs ++ "PG@DS"
            "ci"               -> "NC000@0C"
            "cm"               -> "NC000@0C"
            "sms"              -> "NC000@0C"
            _ -> error $ "nn " ++ p
   "al" ->  case p of
              "sg u" -> "D0@US@S"
              "sg n" -> "D0@NS@S"
              "pl"   -> "D0@0P@S"
   "ie" -> "CIS"
   "in" ->  "I"
   "kn" -> "CCS"
   "nl" ->  
       case p of
         "nom num u"       -> "MCUSNIS"
         "nom num n"       -> "MCNSNIS"
         "nom ord no_masc" -> "MO00N0S"
         "nom ord masc"    -> "MOMSNDS"  
         "gen num u"       -> "MC00G0S"
         "gen num n"       -> "MC00G0S"
         "gen ord no_masc" -> "MO00G0S"
         "gen ord masc"    -> "MCMSGDS"
         _                 -> "*"
   "sn" -> "CSS"
   "pp" -> "SPS"
   "pn" -> case p of
             "nom"        -> "PF@00S@S"
             "ack"        -> "PF@00O@S"
             "poss sg u"  -> "PS@US0@S"
             "poss sg n"  -> "PS@N00@S"
             "poss pl"    -> "PS@0P0@S"
             "sg u nom"   -> "PF@US0@S"
             "sg n nom"   -> "PF@NS0@S"
             "sg u gen"   -> "PS@000@S"        
             "sg n gen"   -> "PS@000@S"
             "pl nom"     -> "PF@0PS@S"
             "pl gen"     -> "PS@000@S"
             _ -> parole_param ("av",p,inhs)
   "vb" -> case unwords [p1 | p1 <- words p, not (elem p1 ["sg","pl","p1","p2","p3"])] of
             "pres ind aktiv"                -> "V@IPAS"
             "pres ind s-form"               -> "V@IPPS"              
             "pres konj aktiv"               -> "V@SPAS"              
             "pret ind aktiv"                -> "V@IIAS"               
             "pret ind s-form"               -> "V@IIPS"              
             "pret konj aktiv"               -> "V@SIAS"              
             "pret konj s-form"              -> "V@SIPS"             
             x | elem "imper" (words x)      -> "V@M0AS"        
             "inf aktiv"                     -> "V@N0AS"                 
             "inf s-form"                    -> "V@N0PS"           
             "sup aktiv"                     -> "V@IUAS"     
             "sup s-form"                    -> "V@IUPS"
             "pres_part nom"                 -> "AP000N0S"
             "pres_part gen"                 -> "AP000G0S"
             "pret_part indef m nom"         -> "AF0USNIS"
             "pret_part indef f nom"         -> "AF0USNIS"
             "pret_part indef f gen"         -> "AF0USGIS"
             "pret_part indef n nom"         -> "AF0NSNIS"
             "pret_part indef n gen"         -> "AF0NSGIS"
             "pret_part indef nom"         -> "AF00PN0S"
             "pret_part indef gen"         -> "AF00PG0S"

             "pret_part def no_masc nom"  -> "AF00SNDS"
             "pret_part def no_masc gen"  -> "AF00SGDS"
             "pret_part def masc nom"     -> "AF0MSNDS"
             "pret_part def masc gen"     -> "AF0MSGDS"
             "pret_part def nom"          -> "AF00PN0S"
             "pret_part def gen"          -> "AF00PG0S"
             "c"                             -> "V@000C"
             "sms"                           -> "V@000C"             
             "pres konj s-form"              -> "V@IPSS"             
             "pret_part indef sg n gen"      -> "AF0NSGIS"
             x -> error $ "vb " ++ x
   "aba" -> "RG0A"
   "ava" -> "AQ00000A"
   "kna" -> "CCA"
   "nna" -> "NC000@0A"
   "pma" -> "NP00N@0A"
   "ppa" -> "SPC"
   "vba" -> "V@000A"
   "vbm" -> (++ "M") $ init $ parole_param ("vb", unwords (filter (\(c:_) -> not (isDigit c)) (words p)),inhs)
   "avm" -> (++ "M") $ init $ parole_param ("av",p,inhs)
   "abm" -> (++ "M") $ init $ parole_param ("ab",p,inhs)
   "inm" -> (++ "M") $ init $ parole_param ("in",p,inhs)
   "nlm" -> (++ "M") $ init $ parole_param ("nl",p,inhs)
   "nnm" -> (++ "M") $ init $ parole_param ("nn",p,inhs)
   "pmm" -> (++ "M") $ init $ parole_param ("pm",p,inhs)
   "pnm" -> (++ "M") $ init $ parole_param ("pn",p,inhs)
   "ppm" -> (++ "M") $ init $ parole_param ("pp",p,inhs)
   _    -> "*" -- "abh" "avh" "sxc" "snm" "ssm" 


pgender ["n"] = "N"
pgender ["v"] = "0"
pgender _     = "U"

suc_pos x = maybe x id $ Map.lookup x (Map.fromList pos)
 where
  pos =
   [
    ("av","JJ"),
    ("al","DT"),
    ("kn","KN"),
    ("ie","IE"),
    ("sn","SN"),
    ("in","IN"),
    ("nl","RG"),
    ("nn","NN"),
    ("pm","PM"),
    ("pn","PN"),
    ("ab","PL"),
    ("ab","AB"),
    ("pp","PP"),
    ("vb","VB")
   ]
    
   -- ("PC","vb"),
   -- ("AN",""),
   -- ("-",""),
   -- ("UO","")
    --("DT","pn"),
    --("HD","pn"),
    --("DL",""),
    --("MAD",""),
    --("MID",""),
    --("PAD",""),
   -- ("RO","nr"),
    --("HS","pn"),
    --("HP","pn"),
    --("PS","pn"),
    -- ("HA","ab"),

suc_inhs xs =  [maybe s id (Map.lookup s (Map.fromList inhs)) | s <- xs]
 where
   inhs =[
        ("v","UTR/NEU"), -- ?
        ("n","NEU"),
        ("u","UTR")
         ]



suc_param (pos,p,inhs) = unwords $ [ maybe s id (Map.lookup s (Map.fromList param)) | s <- words p]
 where
  param = [("inf","INF"),
           ("konj","KON"),
           ("pret","PRT"),
           ("aktiv","AKT"),
           ("s-form","SFO"),
           ("sup","SUP"),
           ("imper","IMP"),
           ("super","SUV"),
           ("komp","KOM"),
           ("ci","SMS"),
           ("cm","SMS"),
           ("pos","POS"),
           ("pret_part","PRF"),
           ("pl","PLU"),
           ("gen","GEN"),
           ("nom","NOM"),
           ("sg","SIN"),
           ("def","DEF"),
           ("masc","MAS"),
           ("indef","IND"),
           ("pres","PRS"),
           ("n","NEU"),
           ("u","UTR"),
           ("ack","OBJ"),
           ("invar","-")
        --   ("pret_part","PC PRF"),
        --   ("pres_part","PC PRF"),
           --("stark",""),
           --("svag",""),
           --("num",""),
           --("ord",""),
           --("ind",""),
           --("no_masc","")
          ]
           -- ("SIN/PLU",""),
           --    ("SUB/OBJ",""),
           --    ("SUB",""),
           -- ("IND/DEF",""),