From 7b6783e8f80fe352cf4c487623b3d0964fcc9fc5 Mon Sep 17 00:00:00 2001 From: aarne Date: Fri, 4 Jan 2008 17:54:20 +0000 Subject: [PATCH] started adjectives in uusisuomi --- examples/uusisuomi/Declensions.gf | 122 +++++++++++++++++++++++------- examples/uusisuomi/MkLex.hs | 14 ++-- examples/uusisuomi/Nominal.gf | 56 +++++++++++--- examples/uusisuomi/results.txt | 66 +++++++++------- 4 files changed, 188 insertions(+), 70 deletions(-) diff --git a/examples/uusisuomi/Declensions.gf b/examples/uusisuomi/Declensions.gf index cd7374022..6bcd1ae06 100644 --- a/examples/uusisuomi/Declensions.gf +++ b/examples/uusisuomi/Declensions.gf @@ -10,7 +10,7 @@ resource Declensions = ResFin ** open MorphoFin,CatFin,Prelude in { let lujuu = init lujuus ; lujuuksi = lujuu + "ksi" ; - a = vowelHarmony (last lujuu) ; + a = vowHarmony (last lujuu) ; in nForms10 lujuus (lujuu + "den") (lujuu + "tt" + a) (lujuu + "ten" + a) (lujuu + "teen") @@ -19,7 +19,7 @@ resource Declensions = ResFin ** open MorphoFin,CatFin,Prelude in { dNainen : Str -> NForms = \nainen -> let - a = vowelHarmony nainen ; + a = vowHarmony nainen ; nais = Predef.tk 3 nainen + "s" in nForms10 nainen (nais + "en") (nais + "t" + a) (nais + "en" + a) (nais + "een") @@ -28,7 +28,7 @@ resource Declensions = ResFin ** open MorphoFin,CatFin,Prelude in { dPuu : Str -> NForms = \puu -> let - a = vowelHarmony puu ; + a = vowHarmony puu ; pui = init puu + "i" ; u = last puu ; in nForms10 @@ -39,7 +39,7 @@ resource Declensions = ResFin ** open MorphoFin,CatFin,Prelude in { dSuo : Str -> NForms = \suo -> let o = last suo ; - a = vowelHarmony o ; + a = vowHarmony o ; soi = Predef.tk 2 suo + o + "i" ; in nForms10 suo (suo + "n") (suo + "t" + a) (suo + "n" + a) (suo + "h" + o + "n") @@ -59,7 +59,7 @@ resource Declensions = ResFin ** open MorphoFin,CatFin,Prelude in { dKaunis : Str -> NForms = \kaunis -> let - a = vowelHarmony kaunis ; + a = vowHarmony kaunis ; kaunii = init kaunis + "i" ; in nForms10 kaunis (kaunii + "n") (kaunis + "t" + a) @@ -70,7 +70,7 @@ resource Declensions = ResFin ** open MorphoFin,CatFin,Prelude in { dLiitin : (_,_ : Str) -> NForms = \liitin,liittimen -> let - a = vowelHarmony liitin ; + a = vowHarmony liitin ; liittim = Predef.tk 2 liittimen ; in nForms10 liitin (liittim + "en") (liitin + "t" + a) @@ -81,7 +81,7 @@ resource Declensions = ResFin ** open MorphoFin,CatFin,Prelude in { dOnneton : Str -> NForms = \onneton -> let - a = vowelHarmony onneton ; + a = vowHarmony onneton ; onnettom = Predef.tk 2 onneton + "t" + last (init onneton) + "m" ; in nForms10 onneton (onnettom + a + "n") (onneton + "t" + a) @@ -94,7 +94,7 @@ resource Declensions = ResFin ** open MorphoFin,CatFin,Prelude in { dUkko : (_,_ : Str) -> NForms = \ukko,ukon -> let o = last ukko ; - a = vowelHarmony o ; + a = vowHarmony o ; ukk = init ukko ; uko = init ukon ; uk = init uko ; @@ -147,7 +147,7 @@ resource Declensions = ResFin ** open MorphoFin,CatFin,Prelude in { dArpi : (_,_ : Str) -> NForms = \arpi,arven -> let - a = vowelHarmony arpi ; + a = vowHarmony arpi ; arp = init arpi ; arv = Predef.tk 2 arven ; ar = init arp ; @@ -172,7 +172,7 @@ resource Declensions = ResFin ** open MorphoFin,CatFin,Prelude in { dRae : (_,_ : Str) -> NForms = \rae,rakeen -> let - a = vowelHarmony rae ; + a = vowHarmony rae ; rakee = init rakeen ; rakei = init rakee + "i" ; raetta = case of { @@ -193,7 +193,7 @@ resource Declensions = ResFin ** open MorphoFin,CatFin,Prelude in { dPaatti : (_,_ : Str) -> NForms = \paatti,paatin -> let - a = vowelHarmony paatti ; + a = vowHarmony paatti ; paatte = init paatti + "e" ; paati = init paatin ; paate = init paati + "e" ; @@ -204,7 +204,7 @@ resource Declensions = ResFin ** open MorphoFin,CatFin,Prelude in { dTohtori : (_ : Str) -> NForms = \tohtori -> let - a = vowelHarmony tohtori ; + a = vowHarmony tohtori ; tohtor = init tohtori ; in nForms10 tohtori (tohtori+"n") (tohtori + a) (tohtori + "n" + a) (tohtori + "in") @@ -213,7 +213,7 @@ resource Declensions = ResFin ** open MorphoFin,CatFin,Prelude in { dPiennar : (_,_ : Str) -> NForms = \piennar,pientaren -> let - a = vowelHarmony piennar ; + a = vowHarmony piennar ; pientar = Predef.tk 2 pientaren ; in nForms10 piennar pientaren (piennar +"t" + a) @@ -223,7 +223,7 @@ resource Declensions = ResFin ** open MorphoFin,CatFin,Prelude in { dUnix : (_ : Str) -> NForms = \unix -> let - a = vowelHarmony unix ; + a = vowHarmony unix ; unixi = unix + "i" ; unixe = unix + "e" ; in nForms10 @@ -233,7 +233,7 @@ resource Declensions = ResFin ** open MorphoFin,CatFin,Prelude in { dNukke : (_,_ : Str) -> NForms = \nukke,nuken -> let - a = vowelHarmony nukke ; + a = vowHarmony nukke ; nukk = init nukke ; nuke = init nuken ; in @@ -244,7 +244,7 @@ resource Declensions = ResFin ** open MorphoFin,CatFin,Prelude in { dJalas : Str -> NForms = \jalas -> let - a = vowelHarmony jalas ; + a = vowHarmony jalas ; jalaks = init jalas + "ks" ; jalaksi = jalaks + "i" ; in nForms10 @@ -281,6 +281,29 @@ resource Declensions = ResFin ** open MorphoFin,CatFin,Prelude in { (SDP + ":" + c.p4) (SDP + ":" + c.p5) (SDP + ":" + c.p6) (SDP + ":" + c.p7) (SDP + ":" + c.p8) (SDP + ":" + c.p9) ; +-- for adjective comparison + + dSuurempi : Str -> NForms = \suurempi -> + let + a = vowHarmony suurempi ; + suuremp = init suurempi ; + suuremm = Predef.tk 2 suurempi + "m" ; + in nForms10 + suurempi (suuremm + a + "n") (suuremp + a + a) + (suuremp + a + "n" + a) (suuremp + a + a + "n") + (suuremp + "ien") (suurempi + a) + (suurempi + "n" + a) (suuremm + "iss" + a) (suurempi + "in") ; + + dSuurin : Str -> NForms = \suurin -> + let + a = vowHarmony suurin ; + suurimm = init suurin + "mm" ; + suurimp = init suurimm + "p" ; + in nForms10 + suurin (suurimm + a + "n") (suurin + "t" + a) + (suurimp + a + "n" + a) (suurimp + a + a + "n") + (suurimp + "ien") (suurimp + "i" + a) + (suurimp + "in" + a) (suurimm + "iss" + a) (suurimp + "iin") ; ------------------- @@ -365,8 +388,60 @@ resource Declensions = ResFin ** open MorphoFin,CatFin,Prelude in { lock_N = <> } ; + n2nforms : N -> NForms = \ukko -> table { + 0 => ukko.s ! NCase Sg Nom ; + 1 => ukko.s ! NCase Sg Gen ; + 2 => ukko.s ! NCase Sg Part ; + 3 => ukko.s ! NCase Sg Ess ; + 4 => ukko.s ! NCase Sg Illat ; + 5 => ukko.s ! NCase Pl Gen ; + 6 => ukko.s ! NCase Pl Part ; + 7 => ukko.s ! NCase Pl Ess ; + 8 => ukko.s ! NCase Pl Iness ; + 9 => ukko.s ! NCase Pl Illat + } ; ---- This is used to analyse nouns "rae", "hake", "rengas", "laidun", etc. +-- Adjective forms + + AForms : Type = { + posit : NForms ; + compar : NForms ; + superl : NForms ; + adv_posit, adv_compar, adv_superl : Str ; + } ; + + aForms2A : AForms -> A = \afs -> { + s = table { + Posit => table { + AN n => (nForms2N afs.posit).s ! n ; + AAdv => afs.adv_posit + } ; + Compar => table { + AN n => (nForms2N afs.compar).s ! n ; + AAdv => afs.adv_compar + } ; + Superl => table { + AN n => (nForms2N afs.superl).s ! n ; + AAdv => afs.adv_superl + } + } ; + lock_A = <> + } ; + + nforms2aforms : NForms -> AForms = \nforms -> + let + suure = init (nforms ! 1) ; + suur = Predef.tk 4 (nforms ! 8) ; + in { + posit = nforms ; + compar = dSuurempi (suure ++ "mpi") ; + superl = dSuurin (suur ++ "in") ; + adv_posit = suure + "sti" ; + adv_compar = suure + "mmin" ; + adv_superl = suur + "immin" ; + } ; + +-- This is used to analyse nouns "rae", "hake", "rengas", "laidun", etc. strongGrade : Str -> Str = \hanke -> let @@ -388,16 +463,9 @@ resource Declensions = ResFin ** open MorphoFin,CatFin,Prelude in { ase => ase } ; - part2casePl : Str -> Str * Str * Str * Str = \savia -> case savia of { - sav + "i" + a@("a" | "ä") => - ; - elio + "it" + a@("a" | "ä") => - ; - maal + "ej" + a@("a" | "ä") => - ; - talo + "j" + a@("a" | "ä") => - ; - _ => Predef.error (["impossible plural partitive"] ++ savia) + vowHarmony : Str -> Str = \s -> case s of { + _ + ("a" | "o" | "u") + _ => "a" ; + _ => "ä" } ; } diff --git a/examples/uusisuomi/MkLex.hs b/examples/uusisuomi/MkLex.hs index 304fd8b1f..9e35e88a0 100644 --- a/examples/uusisuomi/MkLex.hs +++ b/examples/uusisuomi/MkLex.hs @@ -54,33 +54,33 @@ mkLex 0 line = case words line of mkLex 1 line = case words line of num:sana:_ -> do let nimi = "n" ++ init num ++ "_" ++ sana - putStrLn $ "lin " ++ nimi ++ "_N = mk1N \"" ++ sana ++ "\" ;" + putStrLn $ "lin " ++ nimi ++ "_N = mkN \"" ++ sana ++ "\" ;" _ -> return () mkLex 2 line = case words line of num:sana:sanan:_ -> do let nimi = "n" ++ init num ++ "_" ++ sana putStrLn $ "lin " ++ nimi ++ - "_N = mk2N \"" ++ sana ++ "\" \"" ++ sanan ++ "\" ;" + "_N = mkN \"" ++ sana ++ "\" \"" ++ sanan ++ "\" ;" _ -> return () mkLex 3 line = case words line of num:sana:sanan:_:_:_:_:sanoja:_ -> do let nimi = "n" ++ init num ++ "_" ++ sana putStrLn $ "lin " ++ nimi ++ - "_N = mk3N \"" ++ sana ++ "\" \"" ++ sanan ++ "\" \"" ++ sanoja ++ "\" ;" + "_N = mkN \"" ++ sana ++ "\" \"" ++ sanan ++ "\" \"" ++ sanoja ++ "\" ;" _ -> return () mkLex 4 line = case words line of num:sana:sanan:sanaa:_:_:_:sanoja:_ -> do let nimi = "n" ++ init num ++ "_" ++ sana putStrLn $ "lin " ++ nimi ++ - "_N = mk4N \"" ++ sana ++ "\" \"" ++ sanan ++ - "\" \"" ++ sanaa ++ "\" \"" ++ sanoja ++ "\" ;" + "_N = mkN \"" ++ sana ++ "\" \"" ++ sanan ++ + "\" \"" ++ sanoja ++ "\" \"" ++ sanaa ++ "\" ;" _ -> return () --- to initiate from a noun list +-- to initiate from a noun list that has compounds mkLex 11 line = case words line of _:"--":_ -> return () @@ -88,7 +88,7 @@ mkLex 11 line = case words line of let sana = uncompound sana0 let nimi = "n" ++ init num ++ "_" ++ sana putStrLn $ "fun " ++ nimi ++ "_N : N ;" - putStrLn $ "lin " ++ nimi ++ "_N = mk1N \"" ++ sana ++ "\" ;" + putStrLn $ "lin " ++ nimi ++ "_N = mkN \"" ++ sana ++ "\" ;" _ -> return () -- from sora+tie to tie diff --git a/examples/uusisuomi/Nominal.gf b/examples/uusisuomi/Nominal.gf index e9eee3c6a..349c7dae2 100644 --- a/examples/uusisuomi/Nominal.gf +++ b/examples/uusisuomi/Nominal.gf @@ -6,13 +6,49 @@ resource Nominal = ResFin ** open MorphoFin,Declensions,CatFin,Prelude in { oper --- mkN = overload { - mk1N : (talo : Str) -> N = \s -> nForms2N (nForms1 s) ; - mk2N : (talo,talon : Str) -> N = \s,t -> nForms2N (nForms2 s t) ; - mk3N : (talo,talon,taloja : Str) -> N = \s,t,u -> nForms2N (nForms3 s t u) ; - mk4N : (talo,talon,taloa,taloja : Str) -> N = \s,t,u,v -> + mkN : overload { + mkN : (talo : Str) -> N ; + mkN : (talo,talon : Str) -> N ; + mkN : (talo,talon,taloja : Str) -> N ; + mkN : (talo,talon,taloja,taloa : Str) -> N ; + mkN : (sora : Str) -> (tie : N) -> N ; + mkN : (oma : N) -> (tunto : N) -> N ; + } ; + + mkA : overload { + mkA : Str -> A ; + mkA : N -> A ; + mkA : (hyva,parempi,paras : N) -> (hyvin,paremmin,parhaiten : Str) -> A ; + } ; + + + mkN = overload { + mkN : (talo : Str) -> N = mk1N ; + -- \s -> nForms2N (nForms1 s) ; + mkN : (talo,talon : Str) -> N = mk2N ; + -- \s,t -> nForms2N (nForms2 s t) ; + mkN : (talo,talon,taloja : Str) -> N = mk3N ; + -- \s,t,u -> nForms2N (nForms3 s t u) ; + mkN : (talo,talon,taloja,taloa : Str) -> N = mk4N ; + -- \s,t,u,v -> nForms2N (nForms4 s t u v) ; + mkN : (sora : Str) -> (tie : N) -> N = mkStrN ; + mkN : (oma,tunto : N) -> N = mkNN ; + } ; + + mk1A : Str -> A = \jalo -> aForms2A (nforms2aforms (nForms1 jalo)) ; + mkNA : N -> A = \suuri -> aForms2A (nforms2aforms (n2nforms suuri)) ; + + mk1N : (talo : Str) -> N = \s -> nForms2N (nForms1 s) ; + mk2N : (talo,talon : Str) -> N = \s,t -> nForms2N (nForms2 s t) ; + mk3N : (talo,talon,taloja : Str) -> N = \s,t,u -> nForms2N (nForms3 s t u) ; + mk4N : (talo,talon,taloa,taloja : Str) -> N = \s,t,u,v -> nForms2N (nForms4 s t u v) ; --- } ; + mkStrN : Str -> N -> N = \sora,tie -> { + s = \\c => sora + tie.s ! c ; lock_N = <> + } ; + mkNN : N -> N -> N = \oma,tunto -> { + s = \\c => oma.s ! c + tunto.s ! c ; lock_N = <> + } ; ---- TODO: oma in possessive suffix forms nForms1 : Str -> NForms = \ukko -> let @@ -63,6 +99,8 @@ resource Nominal = ResFin ** open MorphoFin,Declensions,CatFin,Prelude in { nForms1 ukko ; --- to protect <_ + ("a" | "o" | "u" | "y" | "ä" | "ö"), _ + "n"> => dUkko ukko ukon ; -- auto,auton + <_ + "mpi", _ + ("emman" | "emmän")> => dSuurempi ukko ; + <_ + "in", _ + ("imman" | "immän")> => dSuurin ukko ; => dArpi ukko ukon ; --- => -- for b-w compat. --- dArpi ukko (init (weakGrade ukko) + "en") ; @@ -99,11 +137,11 @@ resource Nominal = ResFin ** open MorphoFin,Declensions,CatFin,Prelude in { (["last arguments should end in n and a/ä, not"] ++ ukon ++ ukkoja) } ; - nForms4 : (_,_,_,_ : Str) -> NForms = \ukko,ukon,ukkoa,ukkoja -> + nForms4 : (_,_,_,_ : Str) -> NForms = \ukko,ukon,ukkoja,ukkoa -> let ukot = nForms3 ukko ukon ukkoja ; in - case of { + case of { <_,_ + "n", _ + ("a" | "ä"), _ + ("a" | "ä")> => table { 2 => ukkoa ; @@ -112,7 +150,7 @@ resource Nominal = ResFin ** open MorphoFin,Declensions,CatFin,Prelude in { _ => Predef.error (["last arguments should end in n, a/ä, and a/ä, not"] ++ - ukon ++ ukkoa ++ ukkoja) + ukon ++ ukkoja ++ ukkoa) } ; } diff --git a/examples/uusisuomi/results.txt b/examples/uusisuomi/results.txt index e26fe7457..9e83076a5 100644 --- a/examples/uusisuomi/results.txt +++ b/examples/uusisuomi/results.txt @@ -1,34 +1,46 @@ -Fri Jan 4 10:50:06 CET 2008 -aarne-rantas-computer:~/GF/examples/uusisuomi aarne$ export LEX=NSSK ; make -e +aarne-rantas-computer:~/GF/examples/uusisuomi aarne$ make NSSK - 52 diff1.txt - 36 diff2.txt - 28 diff3.txt - 21 diff4.txt - Omat - 45 diff1.txt - 23 diff2.txt - 14 diff3.txt - 7 diff4.txt ruis, ainoa, vapaa, kirves, mies, kevät, sydän +Dictionary: + (Aino Wuolle, Suomalais-englantilainen sanakirja, 11. painos WSOY 1973, + ca. 24k Words) +Duodecim +Aino -Dictionary -(Aino Wuolle, Suomalais-englantilainen sanakirja, 11. painos WSOY 1973, -ca. 24k Words) - 29 diff1.txt - 14 diff2.txt - 1 diff3.txt päitsi-päistä - 0 diff4.txt +Fri Jan 4 18:24:29 CET 2008 +Aino + 7 diff1-Aino.txt + 2 diff2-Aino.txt + 0 diff3-Aino.txt + 0 diff4-Aino.txt + +Dictionary + 15 diff1-Dictionary.txt + 10 diff2-Dictionary.txt + 1 diff3-Dictionary.txt + 0 diff4-Dictionary.txt Duodecim - 20 diff1.txt - 8 diff2.txt - 3 diff3.txt - 1 diff4.txt kevät + 17 diff1-Duodecim.txt + 8 diff2-Duodecim.txt + 3 diff3-Duodecim.txt + 1 diff4-Duodecim.txt -Aino - 7 diff1.txt - 2 diff2.txt - 0 diff3.txt - 0 diff4.txt +NSSK + 50 diff1-NSSK.txt + 32 diff2-NSSK.txt + 26 diff3-NSSK.txt + 19 diff4-NSSK.txt + +Omat + 42 diff1-Omat.txt + 21 diff2-Omat.txt + 14 diff3-Omat.txt + 7 diff4-Omat.txt + +Swadesh + 31 diff1-Swadesh.txt + 7 diff2-Swadesh.txt + 7 diff3-Swadesh.txt + 2 diff4-Swadesh.txt