Finnish and res doc

This commit is contained in:
aarne
2005-07-01 18:54:08 +00:00
parent a386af8bdc
commit 4f86a8c0b4
8 changed files with 188 additions and 99 deletions

View File

@@ -26,6 +26,9 @@ gfdoc:
gfdoc ../norwegian/VerbsNor.gf ; mv ../norwegian/VerbsNor.html .
gfdoc ../norwegian/BasicNor.gf ; mv ../norwegian/BasicNor.html .
gfdoc ../finnish/ParadigmsFin.gf ; mv ../finnish/ParadigmsFin.html .
gfdoc ../finnish/BasicFin.gf ; mv ../finnish/BasicFin.html .
gfdoc ../italian/ParadigmsIta.gf ; mv ../italian/ParadigmsIta.html .
gfdoc ../italian/BasicIta.gf ; mv ../italian/BasicIta.html .
gfdoc ../italian/BeschIta.gf ; mv ../italian/BeschIta.html .

View File

@@ -9,7 +9,7 @@
<p>
Third Version, 22 May 2005
Third Version, 22 May 2005. Completed 1 July.
<br>
Second Version, 1 March 2005
<br>
@@ -467,6 +467,12 @@ Alternative views on sentence formation:
<p>
<a href="ParadigmsFin.html">Finnish paradigms</a>
<br>
<a href="BasicFin.html">example use of Finnish oaradigms</a>
<p>
<a href="ParadigmsFre.html">French paradigms</a>
<br>
<a href="BasicFre.html">example use of French paradigms</a>
@@ -847,7 +853,8 @@ English:
<p>
Finnish:
missing many nominal forms of verbs;
the basic lexicon has some erroneous inflectional patterns;
compiling the heuristic paradigms is slow;
the basic lexicon has some erroneous inflectional forms;
possessive and interrogative suffixes have no proper lexer.
<p>
French:

View File

@@ -48,7 +48,7 @@ lincat
V = Verb1 ;
-- = {s : VForm => Str}
---- VP = {s,s2 : Bool => SForm => Agr => Str ; isAux : Bool} ;
VPI = {s : VIForm => Str} ;
VPI = {s : Bool => VIForm => Str ; sc : Case} ;
----- VP = Verb ** {s2 : VForm => Str ; c : ComplCase} ;
---- VG = {s,s2 : Bool => VForm => Str ; c : ComplCase} ;
V2 = TransVerb ;

View File

@@ -51,23 +51,22 @@ concrete ClauseFin of Clause = CategoriesFin **
sats2clause (
insertComplement
(mkSats subj verb)
(vp.s ! VIInfinit)
(vp.s ! True ! VIInfinit Simul)
) ;
SPredObjV2V subj verb obj vp =
sats2clause (
insertComplement
(mkSatsObject subj verb obj)
(vp.s ! VIInfinit)
(vp.s ! True ! VIInfinit Simul)
) ;
SPredSubjV2V subj verb obj vp =
sats2clause (
insertComplement
(mkSatsObject subj verb obj)
(vp.s ! VIInfinit)
(vp.s ! True ! VIInfinit Simul)
) ;
{-
SPredProgVP np vp = sats2clause (progressiveSats np vp) ;
-}
SPredAP subj adj =
sats2clause (mkSatsCopula subj (complAdjPhrase subj.n adj)) ;
@@ -154,7 +153,7 @@ concrete ClauseFin of Clause = CategoriesFin **
sats2quest (mkSatsCopula (intNounPhrase subj) adv.s) ;
QPredProgVP np vp = sats2quest (progressiveSats (intNounPhrase np) vp) ;
-}
----- gender and number of Adj
@@ -163,11 +162,14 @@ concrete ClauseFin of Clause = CategoriesFin **
IPredV2 a v y =
sats2verbPhrase a (mkSatsObject pronImpers v y) ;
IPredAP a adj =
sats2verbPhrase a (mkSatsCopula pronImpers (adj.s ! AF Masc Sg)) ;
IPredPassV a v =
sats2verbPhrase a (mkSatsCopula pronImpers (v.s ! VPart (pgen2gen pronImpers.g) pronImpers.n)) ;
sats2verbPhrase a (mkSatsCopula pronImpers (complAdjPhrase Sg adj)) ; ---
IPredV3 a verb obj1 obj2 =
sats2verbPhrase a (insertObject (mkSatsObject pronImpers verb obj1) verb.c3 verb.s3 obj2) ;
sats2verbPhrase a (insertObject (mkSatsObject pronImpers verb obj1) verb.c2 verb.s5 verb.p obj2) ;
{-
IPredPassV a v =
sats2verbPhrase a (mkSatsCopula pronImpers (v.s ! VPart (pgen2gen
pronImpers.g) pronImpers.n)) ;
IPredReflV2 a verb =
sats2verbPhrase a (
mkSatsObject pronImpers

View File

@@ -9,9 +9,10 @@
-- expressions of basic categories: nouns, adjectives, verbs.
--
-- Closed categories (determiners, pronouns, conjunctions) are
-- accessed through the resource syntax API, $Structural.gf$.
-- accessed through the resource syntax API, $Structural$.
--
-- The main difference with $MorphoFin.gf$ is that the types
-- The low-level definitions of inflectional patterns are in
-- $MorphoFin$. The main difference with that module is that here the types
-- referred to are compiled resource grammar types. We have moreover
-- had the design principle of always having existing forms, not
-- stems, as string arguments of the paradigms, not stems.
@@ -26,7 +27,9 @@ resource ParadigmsFin =
--2 Parameters
--
-- To abstract over gender, number, and (some) case names,
-- we define the following identifiers.
-- we define the following identifiers. The application programmer
-- should always use these constants instead of their definitions
-- in $TypesInf$.
oper
Gender : Type;
@@ -39,44 +42,65 @@ oper
singular : Number ;
plural : Number ;
Case : Type ;
nominative : Case ;
genitive : Case ;
partitive : Case ;
Case : Type ;
nominative : Case ;
genitive : Case ;
partitive : Case ;
translative : Case ;
inessive : Case ;
elative : Case ;
illative : Case ;
adessive : Case ;
ablative : Case ;
allative : Case ;
inessive : Case ;
elative : Case ;
illative : Case ;
adessive : Case ;
ablative : Case ;
allative : Case ;
-- The following type is used for defining *rection*, i.e. complements
-- of many-place verbs and adjective. A complement can be defined by
-- just a case, or a pre/postposition and a case.
PPosition : Type ;
prepP : Case -> Str -> PPosition ;
postpP : Case -> Str -> PPosition ;
caseP : Case -> PPosition ;
prepP : Case -> Str -> PPosition ;
postpP : Case -> Str -> PPosition ;
caseP : Case -> PPosition ;
accusative : PPosition ;
--2 Nouns
-- Worst case: give ten forms and the semantic gender.
-- The worst case gives ten forms and the semantic gender.
-- In practice just a couple of forms are needed, to define the different
-- stems, vowel alternation, and vowel harmony.
oper
mkN :
(talo,talon,talona,taloa,taloon,taloina,taloissa,talojen,taloja,taloihin
: Str) -> Gender -> N ;
mkN : (talo, talon, talona, taloa, taloon,
taloina,taloissa,talojen,taloja,taloihin : Str) -> Gender -> N ;
-- The regular noun heuristic takes just one form and analyses its suffixes.
-- The regular noun heuristic takes just one form (singular
-- nominative) and analyses it to pick the correct paradigm.
-- It does automatic grade alternation, and is hence not usable
-- for words like "auto" (whose genitive would become "audon").
regN : (talo : Str) -> N ;
-- The almost-regular heuristics analyse two or three forms.
-- If $regN$ does not give the correct result, one can try and give
-- two or three forms as follows. Examples of the use of these
-- functions are given in $BasicFin$. Most notably, $reg2N$ is used
-- for nouns like "kivi - kiviä", which would otherwise become like
-- "rivi - rivejä". $regN3$ is used e.g. for
-- "sydän - sydämen - sydämiä", which would otherwise become
-- "sydän - sytämen".
reg2N : (savi,savia : Str) -> N ;
reg3N : (vesi,veden,vesiä : Str) -> N ;
-- Some nouns have an unexpected singular partitive, e.g. "meri", "lumi".
sgpartN : (meri : N) -> (merta : Str) -> N ;
nMeri : (meri : Str) -> N ;
-- The rest of the noun paradigms are mostly covered by the three
-- heuristics.
--
-- Nouns with partitive "a"/"ä" are a large group.
-- To determine for grade and vowel alternation, three forms are usually needed:
-- singular nominative and genitive, and plural partitive.
@@ -163,11 +187,6 @@ oper
nNauris : (naurista : Str) -> N ;
-- Some nouns have an unexpected singular partitive, e.g. "meri", "juuri".
sgpartN : N -> Str -> N ;
nMeri : Str -> N ;
-- Separately-written compound nouns, like "sambal oelek", "Urho Kekkonen",
-- have only their last part inflected.
@@ -203,23 +222,29 @@ oper
mkADeg : (kiva : N) -> (kivempaa,kivinta : Str) -> ADeg ;
-- Without $optimize=noexpand$, this function would expands to enormous size.
-- The regular adjectives are based on $regN$ in the positive.
regADeg : (punainen : Str) -> ADeg ;
regADeg : (suuri : Str) -> ADeg ;
--2 Verbs
--
-- The fragment only has present tense so far, but in all persons.
-- The grammar does not cover the potential mood and some nominal
-- forms. One way to see the coverage is to linearize a verb to
-- a table.
-- The worst case needs twelve forms, as shown in the following.
mkV : (tulla,tulee,tulen,tulevat,tulkaa,tullaan,
tuli,tulin,tulisi,tullut,tultu,tullun : Str) -> V ;
-- The following heuristics cover more and more verbs.
regV : (soutaa : Str) -> V ;
reg2V : (soutaa,souti : Str) -> V ;
reg3V : (soutaa,soudan,souti : Str) -> V ;
-- A simple special case is the one with just one stem and no grade alternation.
-- It covers e.g. "sanoa", "valua", "kysyä".
-- The rest of the paradigms are special cases mostly covered by the heuristics.
-- A simple special case is the one with just one stem and without grade alternation.
vValua : (valua : Str) -> V ;
@@ -253,19 +278,20 @@ oper
vEi : V ;
-- Two-place verbs need a case, and can have a pre- or postposition.
-- At least one of the latter is empty, $[]$.
mkV2 : V -> PPosition -> V2 ;
-- If both are empty, the following special function can be used.
-- If the complement needs just a case, the following special function can be used.
caseV2 : V -> Case -> V2 ;
-- Verbs with a direct (accusative) object
-- are special, since their complement case is finally decided in syntax.
-- But this is taken care of by $ClauseFin$.
dirV2 : V -> V2 ;
--3 Three-place verbs
--
-- Three-place (ditransitive) verbs need two prepositions, of which
@@ -275,6 +301,7 @@ oper
dirV3 : V -> Case -> V3 ; -- give,_,to
dirdirV3 : V -> V3 ; -- acc, allat
--3 Other complement patterns
--
-- Verbs and adjectives can take complements such as sentences,
@@ -295,7 +322,6 @@ oper
mkAV : A -> AV ;
mkA2V : A2 -> A2V ;
-- The definitions should not bother the user of the API. So they are
-- hidden from the document.
--.

View File

@@ -58,9 +58,9 @@ lin
UseA = adj2adjPhrase ;
ComplA2 = complAdj ;
ComplAV av vpi = {s = \\_,a => av.s ! a ++ vpi.s ! VIInfinit} ;
ComplObjA2V av obj vpi = {s = \\_,a => av.s ! a ++ obj.s ! complCase
True av.c VImperat ++ vpi.s ! VIInfinit} ;
---- ComplAV av vpi = {s = \\_,a => av.s ! a ++ vpi.s ! VIInfinit} ;
---- ComplObjA2V av obj vpi = {s = \\_,a => av.s ! a ++ obj.s ! complCase
---- True av.c (SVI VIInf3Iness) ++ vpi.s ! VIInfinit} ;
PositADeg = positAdjPhrase ;
ComparADeg = comparAdjPhrase ;

View File

@@ -106,6 +106,7 @@ oper
{s = \\f => jussi.s ! npForm2Case Sg f ; n = Sg ; p = NP3} ;
impersNounPhrase : NounPhrase = nameNounPhrase {s = \\_ => []} ;
pronImpers = impersNounPhrase ;
singularNounPhrase : CommNounPhrase -> NounPhrase = \cn ->
{s = \\f => cn.s ! False ! Sg ! (npForm2Case Sg f) ; n = Sg ; p = NP3} ;
@@ -375,7 +376,7 @@ oper
complAdj : AdjCompl -> NounPhrase -> AdjPhrase = \hyva,paini ->
let
hyvat : AForm => Str = \\a => hyva.s ! a ;
c : NPForm = complCase True hyva.c VImperat ;
c : NPForm = complCase True hyva.c (SVI VIInf3Iness) ;
painissa : Str = paini.s ! c
in
{s = table {
@@ -493,35 +494,36 @@ oper
Tense = Present | Past | Future | Conditional ;
Anteriority = Simul | Anter ;
SForm =
VFinite SType Tense Anteriority
| VInfinit Anteriority
| VImperat
;
SForm = VFinite SType Tense Anteriority ;
SType = SDecl | SQuest ;
VIForm =
VIInfinit
| VIImperat Bool Number
VIInfinit Anteriority
| VIImperat Number
| VIInf3Iness
| VIInf3Elat
| VIInf3Illat
| VIInf3Adess
| VIInf3Abess ;
-- This is an auxiliary.
SVIForm = SCl SForm | SVI VIForm ;
oper
Clause : Type = {s : Bool => SForm => Str} ;
VerbPhraseInf : Type = {s : VIForm => Str} ;
VerbPhraseInf : Type = {s : Bool => VIForm => Str ; sc : Case} ;
Sats : Type = {
subj : Str ;
pred : Bool => SForm => {
fin : Str ;
inf : Str ;
obj : Str -- object case depends on both
inf : Str
} ;
comp : Str
obj : Bool => SVIForm => Str ;
comp : Str ;
vpi : VerbPhraseInf
} ;
sats2clause : Sats -> Clause = \sats ->
@@ -531,7 +533,7 @@ oper
pred = sats.pred ! b ! sf ;
fin = pred.fin ;
inf = pred.inf ;
obj = pred.obj ;
obj = sats.obj ! b ! (SCl sf) ;
comp = sats.comp
in
case sf of {
@@ -540,19 +542,54 @@ oper
}
} ;
sats2verbPhrase : {s : Str ; a : Anteriority} -> Sats -> VerbPhraseInf = \a,sats ->
{s = \\b,vi =>
let
inf = sats.vpi.s ! b ! vi ;
obj = sats.obj ! b ! (SVI vi) ;
comp = sats.comp
in
a.s ++ inf ++ obj ++ comp ;
sc = sats.vpi.sc
} ;
questPart : Str -> Str = \s -> glueParticle s "ko" ; --- "kö"
mkSats : NounPhrase -> Verb1 -> Sats = \subj,verb ->
let
np = case verb.sc of {
sc = verb.sc ;
np = case sc of {
Nom => <subj.n, np2Person subj.p> ;
_ => <Sg, P3>
}
} ;
vi = inflectVerb verb np.p1 np.p2
in
{subj = subj.s ! NPCase verb.sc ; -- "minusta tulee poliisi"
pred = \\b,sf =>
inflectVerb verb np.p1 np.p2 b sf ** {obj = []} ;
comp = []
{subj = subj.s ! NPCase sc ; -- "minusta tulee poliisi"
pred = \\b,sf => vi b (SCl sf) ;
obj = \\_,_ => [] ;
comp = [] ;
vpi = {
s = \\b,f => let vp = vi b (SVI f) in vp.fin ++ vp.inf ;
sc = sc
}
} ;
progressiveSats : NounPhrase -> VerbPhraseInf -> Sats = \subj,vp ->
let
np = case vp.sc of {
Nom => <subj.n, np2Person subj.p> ;
_ => <Sg, P3>
} ;
vi = inflectVerb verbOlla np.p1 np.p2
in
{subj = subj.s ! NPCase vp.sc ; -- "minusta on tulossa poliisi"
pred = \\b,sf => vi b (SCl sf) ;
obj = \\_,_ => [] ;
comp = vp.s ! True ! VIInf3Iness ;
vpi = {
s = \\b,f => let vv = vi b (SVI f) in vv.fin ++ vv.inf ;
sc = Nom
}
} ;
mkSatsObject : NounPhrase -> TransVerb -> NounPhrase -> Sats = \subj,verb,obj ->
@@ -567,31 +604,34 @@ oper
pred = \\b,sf =>
let spred = sats.pred ! b ! sf in
{fin = spred.fin ;
inf = spred.inf ;
obj = spred.obj ++ pPosit prep pos (obj.s ! complCase b c sf)
inf = spred.inf
} ;
comp = sats.comp
obj = \\b,f => sats.obj ! b ! f ++ pPosit prep pos (obj.s ! complCase b c f) ;
comp = sats.comp ;
vpi = sats.vpi
} ;
insertComplement : Sats -> Str -> Sats =
\sats, comp ->
{subj = sats.subj ;
pred = sats.pred ;
comp = sats.comp ++ comp
obj = sats.obj ;
comp = sats.comp ++ comp ;
vpi = sats.vpi
} ;
complCase : Bool -> ComplCase -> SForm -> NPForm = \b,c,v -> case c of {
complCase : Bool -> ComplCase -> SVIForm -> NPForm = \b,c,v -> case c of {
CCase k => NPCase k ;
CAcc => case b of {
True => case v of {
VFinite _ _ _ => NPAccGen ;
SCl _ => NPAccGen ;
_ => NPAccNom
} ;
_ => NPCase Part
}
} ;
inflectVerb : Verb -> Number -> Person -> Bool -> SForm -> {fin, inf : Str} =
inflectVerb : Verb -> Number -> Person -> Bool -> SVIForm -> {fin, inf : Str} =
\verb,n,p,b,sf ->
let
vs = verb.s ;
@@ -608,13 +648,6 @@ oper
<False,Simul> => {fin = eis ! vf ; inf = vs ! neg} ;
<False,Anter> => {fin = eis ! vf ; inf = olla ! neg ++ vs ! part}
} ;
inf : Anteriority -> {fin,inf : Str} =
\a -> case <b,a> of {
<True, Simul> => {fin = vs ! Inf ; inf = []} ;
<True, Anter> => {fin = olla ! Inf ; inf = vs ! part} ;
<False,Simul> => {fin = olla ! Inf ; inf = abess} ;
<False,Anter> => {fin = olla ! Inf ; inf = olla ! part ++ abess}
} ;
fut : Anteriority -> VForm -> VForm -> {fin,inf : Str} =
\a,vf,neg -> case <b,a> of {
<True, Simul> => {fin = tulla ! vf ; inf = illat} ;
@@ -623,21 +656,39 @@ oper
<False,Anter> => {fin = eis ! vf ;
inf = olla ! neg ++ tulla ! part ++ illat}
} ;
älä = case b of {
True => {fin = vs ! Imper n ; inf = []} ;
False => {fin = eis ! Imper n ;
inf = vs ! case n of {
inf : VIForm -> Anteriority -> {fin,inf : Str} =
\if,a ->
let i = case if of {
VIInf3Iness => Inf3Iness ;
VIInf3Elat => Inf3Elat ;
VIInf3Illat => Inf3Illat ;
VIInf3Adess => Inf3Adess ;
VIInf3Abess => Inf3Abess ;
_ => Inf --- not used for imperative
}
in
case <b,a> of {
<True, Simul> => {fin = vs ! i ; inf = []} ;
<True, Anter> => {fin = olla ! i ; inf = vs ! part} ;
<False,Simul> => {fin = olla ! i ; inf = abess} ;
<False,Anter> => {fin = olla ! i ; inf = olla ! part ++ abess}
} ;
älä : Number -> {fin,inf : Str} =
\nu -> case b of {
True => {fin = vs ! Imper nu ; inf = []} ;
False => {fin = eis ! Imper nu ;
inf = vs ! case nu of {
Sg => Imper n ;
Pl => ImpNegPl}
}
}
} ;
in case sf of {
VFinite _ Past a => ei a (Impf n p) (part) ;
VFinite _ Conditional a => ei a (Cond n p) (Cond Sg P3) ;
VFinite _ Present a => ei a (Pres n p) (Imper Sg) ;
VFinite _ Future a => fut a (Pres n p) (Imper Sg) ;
VInfinit a => inf a ;
VImperat => älä
SCl (VFinite _ Past a) => ei a (Impf n p) (part) ;
SCl (VFinite _ Conditional a) => ei a (Cond n p) (Cond Sg P3) ;
SCl (VFinite _ Present a) => ei a (Pres n p) (Imper Sg) ;
SCl (VFinite _ Future a) => fut a (Pres n p) (Imper Sg) ;
SVI (VIImperat n ) => älä n ;
SVI i => inf i Simul ---- Anter
} ;
@@ -1069,7 +1120,7 @@ oper
Imperative = SS1 Number ;
imperVerbPhrase : Bool -> VerbPhraseInf -> Imperative = \b,ui ->
{s = \\n => ui.s ! VIImperat b n} ;
{s = \\n => ui.s ! b ! VIImperat n} ;
imperUtterance : Number -> Imperative -> Utterance = \n,I ->
ss (I.s ! n ++ exclPunct) ;

View File

@@ -5,9 +5,9 @@
-- Stability : (stable)
-- Portability : (portable)
--
-- > CVS $Date: 2005/07/01 17:14:26 $
-- > CVS $Author: peb $
-- > CVS $Revision: 1.8 $
-- > CVS $Date: 2005/07/01 19:54:09 $
-- > CVS $Author: aarne $
-- > CVS $Revision: 1.9 $
--
-- Help on shell commands. Generated from HelpFile by 'make help'.
-- PLEASE DON'T EDIT THIS FILE.