started adjectives in uusisuomi

This commit is contained in:
aarne
2008-01-04 17:54:20 +00:00
parent 799fd2c3e5
commit 7b6783e8f8
4 changed files with 188 additions and 70 deletions

View File

@@ -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 <rae : Str> 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" | "ä") =>
<sav + "ien", sav + "in" + a, sav + "iss" + a, sav + "iin"> ;
elio + "it" + a@("a" | "ä") =>
<elio + "iden", elio + "in" + a, elio + "iss" + a, elio + "ihin"> ;
maal + "ej" + a@("a" | "ä") =>
<maal + "ien", maal + "ein" + a, maal + "eiss" + a, maal + "eihin"> ;
talo + "j" + a@("a" | "ä") =>
<talo + "jen", talo + "in" + a, talo + "iss" + a, talo + "ihin"> ;
_ => Predef.error (["impossible plural partitive"] ++ savia)
vowHarmony : Str -> Str = \s -> case s of {
_ + ("a" | "o" | "u") + _ => "a" ;
_ => "ä"
} ;
}

View File

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

View File

@@ -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 ;
<arp + "i", arv + "en"> => dArpi ukko ukon ;
--- <arp + "i", _ + "i" + ("a" | "ä")> => -- 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 <ukko,ukon,ukkoa,ukkoja> of {
case <ukko,ukon,ukkoja,ukkoa> 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)
} ;
}

View File

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