From e5fe5d55c986268dc94703761bc6be4d45282214 Mon Sep 17 00:00:00 2001 From: aarne Date: Sat, 28 Sep 2013 03:06:55 +0000 Subject: [PATCH] refined the types Adv and Prep in Chi to control the presence of the zai auxiliary --- lib/src/chinese/AdverbChi.gf | 2 +- lib/src/chinese/ConjunctionChi.gf | 8 ++++---- lib/src/chinese/DictEngChi.gf | 28 ++++++++++++++-------------- lib/src/chinese/ParadigmsChi.gf | 17 +++++++++++------ lib/src/chinese/ResChi.gf | 19 ++++++++++++++----- lib/src/chinese/StructuralChi.gf | 14 +++++++------- lib/src/chinese/VerbChi.gf | 11 ++++++++--- 7 files changed, 59 insertions(+), 40 deletions(-) diff --git a/lib/src/chinese/AdverbChi.gf b/lib/src/chinese/AdverbChi.gf index c349a96c0..d47786c8b 100644 --- a/lib/src/chinese/AdverbChi.gf +++ b/lib/src/chinese/AdverbChi.gf @@ -4,7 +4,7 @@ concrete AdverbChi of Adverb = CatChi ** lin PositAdvAdj a = {s = a.s ; advType = ATManner} ; - PrepNP prep np = ss (appPrep prep np.s) ** {advType = ATPlace} ; --- should depend on prep, np ? or treat in ExtraChi ? + PrepNP prep np = ss (appPrep prep np.s) ** {advType = prep.advType} ; --- should depend on np too ? ComparAdvAdj cadv a np = ss (a.s ++ cadv.s ++ cadv.p ++ np.s) ** {advType = ATManner} ; diff --git a/lib/src/chinese/ConjunctionChi.gf b/lib/src/chinese/ConjunctionChi.gf index 8476efc8f..2b93a566b 100644 --- a/lib/src/chinese/ConjunctionChi.gf +++ b/lib/src/chinese/ConjunctionChi.gf @@ -3,7 +3,7 @@ concrete ConjunctionChi of Conjunction = CatChi ** open ResChi, Prelude, Coordin lin ConjS c = conjunctDistrSS (c.s ! CSent) ; - ConjAdv c as = conjunctDistrSS (c.s ! CSent) as ** {advType = ATPlace} ; ---- ?? + ConjAdv c as = conjunctDistrSS (c.s ! CSent) as ** {advType = as.advType} ; ---- ?? ConjNP c = conjunctDistrSS (c.s ! CPhr CNPhrase) ; ConjAP c as = conjunctDistrSS (c.s ! CPhr CAPhrase) as ** {monoSyl = False} ; ConjRS c = conjunctDistrSS (c.s ! CSent) ; @@ -12,8 +12,8 @@ concrete ConjunctionChi of Conjunction = CatChi ** open ResChi, Prelude, Coordin BaseS = twoSS ; ConsS = consrSS duncomma ; - BaseAdv = twoSS ; - ConsAdv = consrSS duncomma ; + BaseAdv x y = twoSS x y ** {advType = x.advType} ; ---- ?? + ConsAdv x xs = consrSS duncomma x xs ** {advType = x.advType} ; ---- ?? BaseNP = twoSS ; ConsNP = consrSS duncomma ; BaseAP = twoSS ; @@ -23,7 +23,7 @@ concrete ConjunctionChi of Conjunction = CatChi ** open ResChi, Prelude, Coordin lincat [S] = {s1,s2 : Str} ; - [Adv] = {s1,s2 : Str} ; + [Adv] = {s1,s2 : Str ; advType : AdvType} ; [NP] = {s1,s2 : Str} ; [AP] = {s1,s2 : Str} ; [RS] = {s1,s2 : Str} ; diff --git a/lib/src/chinese/DictEngChi.gf b/lib/src/chinese/DictEngChi.gf index 00d8ba718..c32cf2cfe 100644 --- a/lib/src/chinese/DictEngChi.gf +++ b/lib/src/chinese/DictEngChi.gf @@ -491,7 +491,7 @@ rate_N = mkN "率" ; bond_N = mkN "券" ; zoological_A = mkA "关于动物" ; time_N = mkN "时间" ; -presidentMasc_N = mkN "" ; --?? Don't understand +--* presidentMasc_N = mkN "" ; --?? Don't understand week_N = mkN "星期" ; investor_N = mkN "投资者" ; into_Prep = mkPrep "成" ; @@ -502,7 +502,7 @@ analyst_N = mkN "分析人士" ; make_V2 = mkV2 "使" ; cent_N = mkN "一分钱" ; only_Adv = mkAdv "只有" ; -anyPl_Det = mkpDet "" ; --?? Don't understand +--* anyPl_Det = mkpDet "" ; --?? Don't understand not_Adv = mkAdv "不" ; interest_N = mkN "利息" ; group_N = mkN "团" ; @@ -512,7 +512,7 @@ do_V = mkV "做" ; program_N = mkN "节目" ; recent_A = mkA "最近" ; firm_N = mkN "公司" ; -officialMasc_N = mkN "" ; --?? Don't understand +--* officialMasc_N = mkN "" ; --?? Don't understand fund_N = mkN "基金" ; unit_3_N = mkN "单元" ; yesterday_N = mkN "昨天" ; @@ -696,7 +696,7 @@ employee_N = mkN "职员" ; credit_N = mkN "信用" ; continue_VV = mkVV "继续" ; note_N = mkN "笔记" ; -customerMasc_N = mkN "" ; --?? Don't understand +--* customerMasc_N = mkN "" ; --?? Don't understand spend_V = mkV "花费" ; transaction_N = mkN "交易" ; about_AdN = mkAdN "关于" ; @@ -724,7 +724,7 @@ believe_VS = mkVS "相信" ; proposal_N = mkN "建议" ; political_A = mkA "政治性" ; base_V2 = mkV2 "垒" ; -amp_Conj = mkConj "" ; +amp_Conj = mkConj "&" ; pay_V = mkV "交纳" ; nation_N = mkN "国家" ; out_of_Prep = mkPrep "在什么以外" ; @@ -1285,7 +1285,7 @@ improvement_N = mkN "改善" ; himself_NP = mkNPword "他自己" ; commodity_N = mkN "商品" ; attract_V2 = mkV2 "吸引" ; -unchanged_A = mkA "" ; +--* unchanged_A = mkA "" ; traditional_A = mkA "传统" ; texas_PN = mkPN "德州" ; sense_N = mkN "感应" ; @@ -1302,7 +1302,7 @@ negotiation_N = mkN "谈判" ; key_A = mkA "关键" ; indeed_Adv = mkAdv "的确" ; appeal_N = mkN "上诉" ; -researcherMasc_N = mkN "" ; +--* researcherMasc_N = mkN "" ; phone_N = mkN "电话" ; need_N = mkN "需要" ; institutional_A = mkA "机构" ; @@ -1838,7 +1838,7 @@ outlook_N = mkN "展望" ; once_AdV = mkAdV "一次" ; match_V2 = mkV2 "比拟" ; leadership_N = mkN "领导" ; -in_toto_Adv = mkAdv "" ; -- ?? Don't undertstand +--* in_toto_Adv = mkAdv "" ; -- ?? Don't undertstand highway_N = mkN "公路" ; head_V = mkV "率领" ; exact_A = mkA "确切" ; @@ -1881,7 +1881,7 @@ chapter_N = mkN "章" ; cause_N = mkN "原因" ; ban_V2 = mkV2 "禁止" ; arrangement_N = mkN "安排" ; -americanMasc_N = mkN "" ; -- ?? Don't understand +--* americanMasc_N = mkN "" ; -- ?? Don't understand try_V = mkV "试图" ; taxpayer_N = mkN "纳税人" ; stop_V2 = mkV2 "停" ; @@ -2258,7 +2258,7 @@ resistance_N = mkN "阻力" ; reputation_N = mkN "声誉" ; putt_V2 = mkV2 "推杆" ; pharmaceutical_A = mkA "药方" ; -perform_V = mkV "" ; +--* perform_V = mkV "" ; numerous_A = mkA "众多" ; modern_A = mkA "现代" ; impossible_A = mkA "不可能" ; @@ -3633,7 +3633,7 @@ virus_N = mkN "病毒" ; uphold_V2 = mkV2 "坚持" ; unspecified_A = mkA "不明" ; unrelated_A = mkA "无关" ; -understand_V = mkV "" ; +understand_V = mkV "了解" ; tremor_N = mkN "震" ; transition_N = mkN "过渡" ; touch_N = mkN "触摸" ; @@ -4866,7 +4866,7 @@ watch_V2V = mkV2V "看" ; wane_V = mkV "没落" ; walk_V2 = mkV2 "走" ; visual_A = mkA "看" ; -v_and_a_N = mkN "" ; -- ?? Don't understand +--* v_and_a_N = mkN "" ; -- ?? Don't understand upward_A = mkA "向上" ; until_Subj = mkSubj "直到" ; unsolicited_A = mkA "不请自来" ; @@ -4909,7 +4909,7 @@ shore_V2 = mkV2 "支撑" ; shell_N = mkN "外壳" ; shape_V2 = mkV2 "塑造" ; shape_V = mkV "塑" ; -shah_N = mkN "" ; -- ?? Don't understand +--* shah_N = mkN "" ; -- ?? Don't understand seniority_N = mkN "排行" ; select_V = mkV "选择" ; scope_N = mkN "范围" ; @@ -4984,7 +4984,7 @@ invade_V2 = mkV2 "入侵" ; intensive_A = mkA "紧张" ; intensity_N = mkN "强度" ; intensify_V = mkV "强化" ; -instruct_V2 = mkV2 "" ; +--* instruct_V2 = mkV2 "" ; install_V = mkV "安装" ; inspection_N = mkN "检查" ; inspect_V2 = mkV2 "检查" ; diff --git a/lib/src/chinese/ParadigmsChi.gf b/lib/src/chinese/ParadigmsChi.gf index 70d79e974..1108004de 100644 --- a/lib/src/chinese/ParadigmsChi.gf +++ b/lib/src/chinese/ParadigmsChi.gf @@ -50,7 +50,8 @@ oper mkV2 : Str -> V2 = \s -> case s of { v + "+" + p => lin V2 (regVerb v ** {c2 = emptyPrep ; hasPrep = False ; part = word p}) ; - v + "*" + p => lin V2 (regVerb v ** {c2 = ResChi.mkPreposition p [] ; hasPrep = True ; part = []}) ; + v + "*" + p => lin V2 (regVerb v ** + {c2 = ResChi.mkPreposition p [] (getAdvType p) ; hasPrep = True ; part = []}) ; _ => lin V2 (regVerb s ** {c2 = emptyPrep ; hasPrep = False ; part = []}) } ; mkV2 : V -> V2 @@ -123,15 +124,17 @@ oper mkAdv = overload { mkAdv : Str -> Adv - = \s -> lin Adv {s = word s ; advType = ATPlace} ; + = \s -> lin Adv {s = word s ; advType = getAdvType s} ; mkAdv : Str -> AdvType -> Adv = \s,at -> lin Adv {s = word s ; advType = at} ; } ; AdvType : Type = ResChi.AdvType ; - placeAdvType : AdvType - = ATPlace ; + placeAdvType : AdvType -- without "在" included + = ATPlace False ; + zai_placeAdvType : AdvType -- with "在" included + = ATPlace True ; timeAdvType : AdvType = ATTime ; mannerAdvType : AdvType @@ -139,9 +142,11 @@ oper mkPrep = overload { -- first pre part, then optional post part mkPrep : Str -> Prep - = \s -> lin Prep (ResChi.mkPreposition s []) ; + = \s -> lin Prep (ResChi.mkPreposition s [] (getAdvType s)) ; mkPrep : Str -> Str -> Prep - = \s,t -> lin Prep (ResChi.mkPreposition s t) ; + = \s,t -> lin Prep (ResChi.mkPreposition s t (getAdvType s)) ; + mkPrep : Str -> Str -> AdvType -> Prep + = \s,t,a -> lin Prep (ResChi.mkPreposition s t a) ; } ; mkInterj : Str -> Interj diff --git a/lib/src/chinese/ResChi.gf b/lib/src/chinese/ResChi.gf index d690b1672..1c49a7034 100644 --- a/lib/src/chinese/ResChi.gf +++ b/lib/src/chinese/ResChi.gf @@ -62,7 +62,7 @@ resource ResChi = ParamX ** open Prelude in { -- Write the characters that constitute a word separately. This enables straightforward tokenization. - bword : Str -> Str -> Str = \x,y -> x ++ y ; -- change to x + y to treat words as single tokens + bword : Str -> Str -> Str = \x,y -> x + y ; -- change to x + y to treat words as single tokens word : Str -> Str = \s -> case s of { x@? + y@? + z@? + u@? + v@? + w@? + a@? + b@? => bword x (bword y (bword z (bword u (bword v (bword w (bword a b)))))) ; @@ -87,7 +87,7 @@ param CPosType = CAPhrase | CNPhrase | CVPhrase ; DeForm = DeNoun | NdNoun ; -- parameter created for noun with/out partical "de" - AdvType = ATPlace | ATTime | ATManner ; + AdvType = ATPlace Bool | ATTime | ATManner ; -- ATPlace True = has zai_s already -- parts of speech @@ -118,6 +118,8 @@ oper regVerb : (walk : Str) -> Verb = \v -> mkVerb v "了" "着" "在" "过" "没" ; + noVerb : Verb = regVerb [] ; ---?? -- used as copula for verbal adverbs + mkVerb : (v : Str) -> (pp,ds,dp,ep,neg : Str) -> Verb = \v,pp,ds,dp,ep,neg -> {s = word v ; pp = pp ; ds = ds ; dp = dp ; ep = ep ; neg = neg} ; @@ -224,18 +226,25 @@ oper pronNP : (s : Str) -> NP = \s -> { s = word s } ; + + Preposition = {prepPre : Str ; prepPost : Str ; advType : AdvType} ; - mkPreposition : Str -> Str -> Preposition = \s1,s2 -> { + mkPreposition : Str -> Str -> AdvType -> Preposition = \s1,s2,at -> { prepPre = word s1 ; - prepPost = word s2 + prepPost = word s2 ; + advType = at } ; + getAdvType : Str -> AdvType = \s -> case s of { + "在" + _ => ATPlace True ; -- certain that True + _ => ATPlace False -- uncertain whether ATPlace + } ; + mkSubj : Str -> Str -> {prePart : Str ; sufPart : Str} = \p,s -> { prePart = word p ; sufPart = word s } ; - Preposition = {prepPre : Str ; prepPost : Str} ; -- added by AR diff --git a/lib/src/chinese/StructuralChi.gf b/lib/src/chinese/StructuralChi.gf index c54c0d042..980b2fd56 100644 --- a/lib/src/chinese/StructuralChi.gf +++ b/lib/src/chinese/StructuralChi.gf @@ -19,7 +19,7 @@ lin very_AdA = ssword "非常" ; - by8means_Prep = mkPrep [] "旁边" ; + by8means_Prep = mkPrep [] "旁边" mannerAdvType ; -- in_Prep = mkPrep "里" []; --- in Paris in_Prep = mkPrep "在" "中" ; --- in the house, the car, etc possess_Prep = mkPrep [] "的" ; @@ -66,12 +66,12 @@ lin above_Prep = mkPrep [] "上边" ; -after_Prep = mkPrep [] "以后" ; +after_Prep = mkPrep [] "以后" timeAdvType ; under_Prep = mkPrep [] "下" ; why_IAdv = mkIAdvL "为什么" ; too_AdA = mkAdA "太" ; -before_Prep = mkPrep [] "之前" ; +before_Prep = mkPrep [] "之前" timeAdvType ; between_Prep = mkPrep [] "之间" ; but_PConj = mkPConjL "但是" ; @@ -83,7 +83,7 @@ but_PConj = mkPConjL "但是" ; can8know_VV = mkV "会" [] [] [] [] "不" ; ---- -except_Prep = mkPrep "以外" "除了" ; +except_Prep = mkPrep "以外" "除了" mannerAdvType ; for_Prep = mkPrep "为了" ; from_Prep = mkPrep "从" ; in8front_Prep = mkPrep zai_s "前边" ; @@ -125,9 +125,9 @@ both7and_DConj = {s = table { -- modified by chenpeng 11.19 } } ; -by8agent_Prep = mkPrep "被" ; -- by for agent in passive +by8agent_Prep = mkPrep "被" [] mannerAdvType; -- by for agent in passive -- [mark] 被 -during_Prep = mkPrep "在" "期间" ; -- [mark] often equivalent to nothing +during_Prep = mkPrep "在" "期间" timeAdvType ; -- [mark] often equivalent to nothing -- translation for "he swam during this summer. " and "he swam this summer." are often the same either7or_DConj = {s = table { -- modified by chenpeng 11.19 @@ -173,7 +173,7 @@ therefore_PConj = ssword "因此" ; through_Prep = mkPrep "通过" ; which_IQuant = mkIQuant "哪" ; --which_IQuant = ssword [] ; -- [mark] in sent, it depends on the context -without_Prep = mkPrep "没有" ; +without_Prep = mkPrep "没有" [] mannerAdvType ; youPol_Pron = ssword "您" ; -- polite you } diff --git a/lib/src/chinese/VerbChi.gf b/lib/src/chinese/VerbChi.gf index 43d8343d3..efcaa370e 100644 --- a/lib/src/chinese/VerbChi.gf +++ b/lib/src/chinese/VerbChi.gf @@ -43,7 +43,8 @@ concrete VerbChi of Verb = CatChi ** open ResChi, Prelude in { (insertObj (mkNP (infVP vp)) (predV v v.part)) ** {c2 = vp.c2 ; isPre = vp.isPre} ; AdvVP vp adv = case adv.advType of { - ATManner => insertObj (ss (deVAdv_s ++ adv.s)) vp ; -- he sleeps well + ATManner => insertObj (ss (deVAdv_s ++ adv.s)) vp ; -- he sleeps well + ATPlace True => insertAdv adv vp ; -- he sleeps on the table (zai - shang) _ => insertAdv (ss (zai_V.s ++ adv.s)) vp -- he sleeps in the house / today } ; @@ -59,12 +60,16 @@ concrete VerbChi of Verb = CatChi ** open ResChi, Prelude in { CompCN cn = insertObj cn (predV copula []) ; ---- - CompAdv adv = insertObj adv (predV zai_V []) ; + CompAdv adv = case adv.advType of { + ATPlace True => insertObj adv (predV noVerb []) ; + _ => insertObj adv (predV zai_V []) + } ; VPSlashPrep vp prep = vp ** {c2 = prep ; isPre = True} ; AdvVPSlash vp adv = case adv.advType of { - ATManner => insertObj (ss (deVAdv_s ++ adv.s)) vp ; -- he sleeps well + ATManner => insertObj (ss (deVAdv_s ++ adv.s)) vp ; -- he sleeps well + ATPlace True => insertAdv adv vp ; -- he sleeps on the table _ => insertAdv (ss (zai_V.s ++ adv.s)) vp -- he sleeps in the house / today } ** {c2 = vp.c2 ; isPre = vp.isPre} ;