From 85f17b42a783fc686c212a88e2d3defcae3daa26 Mon Sep 17 00:00:00 2001 From: aarne Date: Thu, 7 Feb 2008 16:03:16 +0000 Subject: [PATCH] kotus paradigms implemented --- examples/uusisuomi/Kotus.gf | 104 ++++++++++++++++++++---------- examples/uusisuomi/kotus/Kotus.hs | 19 ++++-- 2 files changed, 86 insertions(+), 37 deletions(-) diff --git a/examples/uusisuomi/Kotus.gf b/examples/uusisuomi/Kotus.gf index 87e0e0366..5c7db6929 100644 --- a/examples/uusisuomi/Kotus.gf +++ b/examples/uusisuomi/Kotus.gf @@ -9,12 +9,12 @@ oper d01A : Str -> NForms -- 166 yökkö = \s -> dUkko s (weakGrade s + "n") ; d02 : Str -> NForms -- 1189 ääntely - = \s -> dSilakka s (s + "n") (s + "j" + getHarmony (last s)) ; + = \s -> dSilakka s (s + "n") (s + "j" + vowelHarmony (last s)) ; d03 : Str -> NForms -- 481 ääntiö - = \s -> dSilakka s (s + "n") (s + "it" + getHarmony (last s)) ; + = \s -> dSilakka s (s + "n") (s + "it" + vowelHarmony (last s)) ; d04A : Str -> NForms -- 273 äpärikkö = \s -> let ws = weakGrade s in - dSilakka s (ws + "n") (ws + "it" + getHarmony (last s)) ; + dSilakka s (ws + "n") (ws + "it" + vowelHarmony (last s)) ; d05 : Str -> NForms -- 3212 öljymaali = \s -> dPaatti s (s + "n") ; d05A : Str -> NForms -- 1959 öylätti @@ -34,27 +34,28 @@ oper d09A : Str -> NForms -- 1040 ääniraita = \s -> dUkko s (s + weakGrade "n") ; d10 : Str -> NForms -- 2119 äänittäjä - = \s -> dSilakka s (s + "n") (init s + "i" + getHarmony (last s)) ; + = \s -> dSilakka s (s + "n") (init s + "i" + vowelHarmony (last s)) ; d10A : Str -> NForms -- 284 änkkä = \s -> dUkko s (weakGrade s + "n") ; d11 : Str -> NForms -- 46 ödeema = \s -> dUkko s (s + "n") ; d12 : Str -> NForms -- 1125 örinä - = \s -> let a = getHarmony (last s) in + = \s -> let a = vowelHarmony (last s) in dSilakka s (s + "n") (init s + case a of {"a" => "o" ; _ => "ö"} + "it" + a) ; d13 : Str -> NForms -- 157 virtaska - = \s -> let a = getHarmony (last s) in + = \s -> let a = vowelHarmony (last s) in dSilakka s (s + "n") (init s + case a of {"a" => "o" ; _ => "ö"} + "j" + a) ; d14A : Str -> NForms -- 244 ötökkä - = \s -> let a = getHarmony (last s) ; ws = weakGrade s in + = \s -> let a = vowelHarmony (last s) ; ws = weakGrade s in dSilakka s (ws + "n") (init ws + case a of {"a" => "o" ; _ => "ö"} + "it" + a) ; d15 : Str -> NForms -- 170 äreä = dKorkea ; ----- d16 : Str -> NForms -- 2 kumpikin ----- = \s -> ; + d16 : Str -> NForms -- 2 kumpikin + = \s -> let kumpi = Predef.take 5 s ; kin = Predef.drop 5 s in + \\i => (dSuurempi kumpi ! i + kin) ; d16A : Str -> NForms -- 20 ylempi = dSuurempi ; d17 : Str -> NForms -- 38 virkkuu @@ -67,8 +68,10 @@ oper = dPaluu ; d21 : Str -> NForms -- 22 tax-free = dPuu ; ----- d22 : Str -> NForms -- 13 tournedos ----- = \s -> ; + d22 : Str -> NForms -- 13 tournedos + = \s -> nForms10 + s (s + "'n") (s + "'ta") (s + "'na") (s + "'hon") + (s + "'iden") (s + "'ita") (s + "'ina") (s + "'issa") (s + "'ihin") ; d23 : Str -> NForms -- 9 vuohi = \s -> dArpi s (init s + "en") ; d24 : Str -> NForms -- 20 uni @@ -83,12 +86,19 @@ oper = \s -> dArpi s (Predef.tk 2 s + "ren") ; d28A : Str -> NForms -- 1 jälsi = \s -> dArpi s (Predef.tk 2 s + "len") ; ----- d29 : Str -> NForms -- 1 lapsi ----- = \s -> ; ----- d30 : Str -> NForms -- 2 veitsi ----- = \s -> ; ----- d31 : Str -> NForms -- 3 yksi ----- = \s -> ; + d29 : Str -> NForms -- 1 lapsi + = \s -> let lapsi = dArpi s (init s + "en") in + table {2 => Predef.tk 3 s + "ta" ; i => lapsi ! i} ; + d30 : Str -> NForms -- 2 veitsi + = \s -> let lapsi = dArpi s (init s + "en") in + table {2 => Predef.tk 3 s + "stä" ; i => lapsi ! i} ; + d31 : Str -> NForms -- 3 yksi + = \s -> let + y = Predef.tk 3 s ; + a = vowelHarmony y + in nForms10 + s (y + "hden") (y + "ht" + a) (y + "hten" + a) (y + "hteen") + (s + "en") (s + a) (s + "n" + a) (s + "ss" + a) (s + "in") ; d32 : Str -> NForms -- 20 uumen = \s -> dPiennar s (s + "en") ; d32A : Str -> NForms -- 54 ystävätär @@ -97,16 +107,28 @@ oper = \s -> dLiitin s (init s + "men") ; d33A : Str -> NForms -- 181 yllytin = \s -> dLiitin s (strongGrade (init s) + "men") ; ----- d34 : Str -> NForms -- 1 alaston ----- = dOnneton ; + d34 : Str -> NForms -- 1 alaston + = \s -> let alastom = init s in + nForms10 + s (s + "ta") (alastom + "an") (alastom + "ana") (alastom + "aan") + (alastom + "ien") (alastom + "ia") (alastom + "ina") (alastom + "issa") + (alastom + "iin") ; d34A : Str -> NForms -- 569 ääretön = dOnneton ; ----- d35A : Str -> NForms -- 1 lämmin ----- = \s -> ; + d35A : Str -> NForms -- 1 lämmin + = \s -> let lämpim = strongGrade (init s) + "m" in + nForms10 + s (s + "tä") (lämpim + "än") (lämpim + "änä") (lämpim + "ään") + (lämpim + "ien") (lämpim + "iä") (lämpim + "inä") (lämpim + "issä") + (lämpim + "iin") ; d36 : Str -> NForms -- 11 ylin = dSuurin ; ----- d37 : Str -> NForms -- 1 vasen ----- = \s -> ; + d37 : Str -> NForms -- 1 vasen + = \s -> let vasem = init s + "m" in + nForms10 + s (s + "ta") (vasem + "man") (vasem + "pana") (vasem + "paan") + (vasem + "pien") (vasem + "pia") (vasem + "pina") (vasem + "missa") + (vasem + "piin") ; d38 : Str -> NForms -- 4195 öykkärimäinen = dNainen ; d39 : Str -> NForms -- 2730 örähdys @@ -117,18 +139,34 @@ oper = \s -> let is = init s in dRae s (is + last is ++ "n") ; d41A : Str -> NForms -- 401 öljykangas = \s -> let is = init s in dRae s (strongGrade is + last is ++ "n") ; ----- d42 : Str -> NForms -- 1 mies ----- = \s -> ; + d42 : Str -> NForms -- 1 mies + = \s -> let mieh = init s + "s" in + nForms10 + s (s + "tä") (mieh + "en") (mieh + "enä") (mieh + "een") + (s + "ten") (mieh + "iä") (mieh + "pinä") (mieh + "issä") + (mieh + "iin") ; d43 : Str -> NForms -- 11 tiehyt = \s -> dRae s (init s + "en") ; d43A : Str -> NForms -- 1 immyt = \s -> dRae s (strongGrade (init s) + "en") ; ----- d44 : Str -> NForms -- 1 kevät ----- = \s -> ; ----- d45 : Str -> NForms -- 23 yhdes ----- = \s -> ; ----- d46 : Str -> NForms -- 1 tuhat ----- = \s -> ; + d44 : Str -> NForms -- 1 kevät + = \s -> let kevä = init s in + nForms10 + s (s + "tä") (kevä + "än") (kevä + "änä") (kevä + "äseen") + (s + "iden") (kevä + "itä") (kevä + "inä") (kevä + "issä") + (kevä + "isiin") ; + d45 : Str -> NForms -- 23 yhdes + = \s -> let yhde = init s ; a = vowelHarmony s in + nForms10 + s (yhde + "tt" + a) (yhde + "nnen") (yhde + "nten" + a) (yhde + "nteen") + (yhde + "nsien") (yhde + "nsi" + a) (yhde + "nsin" + a) (yhde + "nsiss" + a) + (yhde + "nsiin") ; + d46 : Str -> NForms -- 1 tuhat + = \s -> let tuha = init s ; a = vowelHarmony s in + nForms10 + s (tuha + "tt" + a) (tuha + "nnen") (tuha + "nten" + a) (tuha + "nteen") + (tuha + "nsien") (tuha + "nsi" + a) (tuha + "nsin" + a) (tuha + "nsiss" + a) + (tuha + "nsiin") ; d47 : Str -> NForms -- 46 ylirasittunut = dOttanut ; d48 : Str -> NForms -- 346 äpäre @@ -137,8 +175,8 @@ oper = \s -> dRae s (strongGrade s + "en") ; d49 : Str -> NForms -- 31 vempele = \s -> dRae s (s + "en") ; ----- d49A : Str -> NForms -- 11 vemmel ----- = \s -> ; + d49A : Str -> NForms -- 11 vemmel + = \s -> dPiennar s (strongGrade (init s) + "len") ; {- d50 : Str -> NForms -- 520 vääräsääri = \s -> ; diff --git a/examples/uusisuomi/kotus/Kotus.hs b/examples/uusisuomi/kotus/Kotus.hs index 57557ae42..694465782 100644 --- a/examples/uusisuomi/kotus/Kotus.hs +++ b/examples/uusisuomi/kotus/Kotus.hs @@ -6,9 +6,20 @@ kotus = "sanat.xxmmll" main = do ss <- readFile kotus >>= return . lines let ws = map analyse ss - mapM putStrLn $ treat ws + writeFile "kotus.gf" $ unlines $ treat ws +-- mapM putStrLn $ treat ws -treat = map mkRule . paradigms +treat = map mkLin . entries + +entries = zip [10000..] . filter isNoun + +isNoun x = ((<5) . read . take 1 . fst) x && (all isAlpha . snd) x + +mkLin (n,(pa,ex)) = + "fun n" ++ show n ++ "_" ++ ex ++ " : N ;\n" ++ + "lin n" ++ show n ++ "_" ++ ex ++ " = d" ++ pa ++ " \"" ++ ex ++ "\" ;" + +-- treat = map mkRule . paradigms mkRule ((pa,ex),nu) = " " ++ pos ++ pa ++ " : Str -> " ++ poss ++ @@ -16,12 +27,12 @@ mkRule ((pa,ex),nu) = where (pos,poss) = if read (take 2 pa) < 52 then ("d","N") else ("c","V") -paradigms = map info . groupByFst . sort +-- paradigms = map info . groupByFst . sort info x = (last x, length x) --info = last -groupByFst = groupBy (\ x y -> fst x == fst y) +-- groupByFst = groupBy (\ x y -> fst x == fst y) -- aaloe3 -- vuoksi17