kotus paradigms implemented

This commit is contained in:
aarne
2008-02-07 16:03:16 +00:00
parent 08b9422cba
commit 85f17b42a7
2 changed files with 86 additions and 37 deletions

View File

@@ -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 -> ;

View File

@@ -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)
-- <st><s>aaloe</s><t><tn>3</tn></t></st>
-- <st><s>vuoksi</s><hn>1</hn><t><tn>7</tn></t></st>