From 9da4ea3f5cf6f0b5bcbc67fae57c3b26f96fca90 Mon Sep 17 00:00:00 2001 From: Inari Listenmaa Date: Mon, 26 Nov 2018 17:03:09 +0100 Subject: [PATCH 1/2] (Ara) Add word order as a parameter to Subj --- src/arabic/AdverbAra.gf | 2 +- src/arabic/CatAra.gf | 2 +- src/arabic/ParadigmsAra.gf | 10 ++++++++++ src/arabic/StructuralAra.gf | 7 +++---- 4 files changed, 15 insertions(+), 6 deletions(-) diff --git a/src/arabic/AdverbAra.gf b/src/arabic/AdverbAra.gf index d10d2ac4..c02aa593 100644 --- a/src/arabic/AdverbAra.gf +++ b/src/arabic/AdverbAra.gf @@ -16,7 +16,7 @@ concrete AdverbAra of Adverb = CatAra ** open ResAra, Prelude in { AdAdv ad av = cc2 av ad ; -- : Subj -> S -> Adv ; -- when she sleeps - SubjS subj s = {s = subj.s ++ s.s ! Subord} ; + SubjS subj s = {s = subj.s ++ s.s ! subj.o} ; -- AdvSC s = s ; --- this rule give stack overflow in ordinary parsing diff --git a/src/arabic/CatAra.gf b/src/arabic/CatAra.gf index 1902bfac..6cb7ccdb 100644 --- a/src/arabic/CatAra.gf +++ b/src/arabic/CatAra.gf @@ -72,7 +72,7 @@ concrete CatAra of Cat = CommonX - [Utt] ** open ResAra, Prelude, ParamX in { Conj = {s : Str ; n : ResAra.Number} ; -- DConj = {s1,s2 : Str ; n : ResAra.Number} ; --- Subj = {s : Str} ; + Subj = {s : Str ; o : Order} ; Prep = ResAra.Preposition ; -- Open lexical classes, e.g. Lexicon diff --git a/src/arabic/ParadigmsAra.gf b/src/arabic/ParadigmsAra.gf index fc196e91..f3fdb6ef 100644 --- a/src/arabic/ParadigmsAra.gf +++ b/src/arabic/ParadigmsAra.gf @@ -172,6 +172,11 @@ resource ParadigmsAra = open mkInterj : Str -> Interj ; + mkSubj : overload { + mkSubj : Str -> Subj ; -- Default order Subord (=noun first and in accusative) + mkSubj : Str -> Order -> Subj -- Specify word order + } ; + --2 Prepositions -- -- A preposition as used for rection in the lexicon, as well as to @@ -659,6 +664,11 @@ resource ParadigmsAra = open mkAdA x = lin AdA (ss x) ; mkInterj x = lin Interj (ss x) ; + mkSubj = overload { + mkSubj : Str -> Subj = \s -> lin Subj {s = s ; o = Subord} ; + mkSubj : Str -> Order -> Subj = \s,o -> lin Subj {s = s ; o = o} ; + } ; + dirV2 v = prepV2 v (casePrep acc) ; mkV3 = overload { diff --git a/src/arabic/StructuralAra.gf b/src/arabic/StructuralAra.gf index 7ae7afd3..f4abefa2 100644 --- a/src/arabic/StructuralAra.gf +++ b/src/arabic/StructuralAra.gf @@ -62,8 +62,7 @@ concrete StructuralAra of Structural = CatAra ** -- isAux = True -- } ; no_Utt = {s = \\_ => "لا"} ; - on_Prep = mkPrep "عَلى" ; ---- DEPREC one_Quant = mkQuantNum "واحِد" Sg Indef ; + on_Prep = mkPrep "عَلَى" ; only_Predet = mkPredet "فَقَط" False; -- or_Conj = ss "ْر" ** {n = Sg} ; -- otherwise_PConj = ss "ْتهروِسي" ; @@ -79,7 +78,7 @@ concrete StructuralAra of Structural = CatAra ** something_NP = regNP "شَيْء" Sg ; -- somewhere_Adv = ss "سْموهري" ; that_Quant = mkQuant3 "ذَلِكَ" "تِلكَ" "أُلٱِكَ" Def; - that_Subj = ss "أنَّ" ; + that_Subj = mkSubj "أنَّ" ; ----b that_NP = indeclNP "ذَلِكَ" Sg ; there_Adv = ss "هُناك" ; -- there7to_Adv = ss "تهري" ; @@ -100,7 +99,7 @@ concrete StructuralAra of Structural = CatAra ** whatPl_IP = mkIP "ما" "ماذا" Pl ; whatSg_IP = mkIP "ما" "ماذا" Sg ; when_IAdv = ss "مَتَى" ; --- when_Subj = ss "وهن" ; + when_Subj = mkSubj "عِنْدَمَا" Verbal ; where_IAdv = ss "أَينَ" ; which_IQuant = { s = \\s,c => case of { From a29a4132cf10554e763e0826dd2e0f972a922ad5 Mon Sep 17 00:00:00 2001 From: Inari Listenmaa Date: Mon, 26 Nov 2018 17:03:31 +0100 Subject: [PATCH 2/2] (Ara) misc. small fixes/additions --- src/arabic/ParadigmsAra.gf | 20 ++++++++++++++------ src/arabic/ResAra.gf | 7 +++++-- src/arabic/VerbAra.gf | 6 ++++++ 3 files changed, 25 insertions(+), 8 deletions(-) diff --git a/src/arabic/ParadigmsAra.gf b/src/arabic/ParadigmsAra.gf index f3fdb6ef..b00c1844 100644 --- a/src/arabic/ParadigmsAra.gf +++ b/src/arabic/ParadigmsAra.gf @@ -50,6 +50,10 @@ resource ParadigmsAra = open masc : Gender ; fem : Gender ; + Number : Type ; + sg : Number ; + pl : Number ; + Species : Type ; hum : Species ; nohum : Species ; @@ -71,8 +75,8 @@ resource ParadigmsAra = open mkN : NTable -> Gender -> Species -> N ; -- loan words, irregular mkN : (root,sgPatt,brokenPlPatt : Str) -> Gender -> Species -> N ; -- broken plural mkN : N -> (attr : Str) -> N ; -- Compound noun with invariant attribute - mkN : N -> N -> N ; -- Compound noun where attribute inflects in state and case but not number - mkN : Number -> N -> N -> N ; -- Compound noun where attribute inflects in state, case and number + mkN : N -> N -> N ; -- Compound noun where attribute inflects in state and case. Attribute in singular. + mkN : Number -> N -> N -> N ; -- Compound noun where attribute inflects in state and case. Attribute's number specified by 1st arg. --- mkN : (root,sgPatt : Str) -> Gender -> Species -> N -- sound feminine plural --- = sdfN ; } ; @@ -102,7 +106,7 @@ resource ParadigmsAra = open mkPN : Str -> PN -- Fem Hum if ends with ة, otherwise Masc Hum = smartPN ; mkPN : N -> PN - = \n -> lin PN (n ** {s = \\c => n.s ! Sg ! Const ! Bare}) ; -- no idea /IL + = \n -> lin PN (n ** {s = \\c => n.s ! Sg ! Const ! c ++ n.s2 ! Sg ! Const ! c }) ; -- no idea /IL mkPN : Str -> Gender -> Species -> PN = mkFullPN ; } ; @@ -306,6 +310,10 @@ resource ParadigmsAra = open masc = ResAra.Masc ; fem = ResAra.Fem ; + Number = ResAra.Number ; + sg = ResAra.Sg ; + pl = ResAra.Pl ; + Species = ResAra.Species ; hum = ResAra.Hum ; nohum = ResAra.NoHum ; @@ -608,9 +616,9 @@ resource ParadigmsAra = open mascTbl = reg jadId judud ; femTbl = reg jadIda judud ; in { s = table { - APosit Masc n d c => mascTbl ! n ! d ! c ; - APosit Fem n d c => femTbl ! n ! d ! c ; - AComp d c => indeclN akbar ! d ! c } + APosit Masc n d c => rectifyHmz (mascTbl ! n ! d ! c) ; + APosit Fem n d c => rectifyHmz (femTbl ! n ! d ! c) ; + AComp d c => rectifyHmz (indeclN akbar ! d ! c) } } ; degrA : (posit,compar,plur : Str) -> A diff --git a/src/arabic/ResAra.gf b/src/arabic/ResAra.gf index 95335fe8..e1699cf1 100644 --- a/src/arabic/ResAra.gf +++ b/src/arabic/ResAra.gf @@ -1231,7 +1231,7 @@ patHollowImp : (_,_ :Str) -> Gender => Number => Str =\xaf,xAf -> => Acc; => Gen; => Gen; - <_,Const> => Gen; + <_,Const> => Gen; -- not sure if this is an actual rule /IL _ => c }; @@ -1534,7 +1534,10 @@ patHollowImp : (_,_ :Str) -> Gender => Number => Str =\xaf,xAf -> => verbalAgr np.a.pgn; _ => np.a.pgn }; - sc : Preposition = case o of {Subord => {s=[]; c=Acc} ; _ => vp.sc} ; + sc : Preposition = case o of { -- very unsure of this /IL + Subord => {s=[]; c=Acc} ; -- to prevent weird stuff with VVs + _ => case np.a.isPron of {True => noPrep; _ => vp.sc} + } ; subj = np.empty ++ sc.s ++ case vp.isPred of { False => (proDrop np).s ! sc.c ; -- prodrop if it's not predicative diff --git a/src/arabic/VerbAra.gf b/src/arabic/VerbAra.gf index c0e0b7e9..2fe248c3 100644 --- a/src/arabic/VerbAra.gf +++ b/src/arabic/VerbAra.gf @@ -69,6 +69,12 @@ concrete VerbAra of Verb = CatAra ** open Prelude, ResAra, ParamX in { UseCopula = predV copula ; + -- : VP -> Prep -> VPSlash ; -- live in (it) + VPSlashPrep vp prep = vp ** { + c2 = prep ; + agrObj = \\_ => [] + } ; + AdvVP vp adv = insertStr adv.s vp ; AdVVP adv = insertStr adv.s ;