fixes in clefts and V3 in Chi; new pinyin versions

This commit is contained in:
aarne
2012-10-16 09:36:05 +00:00
parent fefb95ecc7
commit 7fa0407a6f
18 changed files with 211 additions and 204 deletions

View File

@@ -11,15 +11,15 @@ concrete ConjunctionChi of Conjunction = CatChi ** open ResChi, Prelude, Coordin
-- These fun's are generated from the list cat's.
BaseS = twoSS ;
ConsS = consrSS thcomma ;
ConsS = consrSS duncomma ;
BaseAdv = twoSS ;
ConsAdv = consrSS thcomma ;
ConsAdv = consrSS duncomma ;
BaseNP = twoSS ;
ConsNP = consrSS thcomma ;
ConsNP = consrSS duncomma ;
BaseAP = twoSS ;
ConsAP = consrSS thcomma ;
ConsAP = consrSS duncomma ;
BaseRS = twoSS ;
ConsRS = consrSS thcomma ;
ConsRS = consrSS duncomma ;
lincat
[S] = {s1,s2 : Str} ;
@@ -28,7 +28,4 @@ concrete ConjunctionChi of Conjunction = CatChi ** open ResChi, Prelude, Coordin
[AP] = {s1,s2 : Str} ;
[RS] = {s1,s2 : Str} ;
oper
thcomma : Str = [] ; ---- should be a space
}

View File

@@ -10,9 +10,9 @@ concrete IdiomChi of Idiom = CatChi ** open Prelude, ResChi in {
-- GenericCl vp = mkClause "有人" vp ; (meaning: there is a person)
---- it is John who did it
CleftNP np rs = mkClause np.s copula rs.s ;
CleftNP np rs = mkClause rs.s copula np.s ; -- did it + de + is I
CleftAdv ad s = mkClause ad.s (insertObj s (predV copula)) ; ---- it is here she slept
CleftAdv ad s = mkClause (s.s ++ possessive_s) copula ad.s ; -- she sleeps + de + is here
ExistNP np = mkClause [] (regVerb you_s) np.s ; ---- infl of you
@@ -20,7 +20,7 @@ concrete IdiomChi of Idiom = CatChi ** open Prelude, ResChi in {
ProgrVP vp = vp ; ----
ImpPl1 vp = ss (infVP vp) ; ----
ImpPl1 vp = ss (zan_s ++ men_s ++ infVP vp ++ ba0_s) ;
}

View File

@@ -238,7 +238,7 @@ Issues from
London and New York,
2009.
p. 4 the dun-comma in lists
p. 4 the dun-comma in lists DONE
p. 28 "who is X" vs. "X is who"
@@ -260,7 +260,7 @@ p. 97 AB -> AABB reduplication
p. 104 non-gradable adjectives require shi: zhei tiao yu shi huo de -> keep this as general rule for APs so far
p. 106 it was Chinese that I studied -> move cleft to the end
p. 106 it was Chinese that I studied -> move cleft to the end DONE 16/10
p. 116 I did it better than you -> to implement
@@ -272,7 +272,7 @@ p. 168 "can": hui/neng
p. 174 negation and tense
p. 185 yes/no
p. 185 yes/no DONE
p. 186 alternation questions
@@ -280,7 +280,7 @@ p. 197 "or" haishi/huozhe
p. 206 "please" in imperative
p. 207 "let's" zanmen he yi bei ba
p. 207 "let's" zanmen he yi bei ba DONE 16/10
p. 242 coverbs
@@ -294,6 +294,27 @@ RGL implementation took 4 person weeks altogether. The remaining immediate fixes
However, there is a lot of Chinese that we will leave outside the common RGL abstract syntax.
16/10
Some more changes in the (almost) complete Chi. It has 546 words:
0 1 2 3 4 5 6 7 8 9 、 。 一 七 万 丈 三 上 下 不 丑 业 丢 两 个 中 为 么 之 乎 乐 九 乞 书 买 了 争 事 二
云 五 些 亮 亲 人 什 今 从 他 以 们 件 会 但 位 何 你 候 做 停 像 儿 光 八 公 六 关 写 冰 冷 净 准 几 则 到
刺 前 副 割 劈 加 动 包 匹 医 十 千 单 卖 厂 厌 厚 去 又 友 发 变 只 可 台 右 叶 号 吃 名 后 吐 吗 吧 听 吸
吹 呕 呼 和 咬 咱 哪 唉 唱 商 啤 喜 喝 嘴 四 回 因 园 国 圆 土 在 地 场 坏 坐 块 城 堂 堆 塑 处 备 外 多 夜
大 天 太 夫 头 奇 套 女 奶 她 好 如 妹 妻 姑 娘 婚 婴 子 字 学 孩 它 宗 定 家 宽 寄 寓 察 对 寻 小 少 尖 尘
就 尾 屋 山 工 左 己 已 巴 市 师 希 常 帽 干 平 年 庄 店 座 开 弟 张 往 很 得 心 必 忘 怕 您 想 懂 我 或 战
房 所 扇 手 打 扔 把 报 拉 指 挖 挤 推 揉 握 搔 摄 摆 擦 收 敌 教 数 文 料 新 旁 旅 时 明 星 是 晚 暖 更 最
月 有 朋 服 望 期 木 本 术 朵 机 杀 村 条 来 杯 板 林 果 枝 架 某 树 校 根 桌 桶 棕 森 棵 椅 橡 欢 歌 止 此
死 母 每 比 毛 毯 水 求 汽 沙 没 河 油 法 泳 洗 活 流 浮 海 温 港 游 湖 湿 滑 满 滴 漂 火 灯 灰 炉 烂 烟 烧
热 然 爱 父 片 牙 牛 牧 物 狗 猎 猫 王 玩 现 球 理 瓶 生 甲 电 男 画 白 百 的 皮 盏 盐 盒 盖 直 看 眼 着 睛
睡 知 短 石 码 破 确 离 种 科 空 窄 窗 站 笑 笔 笨 第 等 答 简 算 箱 粒 红 约 纸 经 绑 结 给 绳 绿 缝 羊 羽
翅 翰 老 而 耳 聪 肉 肚 肝 肠 肪 胀 背 胶 胸 能 脂 脏 脖 脚 腿 膀 膝 膨 自 舌 船 艘 艺 花 苹 草 落 蓝 薄 虫
虱 虽 蛇 蛋 血 行 衣 表 衫 衬 袜 被 要 规 视 角 言 警 计 讨 语 说 请 读 谁 赢 走 起 趣 跑 距 路 跳 躺 车 转
轻 辆 边 过 近 还 这 远 通 道 那 酒 酪 里 重 金 钝 钢 铁 银 长 门 闭 问 间 闻 阳 阵 除 雨 雪 零 雾 非 面 革
靴 鞋 音 顶 项 须 颗 题 风 飞 饭 首 马 骨 鱼 鸟 黄 黎 黑 鼻 齿
Also updated the Pinyin version and created a Makefile to convert Chi to Cmn.

View File

@@ -44,10 +44,18 @@ resource ResChi = ParamX ** open Prelude in {
zai_V = mkVerb "在" [] [] [] [] "不" ;
fullstop_s = "。" ;
questmark_s = "" ;
exclmark_s = "!" ;
exclmark_s = "" ;
ge_s = "个" ;
di_s = "是" ; -- used in QuestSlash
ba_s = "把" ;
ba_s = "把" ; -- ba4, object marker
ba0_s = "吧" ; -- ba, used in imperatives
men_s = "们" ;
zan_s = "咱" ;
say_s = "说" ; -- used in embedded sentences: she answers him that we sleep
duncomma = "、" ;
chcomma = "" ;
emptyStr = [] ;

View File

@@ -49,7 +49,7 @@ where_IAdv = mkIAdvL "哪里" ;
when_IAdv = mkIAdvL "什么时候" ;
how_IAdv = mkIAdvL "如何" ;
all_Predet = ssword "所有" ;
many_Det = mkDet "很多" DTPoss ;
many_Det = mkDet (word "很多") DTPoss ;
someSg_Det = mkDet (word "一些") Sg ;
somePl_Det = mkDet (word "一些") Sg ;
few_Det = mkDet "少" Pl ;
@@ -145,7 +145,7 @@ so_AdA = ssword "如此" ;
somebody_NP = ssword "某人" ;
something_NP = ssword "某事" ; -- [mark] in sent, it depends on the context
somewhere_Adv = mkAdv "某处" ;
that_Subj = mkSubj [] ", " ; -- that + S [mark] comma
that_Subj = mkSubj [] chcomma ; -- that + S [mark] comma
there7from_Adv = mkAdv "从那里" ; -- from there
there7to_Adv = mkAdv "到那里" ;
therefore_PConj = ssword "因此" ;

View File

@@ -7,14 +7,14 @@ concrete VerbChi of Verb = CatChi ** open ResChi, Prelude in {
SlashV2a v = predV v ** {c2 = v.c2 ; isPre = False} ;
Slash2V3 v np = insertObj np (predV v) ** {c2 = v.c3 ; isPre = True} ;
Slash3V3 v np = insertObj np (predV v) ** {c2 = v.c2 ; isPre = False} ;
Slash2V3 v np = insertAdv (mkNP (ba_s ++ np.s)) (predV v) ** {c2 = v.c3 ; isPre = False} ; -- slot for third argument
Slash3V3 v np = insertObj (mkNP (appPrep v.c3 np.s)) (predV v) ** {c2 = v.c2 ; isPre = True} ; -- slot for ba object
SlashV2A v ap = insertObj ap (predV v) ** {c2 = v.c2 ; isPre = True} ;
SlashV2V v vp = insertObj (mkNP (infVP vp)) (predV v) ** {c2 = v.c2 ; isPre = True} ;
SlashV2S v s = insertObj s (predV v) ** {c2 = v.c2 ; isPre = True} ;
SlashV2Q v q = insertObj q (predV v) ** {c2 = v.c2 ; isPre = True} ;
SlashV2V v vp = insertObj (mkNP (infVP vp)) (predV v) ** {c2 = v.c2 ; isPre = True} ;
SlashV2S v s = insertObj (ss (say_s ++ s.s)) (predV v) ** {c2 = v.c2 ; isPre = True} ;
SlashV2Q v q = insertObj (ss (say_s ++ q.s)) (predV v) ** {c2 = v.c2 ; isPre = True} ;
ComplVV v vp = {
verb = v ;

View File

@@ -33,7 +33,7 @@ concrete CatCmn of Cat = CommonX - [Tense, Temp, Adv] ** open ResCmn, Prelude in
VP = ResCmn.VP ;
Comp = ResCmn.VP ;
VPSlash = ResCmn.VP ** {c2 : Preposition} ;
VPSlash = ResCmn.VP ** {c2 : Preposition ; isPre : Bool} ; -- whether the missing arg is before verb
-- Adjective
@@ -43,7 +43,8 @@ concrete CatCmn of Cat = CommonX - [Tense, Temp, Adv] ** open ResCmn, Prelude in
CN = ResCmn.Noun ;
NP, Pron = ResCmn.NP ;
Det, Quant = Determiner ;
Det = Determiner ;
Quant = Determiner ** {pl : Str} ;
Predet = {s : Str} ; ----
Ord = {s : Str} ;
Num = {s : Str ; numType : NumType} ;
@@ -52,7 +53,8 @@ concrete CatCmn of Cat = CommonX - [Tense, Temp, Adv] ** open ResCmn, Prelude in
-- Numeral
Numeral, Card, Digits = {s : Str} ;
Numeral = {s,p : Str} ;
Card, Digits = {s : Str} ;
-- Structural

View File

@@ -11,15 +11,15 @@ concrete ConjunctionCmn of Conjunction = CatCmn ** open ResCmn, Prelude, Coordin
-- These fun's are generated from the list cat's.
BaseS = twoSS ;
ConsS = consrSS thcomma ;
ConsS = consrSS duncomma ;
BaseAdv = twoSS ;
ConsAdv = consrSS thcomma ;
ConsAdv = consrSS duncomma ;
BaseNP = twoSS ;
ConsNP = consrSS thcomma ;
ConsNP = consrSS duncomma ;
BaseAP = twoSS ;
ConsAP = consrSS thcomma ;
ConsAP = consrSS duncomma ;
BaseRS = twoSS ;
ConsRS = consrSS thcomma ;
ConsRS = consrSS duncomma ;
lincat
[S] = {s1,s2 : Str} ;
@@ -28,7 +28,4 @@ concrete ConjunctionCmn of Conjunction = CatCmn ** open ResCmn, Prelude, Coordin
[AP] = {s1,s2 : Str} ;
[RS] = {s1,s2 : Str} ;
oper
thcomma : Str = [] ; ---- should be a space
}

View File

@@ -10,9 +10,9 @@ concrete IdiomCmn of Idiom = CatCmn ** open Prelude, ResCmn in {
-- GenericCl vp = mkClause "有人" vp ; (meaning: there is a person)
---- it is John who did it
CleftNP np rs = mkClause np.s copula rs.s ;
CleftNP np rs = mkClause rs.s copula np.s ; -- did it + de + is I
CleftAdv ad s = mkClause ad.s (insertObj s (predV copula)) ; ---- it is here she slept
CleftAdv ad s = mkClause (s.s ++ possessive_s) copula ad.s ; -- she sleeps + de + is here
ExistNP np = mkClause [] (regVerb you_s) np.s ; ---- infl of you
@@ -20,7 +20,7 @@ concrete IdiomCmn of Idiom = CatCmn ** open Prelude, ResCmn in {
ProgrVP vp = vp ; ----
ImpPl1 vp = ss (infVP vp) ; ----
ImpPl1 vp = ss (zan_s ++ men_s ++ infVP vp ++ ba0_s) ;
}

View File

@@ -17,35 +17,25 @@ lin
green_A = mkA "lu:4" ; -- "lv"
walk_V = mkV "zou3" ; -- "zou"
sleep_V = mkV "shui4" ; -- "shui"
---- arrive_V = mkV "dao4" "le" [] [] "guo4"; -- "dao"
love_V2 = mkV2 "ai4" ; -- "ai"
watch_V2 = mkV2 "kan1" ; -- "kan"
--- please2_V2 = mkV "ma2fan2" ; -- "mafan"
--- believe_VS = mkV "xiang1xin4" ; -- "xiangxin"
know_VS = mkV "zhi1dao4" ; -- "zhidao"
wonder_VQ = mkV "hao3ji1" ; -- "haoqi"
john_PN = mkPN "yao1han4" ; -- "yuehan"
--- mary_PN = mkPN "ma3li2" ; -- "mali"
-- Swadesh
--big_A = mkA "da4" ;
long_A = mkA "chang2" ;
wide_A = mkA "kuan1" ;
thick_A = mkA "hou4" ;
heavy_A = mkA "chong2" ;
--small_A = mkA "xiao3" ;
short_A = mkA "duan3" ;
narrow_A = mkA "zhai3" ;
thin_A = mkA "bo2" ; -- [mark] for person mkA "shou4"
--woman_N = mkN "nu:3ren2" ;
--man(adult_N = mkN "nan2ren2" ;
--man(human_N = mkN "ren2" ;
child_N = mkN "hai2zi3" ;
wife_N = mkN "qi1zi3" ;
husband_N = mkN "zhang4fu1" ;
--father_N = mkN "fu4qin1" ;
animal_N = mkN "dong4wu4" "qi2"; -- [mark] added classifier for nouns
fish_N = mkN "yu2" "tiao2";
bird_N = mkN "niao3" "qi2";
@@ -53,7 +43,6 @@ dog_N = mkN "gou3" "qi2";
louse_N = mkN "shi1" "qi2";
snake_N = mkN "she2" "tiao2";
worm_N = mkN "chong2" "qi2";
--tree_N = mkN "shu4" ;
forest_N = mkN "sen1lin2" "pian1";
stick_N = mkN "shu4zhi1" ;
fruit_N = mkN "shui3guo3" ;
@@ -105,11 +94,9 @@ breathe_V = mkV "hu1xi1" ;
laugh_V = mkV "xiao4" ;
see_V2 = mkV2 "kan1" ;
hear_V2 = mkV2 "ting1" ;
--know_V = mkV "zhi1dao4" ;
think_V = mkV "xiang3" ;
smell_V = mkV "wen2" ; -- [mark] "xiu4" -> "wen2", "wen2" is the common form for smell.
fear_V2 = mkV2 "pa4" ;
--sleep_V = mkV "shui4" ;
live_V = mkV "huo2" ;
die_V = mkV "si3" ;
kill_V2 = mkV2 "sha1" ;
@@ -123,7 +110,6 @@ scratch_V2 = mkV2 "sao1" ;
dig_V = mkV "wa1" ;
swim_V = mkV "you2yong3" ;
fly_V = mkV "fei1" ;
--walk_V = mkV "zou3" ;
come_V = mkV "lai2" ;
lie_V = mkV "tang3" ;
sit_V = mkV "zuo4" ;
@@ -174,7 +160,6 @@ burn_V = mkV "shao1" ;
road_N = mkN "lu4" "tiao2";
mountain_N = mkN "shan1" "zuo4";
red_A = mkA "hong2" ;
--green_A = mkA "lu:4" ;
yellow_A = mkA "huang2" ;
white_A = mkA "bai2" ;
black_A = mkA "hei1" ;
@@ -199,7 +184,7 @@ wet_A = mkA "shi1" ;
dry_A = mkA "gan1" ;
correct_A = mkA "dui4" ;
near_A = mkA "jin4" ;
far_A = mkA "yuan3" ;
--far_A = mkA "yuan3" ;
left_Ord = ss "zuo3" ;
right_Ord = ss "you4" ;
name_N = mkN "ming2zi4" ; -- [mark] "ming2" --> "ming2zi4"
@@ -234,10 +219,8 @@ cow_N = mkN "niu2" "tou2";
do_V2 = mkV2 "zuo4" ;
doctor_N = mkN "yi1sheng1" "ming2";
door_N = mkN "men2" "shan1";
---easy_A2V = mkA "rong2yi4" ;
factory_N = mkN "gong1chang3" "jian1";
far_Adv = mkAdv "yuan3" ;
---father_N2 = mkN2 "fu4qin1" ;
fear_VS = mkVS (mkV "pa4") ;
find_V2 = mkV2 "fa1xian4" ;
forget_V2 = mkV2 "wang4" ;
@@ -245,20 +228,13 @@ friend_N = mkN "peng2you3" ;
girl_N = mkN "gu1niang2" ;
give_V3 = mkV3 "gei3" ;
go_V = mkV "qu4" ;
--go_N = mkN "wang3" ;
grammar_N = mkN "yu3fa3" ;
hat_N = mkN "mao4zi3" "ding3";
--take_N = mkN "dai4" ;
--have_N = mkN "you3" ;
--take_N = mkN "dai4" ;
--have_N = mkN "you3" ;
hill_N = mkN "shan1" "zuo4";
hope_VS = mkV "xi1wang4" ;
horse_N = mkN "ma3" "pi1";
hot_A = mkA "re4" ;
--how many_N = mkN "duo1shao3" ;
important_A = mkA "chong2yao1" ;
--heavy_A = mkA "chong2" ;
industry_N = mkN "gong1ye4" [];
jump_V = mkV "tiao4" ;
know_V2 = mkV2 "zhi1dao4" ;
@@ -266,16 +242,11 @@ know_VQ = mkV "zhi1dao4" ;
lamp_N = mkN "deng1" "zhan3";
language_N = mkN "yu3yan2" "zhong3";
learn_V2 = mkV2 "xue2" ;
--leave_N = mkN "li2kai1" ;
leave_V2 = mkV2 "li2kai1" ; --[mark] "li2" --> "li2kai1", "li2" itself is either a morpheme, or a marker indicating distance
--walk_N = mkN "zou3" ;
like_V2 = mkV2 "xi3huan1" ;
--be willing_N = mkN "yuan4yi4" ;
listen_V2 = mkV2 "ting1" ;
lose_V2 = mkV2 "diu1" ;
--love_N = mkN "xi3huan1" ;
love_V2 = mkV2 "ai4" ;
---mother_N2 = mkN2 "ma1" ;
music_N = mkN "yin1le4" [] ; -- [mark] usually without classifier
newspaper_N = mkN "bao4zhi3" "zhang1"; --[mark] "bao4" --> "bao4zhi3"
now_Adv = mkAdv "xian4zai4" ;
@@ -283,91 +254,43 @@ number_N = mkN "hao2ma3" ; -- [mark] "hao2" --> "hao2ma3"
open_V2 = mkV2 "kai1" ;
paint_V2A = mkV2A (mkV "hua4") ;
paper_N = mkN "zhi3" "zhang1";
--place_N = mkN "defang1" ;
--part_N = mkN "bu4fen1" ;
pen_N = mkN "bi3" "qi2";
--pen_N = mkN "gang1bi3" "qi2";
person_N = mkN "ren2" ;
--beat_N = mkN "da2" ;
--pull_N = mkN "la1" ;
play_V2 = mkV2 "wan2" ; --[mark] "wan2er2" --> "wan2"
--perform_N = mkN "biao3yan3" ;
--have_N = mkN "you3" ;
put_V2 = mkV2 "bai3" ;
--let go_N = mkN "fang4" ;
question_N = mkN "wen4ti2" ;
--be enough_N = mkN "gou4" ;
--very_N = mkN "hen3" ;
rain_V0 = mkV "xia4yu3";
read_V2 = mkV2 "dou4" ;
reason_N = mkN "dao4li3" ;
restaurant_N = mkN "fan4dian4" "jian1";
--appropriate_N = mkN "ge3shi4" ;
--correct_N = mkN "zheng1que4" ;
--run_N = mkN "pao3bu4" ;
run_V = mkV "pao3" ;
--road_N = mkN "dao4" ;
school_N = mkN "xue2jiao4" "suo3";
science_N = mkN "ke1xue2" []; -- [mark] usually without classifier
sell_V3 = mkV3 "mai4" ;
--go_N = mkN "qu4" ;
send_V3 = mkV3 "ji4" ;
--clap_N = mkN "pai1" ;
sheep_N = mkN "yang2" "qi2";
ship_N = mkN "chuan2" "sao1";
shoe_N = mkN "xie2" "qi2";
shop_N = mkN "shang1dian4" "jian1";
--of that kind_N = mkN "na3yang4" ;
--what_N = mkN "shen2ma" ;
song_N = mkN "ge1" "shou3";
--tell_N = mkN "jiang3" ;
speak_V2 = mkV2 "shui4" ;
--road_N = mkN "dao4" ;
--live_N = mkN "zhu4" ;
--act as_N = mkN "dang1" ;
student_N = mkN "xue2sheng1" "ming2" ;
table_N = mkN "zhuo1zi3" "zhang1";
--word_N = mkN "hua4" ;
talk_V3 = mkV3 "shui4" ;
--talk_N = mkN "tan2" ;
--education_N = mkN "jiao1yu4" ;
teach_V2 = mkV2 "jiao1" ;
--coach_N = mkN "fu3dao3" ;
--teacher_N = mkN "xian1sheng1" ;
--master worker_N = mkN "shi1fu4" ;
teacher_N = mkN "lao3shi1" "ming2";
television_N = mkN "dian4shi4" "tai2";
--that_N = mkN "na3ge4" ;
--that_N = mkN "na3" ;
--from_N = mkN "cong1" ;
--by way of_N = mkN "tong1guo4" ;
--towards_N = mkN "xiang4" ;
--and_N = mkN "he2" ;
today_Adv = mkAdv "jin1tian1" ;
--now_N = mkN "xian4zai4" ;
--also_N = mkN "ye3" ;
train_N = mkN "huo3che1" "liang4";
travel_V = mkV "lu:3hang2" ;
--below_N = mkN "xia4bian1" ;
--understand_N = mkN "lejie3" ;
understand_V2 = mkV2 "dong3" ;
--recognize_N = mkN "ren4shi2" ;
--open up_N = mkN "tong1" ;
university_N = mkN "da4xue2" "suo3";
wait_V2 = mkV2 "deng3" ;
--need_N = mkN "xu1yao1" ;
watch_V2 = mkV2 "kan1" ;
--time_N = mkN "shi2hou4" ;
--wait_N = mkN "deng3" ;
--what_N = mkN "shen2ma" ;
--how_N = mkN "zen3ma" ;
win_V2 = mkV2 "ying2" ;
--window_N = mkN "chuang1hu4" ;
window_N = mkN "chuang1" "shan1";
wine_N = mkN "jiu3" "ping2";
--leave_N = mkN "li2" ;
--do_N = mkN "zuo4" ;
write_V2 = mkV2 "xie3" ;
young_A = mkA "nian2qing1" ;
@@ -427,7 +350,7 @@ war_N = mkN "zhan4zheng1" "chang3" ; -- [mark] rewritten
wood_N = mkN "mu4tou2" "kuai1" ; -- [mark] "mu4" --> "mu4tou2"
-- just missing
-- from scratch, by Jolene
lin
alas_Interj = ssword "ai1" ;

View File

@@ -0,0 +1,8 @@
all: cmn pinyin
pinyin:
runghc MkPinyin.hs
cmn:
cd .. ; runghc ../Clone.hs Chi Cmn ; mv *Cmn.gf pinyin/ ; cd pinyin

View File

@@ -1,5 +1,5 @@
import qualified Data.Map as Map
import Pinyin (c2pMap, useMapGF, mkList)
import Numeric
main = do
s <- readFile pinyinFile
@@ -7,9 +7,40 @@ main = do
mapM_ (mkPinyin m) ["Lexicon", "Numeral", "Res", "Structural"]
return ()
pinyinFile = "../pinyin.txt"
pinyinFile = "pinyin.txt"
mkPinyin ma mo = do
s <- readFile (mo ++ "Chi.gf")
s <- readFile ("../" ++ runghc MkPinyin.hsmo ++ "Chi.gf")
writeFile (mo ++ "Cmn.gf") (useMapGF ma s)
--import Pinyin (c2pMap, useMapGF, mkList)
-- AR 3/10/2012
-- Chinese unicode - character - pinyin conversions
-- character data from http://www.linguanaut.com/chinese_alphabet2.htm
mkList ws = case ws of
c:w:ws -> (head (map (flip Numeric.showHex "" . fromEnum) c), (c, chop w)) : mkList ws
_ -> []
chop = words . map unslash
where
unslash '/' = ' '
unslash c = c
useMapGF m s = case s of
'C':'h':'i':'n':cs -> "Chin" ++ useMapGF m cs -- don't change Chinese, China
'C':'h':'i' :cs -> "Cmn" ++ useMapGF m cs -- to change language code Chi to Cmn
'"':cs -> '"':convert cs
c :cs -> c :useMapGF m cs
_ -> s
where
convert cs = case cs of
'"':s -> '"' : useMapGF m s
c :s -> maybe [c] (head . words) (Map.lookup [c] m) ++ convert s
_ -> cs
c2pMap ws = Map.fromList [(c,unwords ps) | (_,(c,ps)) <- ws]

View File

@@ -10,7 +10,7 @@ concrete NounCmn of Noun = CatCmn ** open ResCmn, Prelude in {
UsePN pn = pn ;
UsePron p = p ;
DetNP det = det ;
DetNP det = {s = det.s ++ ge_s} ; ----
PredetNP pred np = mkNP (pred.s ++ possessive_s ++ np.s) ;
@@ -19,7 +19,10 @@ concrete NounCmn of Noun = CatCmn ** open ResCmn, Prelude in {
AdvNP np adv = mkNP (adv.s ++ possessive_s ++ np.s) ;
DetQuant quant num = {
s = quant.s ++ num.s ;
s = case num.numType of {
NTFull => quant.pl ++ num.s ; -- to avoid yi in indef
_ => quant.s ++ num.s
} ;
detType = case num.numType of {
NTFull => DTNum ; -- five
NTVoid n => case quant.detType of {
@@ -33,15 +36,12 @@ concrete NounCmn of Noun = CatCmn ** open ResCmn, Prelude in {
s = quant.s ++ num.s ++ ord.s ;
detType = case num.numType of {
NTFull => DTNum ; -- five
NTVoid n => case quant.detType of {
DTPoss => DTPoss ; -- our
_ => DTFull n -- these/this
}
NTVoid n => DTFull n -- these/this ; also our, when ord is present
}
} ;
PossPron p = {
s = p.s ++ possessive_s ;
s,pl = p.s ++ possessive_s ;
detType = DTPoss
} ;
@@ -52,15 +52,15 @@ concrete NounCmn of Noun = CatCmn ** open ResCmn, Prelude in {
NumDigits d = d ** {numType = NTFull} ;
OrdDigits d = {s = ordinal_s ++ d.s} ;
NumNumeral numeral = numeral ** {hasC = True} ;
NumNumeral numeral = {s = numeral.p} ; -- liang instead of yi
OrdNumeral numeral = {s = ordinal_s ++ numeral.s} ;
AdNum adn num = {s = adn.s ++ num.s ; hasC = True} ;
OrdSuperl a = {s = superlative_s ++ a.s} ;
DefArt = mkDet the_s ;
IndefArt = mkDet yi_s ; ---- in the plural ?
DefArt = mkQuant [] [] DTPoss ; -- use that_Quant if you want the_s
IndefArt = mkQuant yi_s [] (DTFull Sg) ; -- empty in the plural
MassNP cn = cn ;

View File

@@ -16,55 +16,53 @@ oper Wan : Zero => Str =
oper mkD : Str -> Str -> Str = \x,_ -> word x ; -- hiding the "formal" version
--lincat Numeral = {s : Str} ;
lincat Digit = {s : Str} ;
lincat Sub10 = {s : Str} ;
lincat Sub100 = {inh : Zero ; s : Bform => Str} ;
lincat Sub1000 = {inh : Zero ; s : Qform => Str} ;
lincat Sub1000000 = {s : Str} ;
lin num x0 =
{s = x0.s} ;
lincat Digit = {s,p : Str} ;
lincat Sub10 = {s,p : Str} ;
lincat Sub100 = {inh : Zero ; s,p : Bform => Str} ;
lincat Sub1000 = {inh : Zero ; s,p : Qform => Str} ;
lincat Sub1000000 = {s,p : Str} ;
lin num x0 = x0 ;
-- 一二三四五六七八九十一百千
--
lin n2 =
{s = mkD "er4" "er4"} ;
{s = mkD "er4" "er4" ; p = "liang3"} ;
lin n3 =
{s = mkD "san1" "san1"} ;
{s,p = mkD "san1" "san1"} ;
lin n4 =
{s = mkD "si4" "si4"} ;
{s,p = mkD "si4" "si4"} ;
lin n5 =
{s = mkD "wu3" "wu3"} ;
{s,p = mkD "wu3" "wu3"} ;
lin n6 =
{s = mkD "liu4" "liu4"} ;
{s,p = mkD "liu4" "liu4"} ;
lin n7 =
{s = mkD "qi1" "qi1"} ;
{s,p = mkD "qi1" "qi1"} ;
lin n8 =
{s = mkD "ba1" "ba1"} ;
{s,p = mkD "ba1" "ba1"} ;
lin n9 =
{s = mkD "jiu3" "jiu3"} ;
{s,p = mkD "jiu3" "jiu3"} ;
lin pot01 =
{s = mkD "yi1" "yi1"} ;
{s,p = mkD "yi1" "yi1"} ;
lin pot0 d =
{s = d.s} ;
{s = d.s ; p = d.p} ;
lin pot110 =
{inh = nozero ;
s = table {
s,p = table {
shi => mkD "yi1shi2" "yi1shi2" ;
shi0 => mkD "yi1shi2" "yi1shi2" ;
wan => mkD "yi1wan4" "yi1wan4" ;
wan0 => mkD "yi1wan4" "yi1wan4"}} ;
lin pot111 =
{inh = nozero ;
s = table {
s,p = table {
shi => mkD "shi2yi1" "shi2yi1" ;
shi0 => mkD "yi1shi2yi1" "yi1shi2yi1" ;
wan => mkD "shi2yi1wan4" "shi2yi1wan4" ;
wan0 => mkD "shi2yi1wan4" "shi2yi1wan4"}} ;
lin pot1to19 d =
{inh = nozero ;
s = table {
s,p = table {
shi => mkD "yi1shi2" "yi1shi2" ++ d.s ;
shi0 => mkD "yi1shi2" "yi1shi2" ;
wan => mkD "yi1wan4" "yi1wan4" ++ d.s ++ mkD "qian1" "qian1" ;
@@ -75,17 +73,23 @@ lin pot0as1 n =
shi => n.s ;
shi0 => n.s ;
wan => n.s ++ mkD "qian1" "qian1" ;
wan0 => n.s ++ mkD "qian1" "qian1"}} ;
wan0 => n.s ++ mkD "qian1" "qian1"} ;
p = table {
shi => n.p ;
shi0 => n.s ;
wan => n.s ++ mkD "qian1" "qian1" ;
wan0 => n.s ++ mkD "qian1" "qian1"}
} ;
lin pot1 d =
{inh = zero ;
s = table {
s,p = table {
shi => d.s ++ mkD "shi2" "shi2" ;
shi0 => d.s ++ mkD "shi2" "shi2" ;
wan0 => d.s ++ "wan4" ;
wan => d.s ++ "wan4"}} ;
lin pot1plus d e =
{inh = nozero ;
s = table {
s,p = table {
shi => d.s ++ mkD "shi2" "shi2" ++ e.s ;
shi0 => d.s ++ mkD "shi2" "shi2" ++ e.s ;
wan => d.s ++ "wan4" ++ e.s ++ mkD "qian1" "qian1" ;
@@ -96,27 +100,32 @@ lin pot1as2 n =
bai => n.s ! shi ;
bai0 => n.s ! shi ;
shiwan => n.s ! wan ;
shiwan0 => n.s ! wan0} ;
p = table {
bai => n.p ! shi ;
bai0 => n.s ! shi ;
shiwan => n.s ! wan ;
shiwan0 => n.s ! wan0}} ;
lin pot2 d =
{inh = zero ;
s = table {
s,p = table {
bai => d.s ++ mkD "bai3" "bai3" ;
bai0 => d.s ++ mkD "bai3" "bai3" ;
shiwan0 => d.s ++ mkD "shi2wan4" "shi2wan4" ;
shiwan => d.s ++ mkD "shi2wan4" "shi2wan4"}} ;
lin pot2plus d e =
{inh = nozero ;
s = table {
s,p = table {
bai => d.s ++ mkD "" "bai3" ++ (ling ! <e.inh,e.inh>) ++ e.s ! shi0 ;
bai0 => d.s ++ mkD "" "bai3" ++ (ling ! <e.inh,e.inh>) ++ e.s ! shi0 ;
shiwan => d.s ++ mkD "" "shi2" ++ (Wan ! (e.inh)) ++ e.s ! wan ;
shiwan0 => d.s ++ mkD "" "shi2" ++ (Wan ! (e.inh)) ++ e.s ! wan0}} ;
lin pot2as3 n =
{s = n.s ! bai} ;
{s = n.s ! bai ; p = n.p ! bai} ;
lin pot3 n =
{s = n.s ! shiwan} ;
{s,p = n.s ! shiwan} ;
lin pot3plus n m =
{s = (n.s ! shiwan0) ++ (ling ! <n.inh,m.inh>) ++ m.s ! bai0} ;
{s,p = (n.s ! shiwan0) ++ (ling ! <n.inh,m.inh>) ++ m.s ! bai0} ;
-- numerals as sequences of digits

View File

@@ -1,4 +1,4 @@
module Pinyin where
module Main where
import Numeric
import qualified Data.Map as Map
@@ -45,8 +45,8 @@ useMapWith :: (String -> [String]) -> ([String] -> String) -> (String -> String)
useMapWith ws uws deft m = uws . map (\w -> maybe (deft w) id (Map.lookup w m)) . ws
useMapGF m s = case s of
'C':'h':'i':'n':cs -> "Chin" ++ useMapGF m cs -- don't change Chinese, China
'C':'h':'i' :cs -> "Cmn" ++ useMapGF m cs -- to change language code Chi to Cmn
--- 'C':'h':'i':'n':cs -> "Chin" ++ useMapGF m cs -- don't change Chinese, China
--- 'C':'h':'i' :cs -> "Cmn" ++ useMapGF m cs -- to change language code Chi to Cmn
'"':cs -> '"':convert cs
c :cs -> c :useMapGF m cs
_ -> s

View File

@@ -42,18 +42,27 @@ resource ResCmn = ParamX ** open Prelude in {
geng_s = "geng1" ; -- more, in comparison
zai_V = mkVerb "zai4" [] [] [] [] "bu4" ;
fullstop_s = "." ;
questmark_s = "?" ;
exclmark_s = "!" ;
fullstop_s = "" ;
questmark_s = "" ;
exclmark_s = "" ;
ge_s = "ge4" ;
di_s = "shi4" ; -- used in QuestSlash
ba_s = "ba3" ; -- ba4, object marker
ba0_s = "ba1" ; -- ba, used in imperatives
men_s = "men" ;
zan_s = "za2" ;
say_s = "shui4" ; -- used in embedded sentences: she answers him that we sleep
duncomma = "、" ;
chcomma = "" ;
emptyStr = [] ;
-- 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 separate 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@? => bword x (bword y (bword z u)) ;
@@ -188,6 +197,7 @@ param
oper
Determiner = {s : Str ; detType : DetType} ;
Quantifier = Determiner ** {pl : Str} ;
mkDet = overload {
mkDet : Str -> Determiner = \s -> {s = s ; detType = DTFull Sg} ;
@@ -195,7 +205,11 @@ oper
mkDet : Str -> DetType -> Determiner = \s,d -> {s = s ; detType = d} ;
} ;
mkQuant : Str -> {s : Str} = ss ;
mkQuant = overload {
mkQuant : Str -> Quantifier = \s -> {s,pl = s ; detType = DTFull Sg} ;
mkQuant : Str -> DetType -> Quantifier = \s,d -> {s,pl = s ; detType = d} ;
mkQuant : Str -> Str -> DetType -> Quantifier = \s,p,d -> {s = s ; detType = d ; pl = p} ;
} ;
pronNP : (s : Str) -> NP = \s -> {
s = word s

View File

@@ -6,8 +6,8 @@ concrete StructuralCmn of Structural = CatCmn **
lin
every_Det = mkDet "mei3" Sg ;
this_Quant = mkDet "zhe4" ;
that_Quant = mkDet "na3" ;
this_Quant = mkQuant "zhe4" ;
that_Quant = mkQuant "na3" ;
i_Pron = pronNP "wo3" ;
youSg_Pron = pronNP "ni3" ;
@@ -49,7 +49,7 @@ where_IAdv = mkIAdvL "na3li3" ;
when_IAdv = mkIAdvL "shen2mashi2hou4" ;
how_IAdv = mkIAdvL "ru2he2" ;
all_Predet = ssword "suo3you3" ;
many_Det = mkDet "duo1" Pl ;
many_Det = mkDet (word "hen3duo1") DTPoss ;
someSg_Det = mkDet (word "yi1xie1") Sg ;
somePl_Det = mkDet (word "yi1xie1") Sg ;
few_Det = mkDet "shao3" Pl ;
@@ -69,9 +69,9 @@ under_Prep = mkPrep "xia4" ;
why_IAdv = mkIAdvL "wei2shen2ma" ;
too_AdA = mkAdA "tai4" ;
before_Prep = mkPrep "cong1qian2" ; --s
between_Prep = mkPrep "zhi1jian1" ; --s
but_PConj = mkPConjL "dan4shi4" ; --s
before_Prep = mkPrep "cong1qian2" ;
between_Prep = mkPrep "zhi1jian1" ;
but_PConj = mkPConjL "dan4shi4" ;
can_VV = mkVerb "neng2" [] [] [] [] "bu4" ;
@@ -81,33 +81,26 @@ but_PConj = mkPConjL "dan4shi4" ; --s
can8know_VV = mkV "hui4" [] [] [] [] "bu4" ; ----
except_Prep = mkPrep "chu2le" "yi3wai4" ; --s
for_Prep = mkPrep "wei2le" ; --s
from_Prep = mkPrep "cong1" ; --s
---how8many_IDet = mkIDet "ji1" ; --s
---how8much_IDet = mkIDet "duo1shao3" ; --s
in8front_Prep = mkPrep "qian2bian1" ; --s
it_Pron = pronNP "ta1" ; --s
---less_CAdv = mkCAdv "shao3" ; --s
much_Det = mkDet "duo1" Sg ; --s
---more_CAdv = mkCAdv "geng1" ; --s
---most_Predet = mkPredet "zui4" ; --s
no_Quant = mkDet "bu4" ; --s
except_Prep = mkPrep "chu2le" "yi3wai4" ;
for_Prep = mkPrep "wei2le" ;
from_Prep = mkPrep "cong1" ;
in8front_Prep = mkPrep "qian2bian1" ;
it_Pron = pronNP "ta1" ;
much_Det = mkDet "duo1" Sg ;
no_Quant = mkQuant "bu4" ;
not_Predet = ssword "bu4" ;
---only_Predet = mkPredet "qi2" ; --s
otherwise_PConj = mkPConjL "hai2shi4" ; --s
to_Prep = mkPrep "wang3" ; --s
---which_IQuant = mkIQuant "na3" ; --s
otherwise_PConj = mkPConjL "hai2shi4" ;
to_Prep = mkPrep "wang3" ;
have_V2 = mkV2 "you3" ;
yes_Utt = ss copula_s ;
yes_Utt = ss "dui4" ;
no_Utt = ss neg_s ;
oper
mkConjForm : Str -> {s1,s2 : Str} = \s -> {s1 = [] ; s2 = word s} ;
-- manually by AR
-- manually by AR, Jolene
lin
always_AdV = ssword "yi1zhi2" ;
@@ -152,12 +145,13 @@ so_AdA = ssword "ru2ci3" ;
somebody_NP = ssword "mou3ren2" ;
something_NP = ssword "mou3shi4" ; -- [mark] in sent, it depends on the context
somewhere_Adv = mkAdv "mou3chu3" ;
that_Subj = mkSubj [] ", " ; -- that + S [mark] comma
that_Subj = mkSubj [] chcomma ; -- that + S [mark] comma
there7from_Adv = mkAdv "cong1na3li3" ; -- from there
there7to_Adv = mkAdv "dao4na3li3" ;
therefore_PConj = ssword "yin1ci3" ;
through_Prep = mkPrep "tong1guo4" ;
which_IQuant = ssword [] ; -- [mark] in sent, it depends on the context
which_IQuant = mkIQuant "na3" ;
--which_IQuant = ssword [] ; -- [mark] in sent, it depends on the context
without_Prep = mkPrep "mei2you3" [];
youPol_Pron = ssword "nin2" ; -- polite you

View File

@@ -5,16 +5,16 @@ concrete VerbCmn of Verb = CatCmn ** open ResCmn, Prelude in {
lin
UseV = predV ;
SlashV2a v = predV v ** {c2 = v.c2} ;
SlashV2a v = predV v ** {c2 = v.c2 ; isPre = False} ;
Slash2V3 v np = insertObj np (predV v) ** {c2 = v.c3} ; ---- to check arg order
Slash3V3 v np = insertObj np (predV v) ** {c2 = v.c2} ;
Slash2V3 v np = insertAdv (mkNP (ba_s ++ np.s)) (predV v) ** {c2 = v.c3 ; isPre = False} ; -- slot for third argument
Slash3V3 v np = insertObj (mkNP (appPrep v.c3 np.s)) (predV v) ** {c2 = v.c2 ; isPre = True} ; -- slot for ba object
SlashV2A v ap = insertObj ap (predV v) ** {c2 = v.c2} ;
SlashV2A v ap = insertObj ap (predV v) ** {c2 = v.c2 ; isPre = True} ;
SlashV2V v vp = insertObj (mkNP (infVP vp)) (predV v) ** {c2 = v.c2} ;
SlashV2S v s = insertObj s (predV v) ** {c2 = v.c2} ;
SlashV2Q v q = insertObj q (predV v) ** {c2 = v.c2} ;
SlashV2V v vp = insertObj (mkNP (infVP vp)) (predV v) ** {c2 = v.c2 ; isPre = True} ;
SlashV2S v s = insertObj (ss (say_s ++ s.s)) (predV v) ** {c2 = v.c2 ; isPre = True} ;
SlashV2Q v q = insertObj (ss (say_s ++ q.s)) (predV v) ** {c2 = v.c2 ; isPre = True} ;
ComplVV v vp = {
verb = v ;
@@ -26,16 +26,19 @@ concrete VerbCmn of Verb = CatCmn ** open ResCmn, Prelude in {
ComplVQ v q = insertObj q (predV v) ;
ComplVA v ap = insertObj ap (predV v) ;
ComplSlash vp np = insertObj (mkNP (appPrep vp.c2 np.s)) vp ;
ComplSlash vp np = case vp.isPre of {
True => insertAdv (mkNP (ba_s ++ np.s)) vp ; --- ba or vp.c2 ?
False => insertObj (mkNP (appPrep vp.c2 np.s)) vp
} ;
UseComp comp = comp ;
SlashVV v vp = ---- too simple?
insertObj (mkNP (infVP vp)) (predV v) ** {c2 = vp.c2} ;
insertObj (mkNP (infVP vp)) (predV v) ** {c2 = vp.c2 ; isPre = vp.isPre} ;
SlashV2VNP v np vp =
insertObj np
(insertObj (mkNP (infVP vp)) (predV v)) ** {c2 = vp.c2} ;
(insertObj (mkNP (infVP vp)) (predV v)) ** {c2 = vp.c2 ; isPre = vp.isPre} ;
AdvVP vp adv = case adv.advType of {
ATManner => insertObj (ss (deVAdv_s ++ adv.s)) vp ; -- he sleeps well
@@ -48,7 +51,7 @@ concrete VerbCmn of Verb = CatCmn ** open ResCmn, Prelude in {
PassV2 v = insertObj (mkNP passive_s) (predV v) ; ----
CompAP ap = insertObj (mkNP ap.s) (predV copula) ; ---- hen / bu
CompAP ap = insertObj (mkNP (ap.s ++ possessive_s)) (predV copula) ; ---- hen / bu
CompNP np = insertObj np (predV copula) ; ----