From 6db5be4ca1d30f4ce91dd3adc03a08919823d802 Mon Sep 17 00:00:00 2001 From: aarne Date: Sun, 12 Jun 2005 15:04:40 +0000 Subject: [PATCH] Finnish numerals with inflection --- lib/resource/finnish/MorphoFin.gf | 36 +++++++++++++++++ lib/resource/finnish/NumeralsFin.gf | 62 +++++++++++++++++++++++++++++ 2 files changed, 98 insertions(+) create mode 100644 lib/resource/finnish/NumeralsFin.gf diff --git a/lib/resource/finnish/MorphoFin.gf b/lib/resource/finnish/MorphoFin.gf index 85a30ae15..169db6109 100644 --- a/lib/resource/finnish/MorphoFin.gf +++ b/lib/resource/finnish/MorphoFin.gf @@ -1006,4 +1006,40 @@ caseTable : Number -> CommonNoun -> Case => Str = \n,cn -> koPart = suff "ko" ; +-- For $NumeralsFin$. + + param NumPlace = NumIndep | NumAttr ; + +oper + yksiN = mkSubst "ä" "yksi" "yhde" "yhte" "yhtä" "yhteen" "yksi" "yksi" + "yksien" "yksiä" "yksiin" ; + kymmenenN = mkSubst "ä" "kymmenen" "kymmene" "kymmene" "kymmenee" + "kymmeneen" "kymmeni" "kymmeni" "kymmenien" "kymmeniä" + "kymmeniin" ; + sataN = regNoun "sata" ; + + tuhatN = mkSubst "a" "tuhat" "tuhanne" "tuhanne" "tuhantee" "tuhanteen" + "tuhansi" "tuhansi" "tuhansien" "tuhansia" "tuhansiin" ; + + kymmentaN = {s = table { + NCase Sg Nom => "kymmentä" ; + c => kymmenenN.s ! c + } + } ; + sataaN = {s = table { + Sg => sataN.s ; + Pl => table { + NCase Sg Nom => "sataa" ; + c => sataN.s ! c + } + } + } ; + tuhattaN = {s = table { + Sg => tuhatN.s ; + Pl => table { + NCase Sg Nom => "tuhatta" ; + c => tuhatN.s ! c + } + } + } ; } ; diff --git a/lib/resource/finnish/NumeralsFin.gf b/lib/resource/finnish/NumeralsFin.gf new file mode 100644 index 000000000..6b3b7da69 --- /dev/null +++ b/lib/resource/finnish/NumeralsFin.gf @@ -0,0 +1,62 @@ +--# -path=.:../abstract:../../prelude + +concrete NumeralsFin of Numerals = open TypesFin, MorphoFin in { + +lincat + Numeral, Sub1000000 = {s : NForm => Str ; n : Number} ; + Digit = {s : NForm => Str} ; + Sub10, Sub100, Sub1000 = {s : NumPlace => NForm => Str ; n : Number} ; + +lin + num x = x ; + n2 = mkSubst "a" "kaksi" "kahde" "kahte" "kahta" "kahteen" "kaksi" "kaksi" + "kaksien" "kaksia" "kaksiin" ; + n3 = mkSubst "a" "kolme" "kolme" "kolme" "kolmea" "kolmeen" "kolmi" "kolmi" + "kolmien" "kolmia" "kolmiin" ; + n4 = regNoun "neljä" ; + n5 = reg3Noun "viisi" "viiden" "viisiä" ; + n6 = reg3Noun "kuusi" "kuuden" "kuutta" ; + n7 = mkSubst "ä" "seitsemän" "seitsemä" "seitsemä" "seitsemää" + "seitsemään" "seitsemi" "seitsemi" "seitsemien" "seitsemiä" + "seitsemiin" ; + n8 = mkSubst "a" "kahdeksan" "kahdeksa" "kahdeksa" "kahdeksaa" + "kahdeksaan" "kahdeksi" "kahdeksi" "kahdeksien" "kahdeksia" + "kahdeksiin" ; + n9 = mkSubst "ä" "yhdeksän" "yhdeksä" "yhdeksä" "yhdeksää" + "yhdeksään" "yhdeksi" "yhdeksi" "yhdeksien" "yhdeksiä" "yhdeksiin" ; + + pot01 = + {s = table { + NumAttr => \\_ => [] ; + NumIndep => yksiN.s + } ; + n = Sg + } ; + pot0 d = {n = Pl ; s = \\_ => d.s} ; + pot110 = + {s = \\_ => kymmenenN.s ; + n = Pl + } ; + + pot111 = {n = Pl ; s = \\_,c => yksiN.s ! c ++"toista"} ; + pot1to19 d = {n = Pl ; s = \\_,c => d.s ! c ++"toista"} ; + pot0as1 n = n ; + + pot1 d = {n = Pl ; s = \\_,c => d.s ! c ++ kymmentaN.s ! c} ; + pot1plus d e = { + n = Pl ; + s = \\_,c => d.s ! c ++ kymmentaN.s ! c ++ e.s ! NumIndep ! c + } ; + pot1as2 n = n ; + pot2 d = {n = Pl ; s = \\_,c => d.s ! NumAttr ! c ++ sataaN.s ! d.n ! c} ; ---- + pot2plus d e = { + n = Pl ; + s = \\_,c => d.s ! NumAttr ! c ++ sataaN.s ! d.n ! c ++ e.s ! NumIndep ! c + } ; + pot2as3 n = {n = n.n ; s = n.s ! NumIndep} ; + pot3 d = {n = Pl ; s = \\c => d.s ! NumAttr ! c ++ tuhattaN.s ! d.n ! c} ; ---- + pot3plus d e = { + n = Pl ; + s = \\c => d.s ! NumAttr ! c ++ tuhattaN.s ! d.n ! c ++ e.s ! NumIndep ! c + } ; +}