mirror of
https://github.com/GrammaticalFramework/gf-core.git
synced 2026-05-23 01:52:50 -06:00
Pinyin versions of chinese, named Cmn; mostly automatically generated
This commit is contained in:
@@ -1,5 +1,5 @@
|
|||||||
lang1 = "Eng"
|
lang1 = "Eng"
|
||||||
lang2 = "Tha"
|
lang2 = "Chi"
|
||||||
|
|
||||||
-- to write a comparison for two languages
|
-- to write a comparison for two languages
|
||||||
|
|
||||||
|
|||||||
@@ -230,3 +230,64 @@ Lexicon and Structural checked and completed by Jolene. Some open issues found b
|
|||||||
|
|
||||||
GF/lib/src/chinese/ complete and compilable! Added to darcs by AR.
|
GF/lib/src/chinese/ complete and compilable! Added to darcs by AR.
|
||||||
|
|
||||||
|
Issues from
|
||||||
|
|
||||||
|
Yip-Po Ching and Don Rimmington,
|
||||||
|
Basic Chinese. A Grammar and Workbook,
|
||||||
|
Routledge,
|
||||||
|
London and New York,
|
||||||
|
2009.
|
||||||
|
|
||||||
|
p. 4 the dun-comma in lists
|
||||||
|
|
||||||
|
p. 28 "who is X" vs. "X is who"
|
||||||
|
|
||||||
|
p. 38 er -> liang before a measure word
|
||||||
|
|
||||||
|
p. 41 ordinals require measure words: di yi ge xuesheng
|
||||||
|
|
||||||
|
p. 44 how many - duoshao vs. yi
|
||||||
|
|
||||||
|
p. 63 possessive precedes indefinite plural: wo de hen duopengyou "many of my friends"
|
||||||
|
|
||||||
|
p. 94 degree + adjective + de + noun: hen da de wuzi
|
||||||
|
|
||||||
|
p. 95 no copula in adjectival predication
|
||||||
|
|
||||||
|
p. 96 adjectives negated by bu
|
||||||
|
|
||||||
|
p. 97 AB -> AABB reduplication
|
||||||
|
|
||||||
|
p. 104 non-gradable adjectives require shi: zhei tiao yu shi huo de
|
||||||
|
|
||||||
|
p. 106 it was Chinese that I studied
|
||||||
|
|
||||||
|
p. 116 I did it better than you
|
||||||
|
|
||||||
|
p. 128 disyllabic place words
|
||||||
|
|
||||||
|
p. 155-158 mapping tenses to aspects
|
||||||
|
|
||||||
|
p. 168 "can": hui/neng
|
||||||
|
|
||||||
|
p. 174 negation and tense
|
||||||
|
|
||||||
|
p. 185 yes/no
|
||||||
|
|
||||||
|
p. 186 alternation questions
|
||||||
|
|
||||||
|
p. 197 "or" haishi/huozhe
|
||||||
|
|
||||||
|
p. 206 "please" in imperative
|
||||||
|
|
||||||
|
p. 207 "let's" zanmen he yi bei ba
|
||||||
|
|
||||||
|
p. 242 coverbs
|
||||||
|
|
||||||
|
p. 255 disyllabic prepositions
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -48,7 +48,7 @@ whatSg_IP, whatPl_IP = mkIPL " 什么" ;
|
|||||||
where_IAdv = mkIAdvL "哪里" ;
|
where_IAdv = mkIAdvL "哪里" ;
|
||||||
when_IAdv = mkIAdvL "什么时候" ;
|
when_IAdv = mkIAdvL "什么时候" ;
|
||||||
how_IAdv = mkIAdvL "如何" ;
|
how_IAdv = mkIAdvL "如何" ;
|
||||||
all_Predet = ss "所有" ;
|
all_Predet = ssword "所有" ;
|
||||||
many_Det = mkDet "多" Pl ;
|
many_Det = mkDet "多" Pl ;
|
||||||
someSg_Det = mkDet (word "一些") Sg ;
|
someSg_Det = mkDet (word "一些") Sg ;
|
||||||
somePl_Det = mkDet (word "一些") Sg ;
|
somePl_Det = mkDet (word "一些") Sg ;
|
||||||
|
|||||||
26
lib/src/chinese/pinyin/AdjectiveCmn.gf
Normal file
26
lib/src/chinese/pinyin/AdjectiveCmn.gf
Normal file
@@ -0,0 +1,26 @@
|
|||||||
|
concrete AdjectiveCmn of Adjective = CatCmn ** open ResCmn, Prelude in {
|
||||||
|
|
||||||
|
lin
|
||||||
|
|
||||||
|
PositA a = a ;
|
||||||
|
|
||||||
|
--ComparA a np = complexAP (a.s ++ than_s ++ np.s) ;
|
||||||
|
ComparA a np = complexAP (than_s ++ np.s ++ a.s) ;
|
||||||
|
|
||||||
|
UseComparA a = complexAP (geng_s ++ a.s) ;
|
||||||
|
|
||||||
|
AdjOrd ord = complexAP ord.s ;
|
||||||
|
|
||||||
|
CAdvAP ad ap np = complexAP (ap.s ++ ad.s ++ ad.p ++ np.s) ;
|
||||||
|
|
||||||
|
ComplA2 a np = complexAP (a.s ++ appPrep a.c2 np.s) ;
|
||||||
|
|
||||||
|
ReflA2 a = complexAP (a.s ++ appPrep a.c2 reflPron) ;
|
||||||
|
|
||||||
|
SentAP ap sc = complexAP (ap.s ++ sc.s) ;
|
||||||
|
|
||||||
|
AdAP ada ap = complexAP (ada.s ++ ap.s) ;
|
||||||
|
|
||||||
|
UseA2 a = a ;
|
||||||
|
|
||||||
|
}
|
||||||
19
lib/src/chinese/pinyin/AdverbCmn.gf
Normal file
19
lib/src/chinese/pinyin/AdverbCmn.gf
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
concrete AdverbCmn of Adverb = CatCmn **
|
||||||
|
open ResCmn, Prelude in {
|
||||||
|
|
||||||
|
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 ExtraCmn ?
|
||||||
|
|
||||||
|
ComparAdvAdj cadv a np = ss (a.s ++ cadv.s ++ cadv.p ++ np.s) ** {advType = ATManner} ;
|
||||||
|
|
||||||
|
ComparAdvAdjS cadv a s = ss (a.s ++ cadv.s ++ cadv.p ++ s.s) ** {advType = ATManner} ;
|
||||||
|
|
||||||
|
AdAdv adv ad = ss (ad.s ++ adv.s) ** {advType = ad.advType} ;
|
||||||
|
|
||||||
|
SubjS subj s = ss (subj.prePart ++ s.s ++ subj.sufPart) ** {advType = ATManner} ;
|
||||||
|
|
||||||
|
AdnCAdv cadv = ss (cadv.s ++ conjThat) ** {advType = ATManner} ; -----
|
||||||
|
|
||||||
|
}
|
||||||
3
lib/src/chinese/pinyin/AllCmn.gf
Normal file
3
lib/src/chinese/pinyin/AllCmn.gf
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
--# -path=.:../abstract:../common:prelude
|
||||||
|
|
||||||
|
concrete AllCmn of AllChiAbs = LangCmn, ExtraCmn ;
|
||||||
84
lib/src/chinese/pinyin/CatCmn.gf
Normal file
84
lib/src/chinese/pinyin/CatCmn.gf
Normal file
@@ -0,0 +1,84 @@
|
|||||||
|
concrete CatCmn of Cat = CommonX - [Tense, Temp, Adv] ** open ResCmn, Prelude in {
|
||||||
|
|
||||||
|
lincat
|
||||||
|
|
||||||
|
-- Tensed/Untensed
|
||||||
|
|
||||||
|
S = {s : Str} ;
|
||||||
|
QS = {s : Str} ;
|
||||||
|
RS = {s : Str} ;
|
||||||
|
SSlash = {s : Str ; c2 : Preposition} ;
|
||||||
|
|
||||||
|
-- Sentence
|
||||||
|
|
||||||
|
Cl = Clause ; -- {s : Polarity => Aspect => Str ; np: Str ; vp: Polarity => Aspect => Str} ;
|
||||||
|
|
||||||
|
ClSlash = Clause ** {c2 : Preposition} ;
|
||||||
|
|
||||||
|
Imp = {s : Polarity => Str} ;
|
||||||
|
|
||||||
|
-- Question
|
||||||
|
|
||||||
|
QCl = {s : Polarity => Aspect => Str} ;
|
||||||
|
IP = {s : Str} ;
|
||||||
|
IComp = {s : Str} ;
|
||||||
|
IDet, IQuant = {s : Str} ;
|
||||||
|
|
||||||
|
-- Relative
|
||||||
|
|
||||||
|
RCl = {s : Polarity => Aspect => Str} ;
|
||||||
|
RP = {s : Str} ;
|
||||||
|
|
||||||
|
-- Verb
|
||||||
|
|
||||||
|
VP = ResCmn.VP ;
|
||||||
|
Comp = ResCmn.VP ;
|
||||||
|
VPSlash = ResCmn.VP ** {c2 : Preposition} ;
|
||||||
|
|
||||||
|
-- Adjective
|
||||||
|
|
||||||
|
AP = ResCmn.Adj ;
|
||||||
|
|
||||||
|
-- Noun
|
||||||
|
|
||||||
|
CN = ResCmn.Noun ;
|
||||||
|
NP, Pron = ResCmn.NP ;
|
||||||
|
Det, Quant = Determiner ;
|
||||||
|
Predet = {s : Str} ; ----
|
||||||
|
Ord = {s : Str} ;
|
||||||
|
Num = {s : Str ; numType : NumType} ;
|
||||||
|
|
||||||
|
Adv = {s : Str ; advType : AdvType} ;
|
||||||
|
|
||||||
|
-- Numeral
|
||||||
|
|
||||||
|
Numeral, Card, Digits = {s : Str} ;
|
||||||
|
|
||||||
|
-- Structural
|
||||||
|
|
||||||
|
Conj = {s : ConjForm => {s1,s2 : Str}} ;
|
||||||
|
Subj = {prePart : Str ; sufPart : Str} ;
|
||||||
|
Prep = Preposition ;
|
||||||
|
|
||||||
|
-- Open lexical classes, e.g. Lexicon
|
||||||
|
|
||||||
|
V, VS, VQ, VA = Verb ;
|
||||||
|
V2, V2Q, V2S = Verb ** {c2 : Preposition} ;
|
||||||
|
V3, V2A, V2V = Verb ** {c2, c3 : Preposition} ;
|
||||||
|
VV = Verb ;
|
||||||
|
|
||||||
|
A = ResCmn.Adj ;
|
||||||
|
A2 = ResCmn.Adj ** {c2 : Preposition} ;
|
||||||
|
|
||||||
|
N = ResCmn.Noun ;
|
||||||
|
N2 = ResCmn.Noun ** {c2 : Preposition} ;
|
||||||
|
N3 = ResCmn.Noun ** {c2,c3 : Preposition} ;
|
||||||
|
PN = ResCmn.NP ;
|
||||||
|
|
||||||
|
-- overridden
|
||||||
|
|
||||||
|
Temp = {s : Str ; t : Aspect} ;
|
||||||
|
Tense = {s : Str ; t : Aspect} ;
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
34
lib/src/chinese/pinyin/ConjunctionCmn.gf
Normal file
34
lib/src/chinese/pinyin/ConjunctionCmn.gf
Normal file
@@ -0,0 +1,34 @@
|
|||||||
|
concrete ConjunctionCmn of Conjunction = CatCmn ** open ResCmn, Prelude, Coordination in {
|
||||||
|
|
||||||
|
lin
|
||||||
|
|
||||||
|
ConjS c = conjunctDistrSS (c.s ! CSent) ;
|
||||||
|
ConjAdv c as = conjunctDistrSS (c.s ! CSent) as ** {advType = ATPlace} ; ---- ??
|
||||||
|
ConjNP c = conjunctDistrSS (c.s ! CPhr CNPhrase) ;
|
||||||
|
ConjAP c as = conjunctDistrSS (c.s ! CPhr CAPhrase) as ** {monoSyl = False} ;
|
||||||
|
ConjRS c = conjunctDistrSS (c.s ! CSent) ;
|
||||||
|
|
||||||
|
-- These fun's are generated from the list cat's.
|
||||||
|
|
||||||
|
BaseS = twoSS ;
|
||||||
|
ConsS = consrSS thcomma ;
|
||||||
|
BaseAdv = twoSS ;
|
||||||
|
ConsAdv = consrSS thcomma ;
|
||||||
|
BaseNP = twoSS ;
|
||||||
|
ConsNP = consrSS thcomma ;
|
||||||
|
BaseAP = twoSS ;
|
||||||
|
ConsAP = consrSS thcomma ;
|
||||||
|
BaseRS = twoSS ;
|
||||||
|
ConsRS = consrSS thcomma ;
|
||||||
|
|
||||||
|
lincat
|
||||||
|
[S] = {s1,s2 : Str} ;
|
||||||
|
[Adv] = {s1,s2 : Str} ;
|
||||||
|
[NP] = {s1,s2 : Str} ;
|
||||||
|
[AP] = {s1,s2 : Str} ;
|
||||||
|
[RS] = {s1,s2 : Str} ;
|
||||||
|
|
||||||
|
oper
|
||||||
|
thcomma : Str = [] ; ---- should be a space
|
||||||
|
|
||||||
|
}
|
||||||
7
lib/src/chinese/pinyin/ExtraCmn.gf
Normal file
7
lib/src/chinese/pinyin/ExtraCmn.gf
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
concrete ExtraCmn of ExtraChiAbs = CatCmn **
|
||||||
|
open ResCmn, Prelude in {
|
||||||
|
|
||||||
|
lincat
|
||||||
|
Aspect = {s : Str ; a : ResCmn.Aspect} ;
|
||||||
|
|
||||||
|
}
|
||||||
22
lib/src/chinese/pinyin/GrammarCmn.gf
Normal file
22
lib/src/chinese/pinyin/GrammarCmn.gf
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
--# -path=.:../abstract:../common:prelude
|
||||||
|
|
||||||
|
concrete GrammarCmn of Grammar =
|
||||||
|
NounCmn,
|
||||||
|
VerbCmn,
|
||||||
|
AdjectiveCmn,
|
||||||
|
AdverbCmn,
|
||||||
|
NumeralCmn,
|
||||||
|
SentenceCmn,
|
||||||
|
QuestionCmn,
|
||||||
|
RelativeCmn,
|
||||||
|
ConjunctionCmn,
|
||||||
|
PhraseCmn,
|
||||||
|
TextCmn,
|
||||||
|
StructuralCmn,
|
||||||
|
IdiomCmn,
|
||||||
|
TenseCmn
|
||||||
|
** {
|
||||||
|
|
||||||
|
flags startcat = Phr ; unlexer = text ; lexer = text ;
|
||||||
|
|
||||||
|
} ;
|
||||||
27
lib/src/chinese/pinyin/IdiomCmn.gf
Normal file
27
lib/src/chinese/pinyin/IdiomCmn.gf
Normal file
@@ -0,0 +1,27 @@
|
|||||||
|
concrete IdiomCmn of Idiom = CatCmn ** open Prelude, ResCmn in {
|
||||||
|
|
||||||
|
lin
|
||||||
|
---- formal subject, e.g. it is hot ?? now empty subject
|
||||||
|
ImpersCl vp = mkClause [] vp ;
|
||||||
|
--can be empty, or ImpersCl vp = mkClause "天" vp ; but "天" only used to describe weather(e.g. it's raining)
|
||||||
|
|
||||||
|
---- one wants to learn Chinese ?? now empty subject
|
||||||
|
GenericCl vp = mkClause [] vp ;
|
||||||
|
-- GenericCl vp = mkClause "有人" vp ; (meaning: there is a person)
|
||||||
|
|
||||||
|
---- it is John who did it
|
||||||
|
CleftNP np rs = mkClause np.s copula rs.s ;
|
||||||
|
|
||||||
|
CleftAdv ad s = mkClause ad.s (insertObj s (predV copula)) ; ---- it is here she slept
|
||||||
|
|
||||||
|
ExistNP np = mkClause [] (regVerb you_s) np.s ; ---- infl of you
|
||||||
|
|
||||||
|
ExistIP ip = {s = (mkClause [] (regVerb you_s) ip.s).s} ; ---- infl of you
|
||||||
|
|
||||||
|
ProgrVP vp = vp ; ----
|
||||||
|
|
||||||
|
ImpPl1 vp = ss (infVP vp) ; ----
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
11
lib/src/chinese/pinyin/LangCmn.gf
Normal file
11
lib/src/chinese/pinyin/LangCmn.gf
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
--# -path=.:../abstract:../common:../prelude
|
||||||
|
|
||||||
|
|
||||||
|
concrete LangCmn of Lang =
|
||||||
|
GrammarCmn,
|
||||||
|
LexiconCmn
|
||||||
|
** {
|
||||||
|
|
||||||
|
flags startcat = Phr ; unlexer = concat ; lexer = text ;
|
||||||
|
|
||||||
|
} ;
|
||||||
458
lib/src/chinese/pinyin/LexiconCmn.gf
Normal file
458
lib/src/chinese/pinyin/LexiconCmn.gf
Normal file
@@ -0,0 +1,458 @@
|
|||||||
|
concrete LexiconCmn of Lexicon = CatCmn **
|
||||||
|
open ParadigmsCmn, ResCmn, Prelude in {
|
||||||
|
|
||||||
|
flags
|
||||||
|
coding = utf8 ;
|
||||||
|
|
||||||
|
lin
|
||||||
|
|
||||||
|
-- LexiconCmn
|
||||||
|
|
||||||
|
man_N = mkN "nan2ren2" "ge4"; -- "nanren" "ge" first being noun, second is classifier(counter)
|
||||||
|
woman_N = mkN "nu:3ren2" "ge4"; -- "nvren" "ge" classifier behaves like the "cup" in "cup of tea"
|
||||||
|
house_N = mkN "fang2zi3" "jian1"; -- "fangzi" "jian"
|
||||||
|
tree_N = mkN "shu4" "ke1"; -- "shu" "ke"
|
||||||
|
big_A = mkA "da4" ; -- "da"
|
||||||
|
small_A = mkA "xiao3" ; -- "xiao"
|
||||||
|
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";
|
||||||
|
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" ;
|
||||||
|
seed_N = mkN "zhong3zi3" "li4";
|
||||||
|
leaf_N = mkN "ye4zi3" "pian1"; -- [mark] "ye4" -> "ye4zi3" , "ye4" is often treated as morpheme
|
||||||
|
root_N = mkN "shu4gen1" ; -- [mark] "gen1" --> "shu4gen1"(tree root)
|
||||||
|
bark_N = mkN "shu4pi2" "kuai1";
|
||||||
|
flower_N = mkN "hua1" "duo3";
|
||||||
|
grass_N = mkN "cao3" "ke1";
|
||||||
|
rope_N = mkN "sheng2" "gen1";
|
||||||
|
skin_N = mkN "pi2" "kuai1";
|
||||||
|
meat_N = mkN "rou4" "kuai1";
|
||||||
|
blood_N = mkN "xie3" "di1"; -- [mark] several classifiers, "di1"(drop), "tan1"(puddle)
|
||||||
|
bone_N = mkN "gu3tou2" "kuai1"; -- [mark] "gu3" -> "gu3tou2" , "gu3" is often treated as morpheme
|
||||||
|
fat_N = mkN "zhi1fang2" "dui1"; -- [mark] often without classifier
|
||||||
|
egg_N = mkN "dan4" "ke1";
|
||||||
|
horn_N = mkN "jiao3" "gen1";
|
||||||
|
tail_N = mkN "wei3ba1" "tiao2"; -- [mark] "wei3" -> "wei3ba1" , "wei3" is often treated as morpheme, or if stands alone, it is a classifier itself
|
||||||
|
feather_N = mkN "yu3mao2" "gen1";
|
||||||
|
hair_N = mkN "tou2fa1" "gen1"; -- [mark] several classifiers , "gen1"(single hair), "ba3"(several hairs)
|
||||||
|
head_N = mkN "tou2" "ke1";
|
||||||
|
ear_N = mkN "er3duo3" "qi2";
|
||||||
|
eye_N = mkN "yan3jing1" "qi2";
|
||||||
|
nose_N = mkN "bi2zi3" ;
|
||||||
|
mouth_N = mkN "zui3" "zhang1";
|
||||||
|
tooth_N = mkN "ya2chi3" "ke1";
|
||||||
|
tongue_N = mkN "she2" "gen1";
|
||||||
|
fingernail_N = mkN "zhi3jia3" "pian1";
|
||||||
|
foot_N = mkN "jiao3" "qi2";
|
||||||
|
leg_N = mkN "tui3" "tiao2";
|
||||||
|
knee_N = mkN "xi1gai4" ; -- [mark] "xi1" -> "xi1gai4"
|
||||||
|
hand_N = mkN "shou3" "qi2";
|
||||||
|
wing_N = mkN "chi4bang3" "qi2"; -- [mark] "yi4" -> "chi4bang3", "chi4bang3" is the common form for wing.
|
||||||
|
belly_N = mkN "du3zi3" ;
|
||||||
|
guts_N = mkN "chang2zi3" "gen1";
|
||||||
|
neck_N = mkN "bo2zi3" ;
|
||||||
|
back_N = mkN "bei1" ;
|
||||||
|
breast_N = mkN "xiong1" ;
|
||||||
|
heart_N = mkN "xin1zang1" "ke1";
|
||||||
|
liver_N = mkN "gan1" ;
|
||||||
|
drink_V2 = mkV2 "he1" ;
|
||||||
|
eat_V2 = mkV2 "chi1" ;
|
||||||
|
bite_V2 = mkV2 "yao3" ;
|
||||||
|
suck_V2 = mkV2 "xi1" ;
|
||||||
|
spit_V = mkV "tu3" ;
|
||||||
|
vomit_V = mkV "ou3" ;
|
||||||
|
blow_V = mkV "chui1" ;
|
||||||
|
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" ;
|
||||||
|
fight_V2 = mkV2 "da2jia4" ; -- [mark] "chao3jia4" -> "da2jia4", "chao3jia4" = quarrel, argue
|
||||||
|
hunt_V2 = mkV2 "da2lie4" ; -- [mark] "da2lie4" is iv, can't think of proper translation in v2 form for hunt
|
||||||
|
hit_V2 = mkV2 "da2" ;
|
||||||
|
cut_V2 = mkV2 "ge1" ;
|
||||||
|
split_V2 = mkV2 "pi1kai1" ;
|
||||||
|
stab_V2 = mkV2 "ci4" ;
|
||||||
|
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" ;
|
||||||
|
stand_V = mkV "zhan4" ;
|
||||||
|
turn_V = mkV "zhuan3" ;
|
||||||
|
fall_V = mkV "la4xia4" ;
|
||||||
|
hold_V2 = mkV2 "wo4" ;
|
||||||
|
squeeze_V2 = mkV2 "ji3" ;
|
||||||
|
rub_V2 = mkV2 "rou2" ;
|
||||||
|
wash_V2 = mkV2 "xi3" ;
|
||||||
|
wipe_V2 = mkV2 "ca1" ;
|
||||||
|
pull_V2 = mkV2 "la1" ;
|
||||||
|
push_V2 = mkV2 "tui1" ;
|
||||||
|
throw_V2 = mkV2 "reng1" ;
|
||||||
|
tie_V2 = mkV2 "bang3" ;
|
||||||
|
sew_V = mkV "feng2" ;
|
||||||
|
count_V2 = mkV2 "shu3" ;
|
||||||
|
say_VS = mkVS (mkV "shui4") ;
|
||||||
|
sing_V = mkV "chang4" ;
|
||||||
|
play_V = mkV "wan2" ;
|
||||||
|
float_V = mkV "fu2" ;
|
||||||
|
flow_V = mkV "liu2" ;
|
||||||
|
freeze_V = mkV "jie1bing1" ;
|
||||||
|
swell_V = mkV "peng2zhang4" ;
|
||||||
|
sun_N = mkN "tai4yang2" ;
|
||||||
|
moon_N = mkN "yue4liang4" ;
|
||||||
|
star_N = mkN "xing1xing1" "ke1";
|
||||||
|
water_N = mkN "shui3" "di1";
|
||||||
|
rain_N = mkN "yu3" "chang3";
|
||||||
|
river_N = mkN "he2" "tiao2";
|
||||||
|
lake_N = mkN "hu2" ;
|
||||||
|
sea_N = mkN "hai3" "pian1";
|
||||||
|
salt_N = mkN "yan2" "ping2";
|
||||||
|
stone_N = mkN "dan4tou2" "kuai1";
|
||||||
|
sand_N = mkN "sha1" "li4";
|
||||||
|
dust_N = mkN "chen2tu3" [];
|
||||||
|
earth_N = mkN "deqiu2" ;
|
||||||
|
cloud_N = mkN "yun2" "duo3";
|
||||||
|
fog_N = mkN "wu4" "chang3";
|
||||||
|
sky_N = mkN "tian1kong1" "pian1";
|
||||||
|
wind_N = mkN "feng1" "zhen4";
|
||||||
|
snow_N = mkN "xue3" "chang3";
|
||||||
|
ice_N = mkN "bing1" "kuai1";
|
||||||
|
smoke_N = mkN "yan1" "zhen4";
|
||||||
|
fire_N = mkN "huo3" "chang3";
|
||||||
|
ashes_N = mkN "hui1" [];
|
||||||
|
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" ;
|
||||||
|
night_N = mkN "ye4wan3" ; -- [mark] "ye4wan3" 's classifier is "ge4"
|
||||||
|
day_N = mkN "bai2tian1" []; -- [mark] "bai2tian1" -> "tian1", "tian1" itself is classifier
|
||||||
|
year_N = mkN "nian2" [] ; -- [mark] "nian2" itself is classifier
|
||||||
|
warm_A = mkA "wen1nuan3" ;
|
||||||
|
cold_A = mkA "leng3" ;
|
||||||
|
full_A = mkA "man3" ;
|
||||||
|
new_A = mkA "xin1" ;
|
||||||
|
old_A = mkA "lao3" ; -- [mark] "lao3" for person, "jiu4" for things
|
||||||
|
good_A = mkA "hao3" ;
|
||||||
|
bad_A = mkA "huai4" ;
|
||||||
|
rotten_A = mkA "lan4" ;
|
||||||
|
dirty_A = mkA "zang1" ;
|
||||||
|
straight_A = mkA "zhi2" ;
|
||||||
|
round_A = mkA "yuan2" ;
|
||||||
|
sharp_A = mkA "jian1" ;
|
||||||
|
dull_A = mkA "dun4" ;
|
||||||
|
smooth_A = mkA "guang1gu3" ;
|
||||||
|
wet_A = mkA "shi1" ;
|
||||||
|
dry_A = mkA "gan1" ;
|
||||||
|
correct_A = mkA "dui4" ;
|
||||||
|
near_A = mkA "jin4" ;
|
||||||
|
far_A = mkA "yuan3" ;
|
||||||
|
left_Ord = ss "zuo3" ;
|
||||||
|
right_Ord = ss "you4" ;
|
||||||
|
name_N = mkN "ming2zi4" ; -- [mark] "ming2" --> "ming2zi4"
|
||||||
|
|
||||||
|
-- HSK
|
||||||
|
|
||||||
|
add_V3 = mkV3 "jia1" ;
|
||||||
|
airplane_N = mkN "fei1ji1" "jia4";
|
||||||
|
already_Adv = mkAdv "yi3jing1" ;
|
||||||
|
answer_V2S = mkV2S (mkV "hui2da1") ;
|
||||||
|
apple_N = mkN "pin2guo3" ;
|
||||||
|
art_N = mkN "yi4shu4" []; -- [mark] usually without classifier
|
||||||
|
ask_V2Q = mkV2Q (mkV "wen4") ;
|
||||||
|
bank_N = mkN "yin2hang2" "jian1";
|
||||||
|
beautiful_A = mkA "piao1liang4" ;
|
||||||
|
become_VA = mkV "bian4" ;
|
||||||
|
beer_N = mkN "pi2jiu3" "bei1";
|
||||||
|
bike_N = mkN "zi4hang2che1" "tai2";
|
||||||
|
blue_A = mkA "la" ;
|
||||||
|
boat_N = mkN "chuan2" "sao1";
|
||||||
|
book_N = mkN "shu1" "ben3";
|
||||||
|
bread_N = mkN "mian4bao1" ;
|
||||||
|
buy_V2 = mkV2 "mai3" ;
|
||||||
|
cap_N = mkN "mao4zi3" "ding3";
|
||||||
|
car_N = mkN "qi4che1" "tai2";
|
||||||
|
chair_N = mkN "yi3zi3" "ba3";
|
||||||
|
city_N = mkN "cheng2shi4" ; -- [mark] "shi4" --> "cheng2shi4"
|
||||||
|
clean_A = mkA "gan1jing4" ;
|
||||||
|
coat_N = mkN "yi1fu2" "jian4";
|
||||||
|
country_N = mkN "guo2jia1" ; -- [mark] "guo2" --> "guo2jia1"
|
||||||
|
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" ;
|
||||||
|
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" ;
|
||||||
|
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" ;
|
||||||
|
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" ;
|
||||||
|
|
||||||
|
-- from Google
|
||||||
|
|
||||||
|
apartment_N = mkN "gong1yu4" "jian1" ;
|
||||||
|
baby_N = mkN "ying1er2" ;
|
||||||
|
boot_N = mkN "xue1zi3" "qi2" ; -- [mark] "ji1" --> "xue1zi3"
|
||||||
|
boss_N = mkN "lao3ban3" ;
|
||||||
|
boy_N = mkN "nan2hai2" ;
|
||||||
|
brother_N2 = mkN2 "di4di4" ;
|
||||||
|
butter_N = mkN "huang2you2" "he2";
|
||||||
|
camera_N = mkN "she4xiang4tou2" ;
|
||||||
|
carpet_N = mkN "detan3" "zhang1";
|
||||||
|
cat_N = mkN "mao1" "qi2" ;
|
||||||
|
ceiling_N = mkN "tian1hua1ban3" ; --[mark] "tian1hua1ban3shang4" --> "tian1hua1ban3"
|
||||||
|
cheese_N = mkN "nai3lao4" "kuai1";
|
||||||
|
church_N = mkN "jiao1tang2" "suo3" ;
|
||||||
|
computer_N = mkN "ji4suan4ji1" "tai2" ;
|
||||||
|
cousin_N = mkN "biao3di4" ;
|
||||||
|
distance_N3 = mkN3 (mkN "deju4li2") emptyPrep emptyPrep ; ----
|
||||||
|
enemy_N = mkN "di2ren2" ;
|
||||||
|
father_N2 = mkN2 "fu4qin1" ;
|
||||||
|
floor_N = mkN "deban3" ; -- [mark] floor "deban3"(have you cleaned the floor) "lou2ceng2"(which floor do you live?)
|
||||||
|
fridge_N = mkN "bing1xiang1" "tai2" ;
|
||||||
|
garden_N = mkN "hua1yuan2" "zuo4";
|
||||||
|
glove_N = mkN "shou3tao4" "fu4";
|
||||||
|
gold_N = mkN "jin1zi3" "kuai1"; -- [mark] also without classifier
|
||||||
|
harbour_N = mkN "hai3gang3" ;
|
||||||
|
iron_N = mkN "tie3" "kuai1"; -- [mark] also without classifier
|
||||||
|
king_N = mkN "guo2wang2" ;
|
||||||
|
leather_N = mkN "pi2ge2" "kuai1";
|
||||||
|
love_N = mkN "ai4" [] ; -- [mark] "kuai1" --> [], often without classifier
|
||||||
|
milk_N = mkN "niu2nai3" "bei1" ; -- [mark] "nai3" --> "niu2nai3", which literaly means cow milk
|
||||||
|
mother_N2 = mkN2 "mu3qin1";
|
||||||
|
oil_N = mkN "you2" "tong3" ; -- [mark] rewritten
|
||||||
|
peace_N = mkN "he2ping2" []; -- [mark] often without classifier
|
||||||
|
planet_N = mkN "xing1qiu2" ;
|
||||||
|
plastic_N = mkN "su4liao4" "kuai1"; -- [mark] "su4liao4zhi4cheng2" --> "su4liao4" often without classifier
|
||||||
|
policeman_N = mkN "jing3cha2" "ming2" ;
|
||||||
|
priest_N = mkN "mu4shi1" "wei4";
|
||||||
|
queen_N = mkN "nu:3wang2" ;
|
||||||
|
radio_N = mkN "shou1yin1ji1" "tai2" ;
|
||||||
|
religion_N = mkN "zong1jiao1" []; -- [mark] also without classifier
|
||||||
|
rock_N = mkN "dan4tou2" "kuai1" ;
|
||||||
|
roof_N = mkN "wu1ding3" ;
|
||||||
|
rubber_N = mkN "xiang4jiao1" "kuai1";
|
||||||
|
rule_N = mkN "gui1ze2" "xiang4"; -- [mark] "yuan2ze2" --> "gui1ze2"
|
||||||
|
shirt_N = mkN "chen4shan1" "jian4" ;
|
||||||
|
silver_N = mkN "yin2zi3" "kuai1"; -- [mark] "yin2" --> "yin2zi3"
|
||||||
|
sister_N = mkN "mei4mei4" ;
|
||||||
|
sock_N = mkN "wa4zi3" "qi2";
|
||||||
|
steel_N = mkN "gang1" "kuai1";
|
||||||
|
stove_N = mkN "lu2zi3" ;
|
||||||
|
village_N = mkN "cun1zhuang1" "zuo4";
|
||||||
|
war_N = mkN "zhan4zheng1" "chang3" ; -- [mark] rewritten
|
||||||
|
wood_N = mkN "mu4tou2" "kuai1" ; -- [mark] "mu4" --> "mu4tou2"
|
||||||
|
|
||||||
|
|
||||||
|
-- just missing
|
||||||
|
|
||||||
|
lin
|
||||||
|
alas_Interj = ssword "ai1" ;
|
||||||
|
beg_V2V = mkV2V (mkV "qi3qiu2") ; -- beg him to do something
|
||||||
|
break_V2 = mkV2 "da2po4" ;
|
||||||
|
broad_A = mkA "kuan1" ;
|
||||||
|
brown_A = mkA "zong1" ;
|
||||||
|
clever_A = mkA "cong1ming2" ;
|
||||||
|
close_V2 = mkV2 "guan1bi4" ;
|
||||||
|
easy_A2V = mkA2 "jian3chan2" ;
|
||||||
|
empty_A = mkA "kong1" ;
|
||||||
|
fun_AV = mkA "you3qu4" ;
|
||||||
|
hate_V2 = mkV2 "tao3yan4" ;
|
||||||
|
married_A2 = mkA2 "jie1hun1" ;
|
||||||
|
paris_PN = mkPN "ba1li2" ;
|
||||||
|
probable_AS = mkA "ke3neng2" ;
|
||||||
|
ready_A = mkA "zhun3bei4hao3" ; -- [mark] "zhun3bei4hao3": 准备(v) + 好(adj,complement)
|
||||||
|
seek_V2 = mkV2 "xun2qiu2" ;
|
||||||
|
stop_V = mkV "ting2zhi3" ;
|
||||||
|
stupid_A = mkA "ben4" ;
|
||||||
|
switch8off_V2 = mkV2 "guan1" ;
|
||||||
|
switch8on_V2 = mkV2 "kai1" ;
|
||||||
|
ugly_A = mkA "chou3" ;
|
||||||
|
uncertain_A = mkA "bu4que4ding4" ; -- [mark] "bu4que4ding4": 不("un-") + 确定("certain")
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
15
lib/src/chinese/pinyin/MkPinyin.hs
Normal file
15
lib/src/chinese/pinyin/MkPinyin.hs
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
import qualified Data.Map as Map
|
||||||
|
import Pinyin (c2pMap, useMapGF, mkList)
|
||||||
|
|
||||||
|
main = do
|
||||||
|
s <- readFile pinyinFile
|
||||||
|
let m = c2pMap (mkList (words s))
|
||||||
|
mapM_ (mkPinyin m) ["Lexicon", "Numeral", "Res", "Structural"]
|
||||||
|
return ()
|
||||||
|
|
||||||
|
pinyinFile = "../pinyin.txt"
|
||||||
|
|
||||||
|
mkPinyin ma mo = do
|
||||||
|
s <- readFile (mo ++ "Chi.gf")
|
||||||
|
writeFile (mo ++ "Cmn.gf") (useMapGF ma s)
|
||||||
|
|
||||||
87
lib/src/chinese/pinyin/NounCmn.gf
Normal file
87
lib/src/chinese/pinyin/NounCmn.gf
Normal file
@@ -0,0 +1,87 @@
|
|||||||
|
concrete NounCmn of Noun = CatCmn ** open ResCmn, Prelude in {
|
||||||
|
|
||||||
|
lin
|
||||||
|
DetCN det cn = case det.detType of {
|
||||||
|
DTFull Sg => {s = det.s ++ cn.c ++ cn.s} ; -- this house
|
||||||
|
DTFull Pl => {s = det.s ++ xie_s ++ cn.s} ; -- these houses
|
||||||
|
DTNum => {s = det.s ++ cn.c ++ cn.s} ; -- (these) five houses
|
||||||
|
DTPoss => {s = det.s ++ cn.s} -- our (five) houses
|
||||||
|
} ;
|
||||||
|
UsePN pn = pn ;
|
||||||
|
UsePron p = p ;
|
||||||
|
|
||||||
|
DetNP det = det ;
|
||||||
|
|
||||||
|
PredetNP pred np = mkNP (pred.s ++ possessive_s ++ np.s) ;
|
||||||
|
|
||||||
|
PPartNP np v2 = mkNP ((predV v2).verb.s ++ possessive_s ++ np.s) ; ---- ??
|
||||||
|
|
||||||
|
AdvNP np adv = mkNP (adv.s ++ possessive_s ++ np.s) ;
|
||||||
|
|
||||||
|
DetQuant quant num = {
|
||||||
|
s = quant.s ++ num.s ;
|
||||||
|
detType = case num.numType of {
|
||||||
|
NTFull => DTNum ; -- five
|
||||||
|
NTVoid n => case quant.detType of {
|
||||||
|
DTPoss => DTPoss ; -- our
|
||||||
|
_ => DTFull n -- these/this
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} ;
|
||||||
|
|
||||||
|
DetQuantOrd quant num ord = {
|
||||||
|
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
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} ;
|
||||||
|
|
||||||
|
PossPron p = {
|
||||||
|
s = p.s ++ possessive_s ;
|
||||||
|
detType = DTPoss
|
||||||
|
} ;
|
||||||
|
|
||||||
|
NumSg = {s = [] ; numType = NTVoid Sg} ;
|
||||||
|
NumPl = {s = [] ; numType = NTVoid Pl} ;
|
||||||
|
|
||||||
|
NumCard n = n ** {numType = NTFull} ;
|
||||||
|
NumDigits d = d ** {numType = NTFull} ;
|
||||||
|
OrdDigits d = {s = ordinal_s ++ d.s} ;
|
||||||
|
|
||||||
|
NumNumeral numeral = numeral ** {hasC = True} ;
|
||||||
|
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 ?
|
||||||
|
|
||||||
|
MassNP cn = cn ;
|
||||||
|
|
||||||
|
UseN n = n ;
|
||||||
|
UseN2 n = n ;
|
||||||
|
Use2N3 f = {s = f.s ; c = f.c ; c2 = f.c2} ;
|
||||||
|
Use3N3 f = {s = f.s ; c = f.c ; c2 = f.c3} ;
|
||||||
|
|
||||||
|
ComplN2 f x = {s = appPrep f.c2 x.s ++ f.s ; c = f.c} ;
|
||||||
|
ComplN3 f x = {s = appPrep f.c2 x.s ++ f.s ; c = f.c ; c2 = f.c3} ;
|
||||||
|
|
||||||
|
AdjCN ap cn = case ap.monoSyl of {
|
||||||
|
True => {s = ap.s ++ cn.s ; c = cn.c} ;
|
||||||
|
False => {s = ap.s ++ possessive_s ++ cn.s ; c = cn.c}
|
||||||
|
} ;
|
||||||
|
|
||||||
|
RelCN cn rs = {s = rs.s ++ cn.s ; c = cn.c} ;
|
||||||
|
AdvCN cn ad = {s = ad.s ++ possessive_s ++ cn.s ; c = cn.c} ;
|
||||||
|
SentCN cn cs = {s = cs.s ++ cn.s ; c = cn.c} ;
|
||||||
|
ApposCN cn np = {s = np.s ++ cn.s ; c = cn.c} ;
|
||||||
|
|
||||||
|
RelNP np rs = mkNP (rs.s ++ np.s) ;
|
||||||
|
|
||||||
|
}
|
||||||
143
lib/src/chinese/pinyin/NumeralCmn.gf
Normal file
143
lib/src/chinese/pinyin/NumeralCmn.gf
Normal file
@@ -0,0 +1,143 @@
|
|||||||
|
concrete NumeralCmn of Numeral = CatCmn ** open ResCmn, Prelude in {
|
||||||
|
|
||||||
|
flags coding = utf8 ;
|
||||||
|
|
||||||
|
|
||||||
|
param Qform = bai | bai0 | shiwan | shiwan0 ;
|
||||||
|
param Bform = shi | shi0 | wan | wan0 ;
|
||||||
|
param Zero = zero | nozero ;
|
||||||
|
oper ling : Zero * Zero => Str =
|
||||||
|
table {<zero,z> => "ling2" ;
|
||||||
|
<z,zero> => "ling2" ;
|
||||||
|
<nozero,nozero> => []} ;
|
||||||
|
oper Wan : Zero => Str =
|
||||||
|
table {zero => "wan4" ;
|
||||||
|
nozero => []} ;
|
||||||
|
|
||||||
|
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} ;
|
||||||
|
|
||||||
|
-- 一二三四五六七八九十一百千
|
||||||
|
--
|
||||||
|
|
||||||
|
lin n2 =
|
||||||
|
{s = mkD "er4" "er4"} ;
|
||||||
|
lin n3 =
|
||||||
|
{s = mkD "san1" "san1"} ;
|
||||||
|
lin n4 =
|
||||||
|
{s = mkD "si4" "si4"} ;
|
||||||
|
lin n5 =
|
||||||
|
{s = mkD "wu3" "wu3"} ;
|
||||||
|
lin n6 =
|
||||||
|
{s = mkD "liu4" "liu4"} ;
|
||||||
|
lin n7 =
|
||||||
|
{s = mkD "qi1" "qi1"} ;
|
||||||
|
lin n8 =
|
||||||
|
{s = mkD "ba1" "ba1"} ;
|
||||||
|
lin n9 =
|
||||||
|
{s = mkD "jiu3" "jiu3"} ;
|
||||||
|
lin pot01 =
|
||||||
|
{s = mkD "yi1" "yi1"} ;
|
||||||
|
lin pot0 d =
|
||||||
|
{s = d.s} ;
|
||||||
|
lin pot110 =
|
||||||
|
{inh = nozero ;
|
||||||
|
s = table {
|
||||||
|
shi => mkD "yi1shi2" "yi1shi2" ;
|
||||||
|
shi0 => mkD "yi1shi2" "yi1shi2" ;
|
||||||
|
wan => mkD "yi1wan4" "yi1wan4" ;
|
||||||
|
wan0 => mkD "yi1wan4" "yi1wan4"}} ;
|
||||||
|
lin pot111 =
|
||||||
|
{inh = nozero ;
|
||||||
|
s = table {
|
||||||
|
shi => mkD "shi2yi1" "shi2yi1" ;
|
||||||
|
shi0 => mkD "yi1shi2yi1" "yi1shi2yi1" ;
|
||||||
|
wan => mkD "shi2yi1wan4" "shi2yi1wan4" ;
|
||||||
|
wan0 => mkD "shi2yi1wan4" "shi2yi1wan4"}} ;
|
||||||
|
lin pot1to19 d =
|
||||||
|
{inh = nozero ;
|
||||||
|
s = table {
|
||||||
|
shi => mkD "yi1shi2" "yi1shi2" ++ d.s ;
|
||||||
|
shi0 => mkD "yi1shi2" "yi1shi2" ;
|
||||||
|
wan => mkD "yi1wan4" "yi1wan4" ++ d.s ++ mkD "qian1" "qian1" ;
|
||||||
|
wan0 => mkD "yi1wan4" "yi1wan4" ++ d.s ++ mkD "qian1" "qian1"}} ;
|
||||||
|
lin pot0as1 n =
|
||||||
|
{inh = zero ;
|
||||||
|
s = table {
|
||||||
|
shi => n.s ;
|
||||||
|
shi0 => n.s ;
|
||||||
|
wan => n.s ++ mkD "qian1" "qian1" ;
|
||||||
|
wan0 => n.s ++ mkD "qian1" "qian1"}} ;
|
||||||
|
lin pot1 d =
|
||||||
|
{inh = zero ;
|
||||||
|
s = 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 {
|
||||||
|
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" ;
|
||||||
|
wan0 => d.s ++ "wan4" ++ e.s ++ mkD "qian1" "qian1"}} ;
|
||||||
|
lin pot1as2 n =
|
||||||
|
{inh = zero ;
|
||||||
|
s = table {
|
||||||
|
bai => n.s ! shi ;
|
||||||
|
bai0 => n.s ! shi ;
|
||||||
|
shiwan => n.s ! wan ;
|
||||||
|
shiwan0 => n.s ! wan0}} ;
|
||||||
|
lin pot2 d =
|
||||||
|
{inh = zero ;
|
||||||
|
s = 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 {
|
||||||
|
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} ;
|
||||||
|
lin pot3 n =
|
||||||
|
{s = n.s ! shiwan} ;
|
||||||
|
lin pot3plus n m =
|
||||||
|
{s = (n.s ! shiwan0) ++ (ling ! <n.inh,m.inh>) ++ m.s ! bai0} ;
|
||||||
|
|
||||||
|
|
||||||
|
-- numerals as sequences of digits
|
||||||
|
|
||||||
|
lincat
|
||||||
|
Dig = SS ;
|
||||||
|
|
||||||
|
lin
|
||||||
|
IDig d = d ;
|
||||||
|
|
||||||
|
IIDig d i = ss (d.s ++ i.s) ;
|
||||||
|
|
||||||
|
D_0 = ss "0" ;
|
||||||
|
D_1 = ss "1" ;
|
||||||
|
D_2 = ss "2" ;
|
||||||
|
D_3 = ss "3" ;
|
||||||
|
D_4 = ss "4" ;
|
||||||
|
D_5 = ss "5" ;
|
||||||
|
D_6 = ss "6" ;
|
||||||
|
D_7 = ss "7" ;
|
||||||
|
D_8 = ss "8" ;
|
||||||
|
D_9 = ss "9" ;
|
||||||
|
|
||||||
|
}
|
||||||
118
lib/src/chinese/pinyin/ParadigmsCmn.gf
Normal file
118
lib/src/chinese/pinyin/ParadigmsCmn.gf
Normal file
@@ -0,0 +1,118 @@
|
|||||||
|
resource ParadigmsCmn = open CatCmn, ResCmn, Prelude in {
|
||||||
|
|
||||||
|
flags coding = utf8 ;
|
||||||
|
|
||||||
|
flags coding=utf8;
|
||||||
|
oper
|
||||||
|
mkN = overload {
|
||||||
|
mkN : (man : Str) -> N
|
||||||
|
= \n -> lin N (regNoun n ge_s) ;
|
||||||
|
mkN : (man : Str) -> Str -> N
|
||||||
|
= \n,c -> lin N (regNoun n c)
|
||||||
|
} ;
|
||||||
|
|
||||||
|
mkN2 = overload {
|
||||||
|
mkN2 : Str -> N2
|
||||||
|
= \n -> lin N2 (regNoun n ge_s ** {c2 = emptyPrep}) ; ---- possessive ?
|
||||||
|
---- mkN2 : N -> Str -> N2
|
||||||
|
---- = \n,p -> lin N2 (n ** {c2 = mkPrep p}) ;
|
||||||
|
} ;
|
||||||
|
|
||||||
|
mkN3 : N -> Preposition -> Preposition -> N3
|
||||||
|
= \n,p,q -> lin N3 (n ** {c2 = p ; c3 = q}) ;
|
||||||
|
|
||||||
|
|
||||||
|
mkPN : (john : Str) -> PN
|
||||||
|
= \s -> lin PN {s = word s} ;
|
||||||
|
|
||||||
|
mkA = overload {
|
||||||
|
mkA : (small : Str) -> A
|
||||||
|
= \a -> lin A (simpleAdj a) ;
|
||||||
|
mkA : (small : Str) -> Bool -> A
|
||||||
|
= \a,b -> lin A (mkAdj a b) ;
|
||||||
|
} ;
|
||||||
|
|
||||||
|
mkA2 : Str -> A2 = \a -> lin A2 (simpleAdj a ** {c2 = emptyPrep}) ;
|
||||||
|
|
||||||
|
mkV = overload {
|
||||||
|
mkV : (walk : Str) -> V
|
||||||
|
= \walk -> lin V (regVerb walk) ;
|
||||||
|
mkV : (arrive : Str) -> Str -> Str -> Str -> Str -> V
|
||||||
|
= \arrive,pp,ds,dp,ep -> lin V (mkVerb arrive pp ds dp ep neg_s) ;
|
||||||
|
mkV : (arrive : Str) -> Str -> Str -> Str -> Str -> Str -> V
|
||||||
|
= \arrive,pp,ds,dp,ep,neg -> lin V (mkVerb arrive pp ds dp ep neg) ;
|
||||||
|
} ;
|
||||||
|
|
||||||
|
|
||||||
|
mkV2 : Str -> V2
|
||||||
|
= \s -> lin V2 (regVerb s ** {c2 = emptyPrep}) ;
|
||||||
|
|
||||||
|
mkV3 = overload {
|
||||||
|
mkV3 : Str -> V3
|
||||||
|
= \s -> lin V3 (regVerb s ** {c2,c3 = emptyPrep}) ;
|
||||||
|
mkV3 : V -> V3
|
||||||
|
= \s -> lin V3 (s ** {c2,c3 = emptyPrep}) ;
|
||||||
|
---- mkV3 : V -> Str -> Str -> V3
|
||||||
|
---- = \v,p,q -> lin V3 (v ** {c2 = mkPrep p ; c3 = mkPrep q}) ;
|
||||||
|
} ;
|
||||||
|
|
||||||
|
mkVV : Str -> VV = ----
|
||||||
|
\v -> lin VV (regVerb v) ;
|
||||||
|
|
||||||
|
mkVQ : V -> VQ =
|
||||||
|
\v -> lin VQ v ;
|
||||||
|
|
||||||
|
mkVS : V -> VS =
|
||||||
|
\v -> lin VS v ;
|
||||||
|
|
||||||
|
mkVA : V -> VA =
|
||||||
|
\v -> lin VA v ;
|
||||||
|
|
||||||
|
mkV2Q : V -> V2Q =
|
||||||
|
\v -> lin V2Q (v ** {c2 = emptyPrep}) ;
|
||||||
|
---- mkV2Q : V -> Str -> V2Q =
|
||||||
|
---- \v,p -> lin V2Q (v ** {c2 = mkPrep p}) ;
|
||||||
|
|
||||||
|
mkV2V : V -> V2V =
|
||||||
|
\v -> lin V2V (v ** {c2 = emptyPrep ; c3 = emptyPrep}) ;
|
||||||
|
---- mkV2V : V -> Str -> Str -> V2V =
|
||||||
|
---- \v,p,q -> lin V2V (v ** {c2 = mkPrep p ; c3 = mkPrep q}) ;
|
||||||
|
|
||||||
|
mkV2S : V -> V2S =
|
||||||
|
\v -> lin V2S (v ** {c2 = emptyPrep}) ;
|
||||||
|
---- mkV2S : V -> Str -> V2S =
|
||||||
|
---- \v,p -> lin V2S (v ** {c2 = mkPrep p}) ;
|
||||||
|
|
||||||
|
mkV2A : V -> V2A
|
||||||
|
= \v -> lin V2A (v ** {c2 = emptyPrep ; c3 = emptyPrep}) ;
|
||||||
|
---- mkV2A : V -> Str -> Str -> V2A
|
||||||
|
---- = \v,p,q -> lin V2A (v ** {c2 = mkPrep p ; c3 = mkPrep q}) ;
|
||||||
|
|
||||||
|
mkAdv = overload {
|
||||||
|
mkAdv : Str -> Adv
|
||||||
|
= \s -> lin Adv {s = word s ; advType = ATPlace} ;
|
||||||
|
mkAdv : Str -> AdvType -> Adv
|
||||||
|
= \s,at -> lin Adv {s = word s ; advType = at} ;
|
||||||
|
} ;
|
||||||
|
|
||||||
|
AdvType : Type
|
||||||
|
= ResCmn.AdvType ;
|
||||||
|
placeAdvType : AdvType
|
||||||
|
= ATPlace ;
|
||||||
|
timeAdvType : AdvType
|
||||||
|
= ATTime ;
|
||||||
|
mannerAdvType : AdvType
|
||||||
|
= ATManner ;
|
||||||
|
|
||||||
|
mkPrep = overload { ---- is this the right order of the fields?
|
||||||
|
mkPrep : Str -> Preposition
|
||||||
|
= \s -> ResCmn.mkPreposition s [] ;
|
||||||
|
mkPrep : Str -> Str -> Preposition
|
||||||
|
= \s,t -> ResCmn.mkPreposition s t ;
|
||||||
|
} ;
|
||||||
|
|
||||||
|
emptyPrep : Preposition = mkPrep [] ;
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
27
lib/src/chinese/pinyin/PhraseCmn.gf
Normal file
27
lib/src/chinese/pinyin/PhraseCmn.gf
Normal file
@@ -0,0 +1,27 @@
|
|||||||
|
concrete PhraseCmn of Phrase = CatCmn ** open Prelude, ResCmn in {
|
||||||
|
|
||||||
|
lin
|
||||||
|
PhrUtt pconj utt voc = {s = pconj.s ++ utt.s ++ voc.s} ;
|
||||||
|
|
||||||
|
UttS s = s ;
|
||||||
|
UttQS qs = qs ;
|
||||||
|
UttImpSg pol imp = {s = pol.s ++ imp.s ! pol.p} ;
|
||||||
|
UttImpPl pol imp = {s = pol.s ++ imp.s ! pol.p} ;
|
||||||
|
UttImpPol pol imp = {s = pol.s ++ imp.s ! pol.p} ; --- add politeness here?
|
||||||
|
|
||||||
|
UttIP ip = ip ;
|
||||||
|
UttIAdv iadv = iadv ;
|
||||||
|
UttNP np = np ;
|
||||||
|
UttCN cn = cn ;
|
||||||
|
UttAP ap = ap ;
|
||||||
|
UttCard x = x ;
|
||||||
|
UttVP vp = ss (infVP vp) ;
|
||||||
|
UttAdv adv = adv ;
|
||||||
|
|
||||||
|
NoPConj = {s = []} ;
|
||||||
|
PConjConj conj = ss (conj.s ! CSent).s2 ;
|
||||||
|
|
||||||
|
NoVoc = {s = []} ;
|
||||||
|
VocNP np = {s = np.s} ; ---- ??
|
||||||
|
|
||||||
|
}
|
||||||
64
lib/src/chinese/pinyin/Pinyin.hs
Normal file
64
lib/src/chinese/pinyin/Pinyin.hs
Normal file
@@ -0,0 +1,64 @@
|
|||||||
|
module Pinyin where
|
||||||
|
|
||||||
|
import Numeric
|
||||||
|
import qualified Data.Map as Map
|
||||||
|
import System
|
||||||
|
|
||||||
|
-- AR 3/10/2012
|
||||||
|
-- Chinese unicode - character - pinyin conversions
|
||||||
|
-- character data from http://www.linguanaut.com/chinese_alphabet2.htm
|
||||||
|
|
||||||
|
main = do
|
||||||
|
xs <- getArgs
|
||||||
|
s <- readFile "pinyin.txt"
|
||||||
|
let ws = mkList (words s)
|
||||||
|
case xs of
|
||||||
|
"c2p":_ -> interact (useMap (c2pMap ws)) -- Chinese char to Pinyin (all results)
|
||||||
|
"p2c":_ -> interact (useMap (p2cMap ws)) -- Pinyin to Chinese char (all results)
|
||||||
|
"c2u":_ -> interact (useMap (c2uMap ws)) -- Chinese char to Unicode hex
|
||||||
|
"u2c":_ -> interact (useMap (u2cMap ws)) -- Unicode hex to Chinese char
|
||||||
|
"c2pGF":_ -> interact (useMapGF (c2pMap ws)) -- char to pinyin (first result) in string literals (e.g. in GF files)
|
||||||
|
"p2cTry":_ -> interact (tryUseMap (p2cMap ws)) -- pinyin to char, trying syllable with all tone marks
|
||||||
|
|
||||||
|
_ -> mapM_ (putStrLn . printOne) ws
|
||||||
|
|
||||||
|
mkList ws = case ws of
|
||||||
|
c:w:ws -> (head (map (flip Numeric.showHex "" . fromEnum) c), (c, chop w)) : mkList ws
|
||||||
|
_ -> []
|
||||||
|
|
||||||
|
printOne (u,(c,ws)) = u ++ "\t" ++ c ++ "\t" ++ unwords ws
|
||||||
|
|
||||||
|
chop = words . map unslash
|
||||||
|
where
|
||||||
|
unslash '/' = ' '
|
||||||
|
unslash c = c
|
||||||
|
|
||||||
|
useMap :: Map.Map String String -> String -> String
|
||||||
|
useMap = useMapWith words unwords (const "NONE")
|
||||||
|
|
||||||
|
tryUseMap :: Map.Map String String -> String -> String
|
||||||
|
tryUseMap m = unlines . map try . words where
|
||||||
|
try w = unwords [c ++ " (" ++ w2 ++ ")" | w2 <- alts w, Just c <- [Map.lookup w2 m]]
|
||||||
|
alts w = w : [w ++ show i | i <- [1 .. 4]]
|
||||||
|
|
||||||
|
useMapWith :: (String -> [String]) -> ([String] -> String) -> (String -> String) -> Map.Map 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
|
||||||
|
'"':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]
|
||||||
|
p2cMap ws = Map.fromListWith (++) [(p,c) | (_,(c,ps)) <- ws, p <- ps] -- store all chars with the same pinyin
|
||||||
|
c2uMap ws = Map.fromList [(c,u) | (u,(c,_)) <- ws]
|
||||||
|
u2cMap ws = Map.fromList [(u,c) | (u,(c,_)) <- ws]
|
||||||
|
|
||||||
|
|
||||||
40
lib/src/chinese/pinyin/QuestionCmn.gf
Normal file
40
lib/src/chinese/pinyin/QuestionCmn.gf
Normal file
@@ -0,0 +1,40 @@
|
|||||||
|
concrete QuestionCmn of Question = CatCmn **
|
||||||
|
open ResCmn, Prelude in {
|
||||||
|
|
||||||
|
flags optimize=all_subs ;
|
||||||
|
|
||||||
|
lin
|
||||||
|
|
||||||
|
QuestCl cl = {s = \\p,a => cl.s ! p ! a ++ question_s} ; --- plus redup questions
|
||||||
|
|
||||||
|
QuestVP ip vp = {
|
||||||
|
s = \\p,a => ip.s ++ vp.prePart ++ useVerb vp.verb ! p ! a ++ vp.compl
|
||||||
|
} ;
|
||||||
|
|
||||||
|
QuestSlash ip cls = {
|
||||||
|
s =\\p,a => cls.c2.prepPre ++ cls.np ++ cls.c2.prepMain ++ cls.vp ! p ! a ++
|
||||||
|
possessive_s ++ di_s ++ ip.s
|
||||||
|
} ;
|
||||||
|
|
||||||
|
QuestIAdv iadv cl = {s = \\p,a => cl.np ++ iadv.s ++ cl.vp ! p ! a} ;
|
||||||
|
|
||||||
|
QuestIComp icomp np = {s = \\p,a => np.s ++ icomp.s} ; ---- order
|
||||||
|
|
||||||
|
PrepIP p ip = ss (appPrep p ip.s) ;
|
||||||
|
|
||||||
|
AdvIP ip adv = ss (adv.s ++ possessive_s ++ ip.s) ; ---- adding de
|
||||||
|
|
||||||
|
IdetCN det cn = {s = det.s ++ cn.c ++ cn.s} ; ---- number?
|
||||||
|
|
||||||
|
IdetIP idet = idet ;
|
||||||
|
|
||||||
|
IdetQuant iquant num = ss (iquant.s ++ num.s) ; ----
|
||||||
|
|
||||||
|
AdvIAdv i a = ss (a.s ++ i.s) ;
|
||||||
|
|
||||||
|
CompIAdv a = ss (zai_s ++ a.s) ;
|
||||||
|
|
||||||
|
CompIP ip = ss (copula_s ++ ip.s) ;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
12
lib/src/chinese/pinyin/RelativeCmn.gf
Normal file
12
lib/src/chinese/pinyin/RelativeCmn.gf
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
concrete RelativeCmn of Relative = CatCmn ** open ResCmn, Prelude in {
|
||||||
|
|
||||||
|
lin
|
||||||
|
RelCl cl = {s = \\p,a => cl.s ! p ! a ++ relative_s} ; ---- ??
|
||||||
|
RelVP rp vp = {
|
||||||
|
s = \\p,a => vp.prePart ++ useVerb vp.verb ! p ! a ++ vp.compl ++ rp.s
|
||||||
|
} ; ---- ??
|
||||||
|
RelSlash rp slash = {s = \\p,a => slash.s ! p ! a ++ appPrep slash.c2 rp.s} ;
|
||||||
|
FunRP p np rp = ss (appPrep p np.s ++ rp.s) ; ---- ??
|
||||||
|
IdRP = ss relative_s ;
|
||||||
|
|
||||||
|
}
|
||||||
223
lib/src/chinese/pinyin/ResCmn.gf
Normal file
223
lib/src/chinese/pinyin/ResCmn.gf
Normal file
@@ -0,0 +1,223 @@
|
|||||||
|
--# -path=.:../abstract:../common:../../prelude
|
||||||
|
|
||||||
|
--1 Thai auxiliary operations.
|
||||||
|
--
|
||||||
|
---- This module contains operations that are needed to make the
|
||||||
|
---- resource syntax work. To define everything that is needed to
|
||||||
|
---- implement $Test$, it moreover contains regular lexical
|
||||||
|
---- patterns needed for $Lex$.
|
||||||
|
--
|
||||||
|
resource ResCmn = ParamX ** open Prelude in {
|
||||||
|
|
||||||
|
flags coding = utf8 ;
|
||||||
|
|
||||||
|
oper
|
||||||
|
|
||||||
|
-- strings ----
|
||||||
|
|
||||||
|
defaultStr = "" ;
|
||||||
|
|
||||||
|
than_s = "bi3" ;
|
||||||
|
progressive_s = defaultStr ;
|
||||||
|
possessive_s = "de" ; -- also used for AP + NP
|
||||||
|
deAdvV_s = "de" ; -- between Adv and V
|
||||||
|
deVAdv_s = "de2" ; -- between V and Adv
|
||||||
|
imperneg_s = neg_s ;
|
||||||
|
conjThat = emptyStr ; ----
|
||||||
|
reflPron = word "zi4ji3" ; -- pron + refl
|
||||||
|
passive_s = defaultStr ;
|
||||||
|
relative_s = possessive_s ; -- relative
|
||||||
|
superlative_s = "zui4" ; -- superlative, sup + adj + de
|
||||||
|
zai_s = "zai4" ; -- copula for place
|
||||||
|
you_s = "you3" ; -- to have
|
||||||
|
|
||||||
|
copula_s = "shi4" ;
|
||||||
|
exist_s = word "cun2zai4" ;
|
||||||
|
neg_s = "bu4" ;
|
||||||
|
question_s = "ma3" ;
|
||||||
|
yi_s = "yi1" ;
|
||||||
|
ordinal_s = "di4" ;
|
||||||
|
xie_s = "xie1" ;
|
||||||
|
the_s = "na3" ;
|
||||||
|
geng_s = "geng1" ; -- more, in comparison
|
||||||
|
|
||||||
|
zai_V = mkVerb "zai4" [] [] [] [] "bu4" ;
|
||||||
|
fullstop_s = "." ;
|
||||||
|
questmark_s = "?" ;
|
||||||
|
exclmark_s = "!" ;
|
||||||
|
ge_s = "ge4" ;
|
||||||
|
di_s = "shi4" ; -- used in QuestSlash
|
||||||
|
|
||||||
|
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
|
||||||
|
|
||||||
|
word : Str -> Str = \s -> case s of {
|
||||||
|
x@? + y@? + z@? + u@? => bword x (bword y (bword z u)) ;
|
||||||
|
x@? + y@? + z@? => bword x (bword y z) ;
|
||||||
|
x@? + y@? => bword x y ;
|
||||||
|
_ => s
|
||||||
|
} ;
|
||||||
|
|
||||||
|
ssword : Str -> SS = \s -> ss (word s) ;
|
||||||
|
|
||||||
|
------------------------------------------------ from Jolene
|
||||||
|
|
||||||
|
-- parameters
|
||||||
|
|
||||||
|
param
|
||||||
|
Aspect = APlain | APerf | ADurStat | ADurProg | AExper ; ---- APlain added by AR
|
||||||
|
ConjForm = CPhr CPosType | CSent;
|
||||||
|
CPosType = CAPhrase | CNPhrase | CVPhrase ;
|
||||||
|
DeForm = DeNoun | NdNoun ; -- parameter created for noun with/out partical "de"
|
||||||
|
|
||||||
|
AdvType = ATPlace | ATTime | ATManner ;
|
||||||
|
|
||||||
|
-- parts of speech
|
||||||
|
|
||||||
|
oper
|
||||||
|
|
||||||
|
VP = {verb : Verb ; compl : Str ; prePart : Str} ;
|
||||||
|
NP = {s : Str} ;
|
||||||
|
|
||||||
|
-- for morphology
|
||||||
|
|
||||||
|
Noun : Type = {s : Str; c : Str} ;
|
||||||
|
Adj : Type = {s : Str; monoSyl: Bool} ;
|
||||||
|
Verb : Type = {s : Str ; pp,ds,dp,ep : Str ; neg : Str} ;
|
||||||
|
|
||||||
|
regNoun : Str -> Str -> Noun = \s,c -> {s = word s ; c = word c};
|
||||||
|
|
||||||
|
mkAdj : Str -> Bool -> Adj = \s,b -> {s = word s ; monoSyl = b};
|
||||||
|
|
||||||
|
complexAP : Str -> Adj = \s -> {s = s ; monoSyl = False} ;
|
||||||
|
|
||||||
|
simpleAdj : Str -> Adj = \s -> case s of {
|
||||||
|
? => mkAdj s True ; -- monosyllabic
|
||||||
|
_ => mkAdj s False
|
||||||
|
} ;
|
||||||
|
|
||||||
|
copula : Verb = mkVerb "shi4" [] [] [] [] "bu4" ;
|
||||||
|
|
||||||
|
regVerb : (walk : Str) -> Verb = \v ->
|
||||||
|
mkVerb v "le" "zhao1" "zai4" "guo4" "mei2" ;
|
||||||
|
|
||||||
|
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} ;
|
||||||
|
|
||||||
|
useVerb : Verb -> Polarity => Aspect => Str = \v ->
|
||||||
|
table {
|
||||||
|
Pos => table {
|
||||||
|
APlain => v.s ;
|
||||||
|
APerf => v.s ++ v.pp ;
|
||||||
|
ADurStat => v.s ++ v.ds ;
|
||||||
|
ADurProg => v.dp ++ v.s ;
|
||||||
|
AExper => v.s ++ v.ep
|
||||||
|
} ;
|
||||||
|
Neg => table {
|
||||||
|
APlain => v.neg ++ v.s ; --- neg?
|
||||||
|
APerf => "bu4" ++ v.s ++ v.pp ;
|
||||||
|
ADurStat => "bu4" ++ v.s ;
|
||||||
|
ADurProg => v.neg ++ v.dp ++ v.s ; -- mei or bu
|
||||||
|
AExper => v.neg ++ v.s ++ v.ep
|
||||||
|
}
|
||||||
|
} ;
|
||||||
|
|
||||||
|
infVP : VP -> Str = \vp -> vp.prePart ++ vp.verb.s ++ vp.compl ;
|
||||||
|
|
||||||
|
predV : Verb -> VP = \v -> {
|
||||||
|
verb = v ;
|
||||||
|
compl = [] ;
|
||||||
|
prePart = [] ;
|
||||||
|
} ;
|
||||||
|
|
||||||
|
insertObj : NP -> VP -> VP = \np,vp -> {
|
||||||
|
verb = vp.verb ;
|
||||||
|
compl = np.s ++ vp.compl ;
|
||||||
|
prePart = vp.prePart
|
||||||
|
} ;
|
||||||
|
|
||||||
|
insertObjPost : NP -> VP -> VP = \np,vp -> {
|
||||||
|
verb = vp.verb ;
|
||||||
|
compl = vp.compl ++ np.s ;
|
||||||
|
prePart = vp.prePart
|
||||||
|
} ;
|
||||||
|
|
||||||
|
insertAdv : SS -> VP -> VP = \adv,vp -> {
|
||||||
|
verb = vp.verb ;
|
||||||
|
compl = vp.compl ;
|
||||||
|
prePart = adv.s
|
||||||
|
} ;
|
||||||
|
|
||||||
|
insertExtra : SS -> VP -> VP = \ext,vp ->
|
||||||
|
insertObjPost ext vp ;
|
||||||
|
|
||||||
|
-- clauses: keep np and vp separate to enable insertion of IAdv
|
||||||
|
|
||||||
|
Clause : Type = {
|
||||||
|
s : Polarity => Aspect => Str ;
|
||||||
|
np : Str;
|
||||||
|
vp : Polarity => Aspect => Str
|
||||||
|
} ;
|
||||||
|
|
||||||
|
|
||||||
|
mkClause = overload {
|
||||||
|
mkClause : Str -> Verb -> Clause = \np,v -> mkClauseCompl np (useVerb v) [] ;
|
||||||
|
mkClause : Str -> (Polarity => Aspect => Str) -> Str -> Clause = mkClauseCompl ;
|
||||||
|
mkClause : Str -> Verb -> Str -> Clause = \subj,verb,obj ->
|
||||||
|
mkClauseCompl subj (useVerb verb) obj ;
|
||||||
|
mkClause : Str -> VP -> Clause = \np,vp ->
|
||||||
|
mkClauseCompl np (\\p,a => vp.prePart ++ useVerb vp.verb ! p ! a) vp.compl ;
|
||||||
|
} ;
|
||||||
|
|
||||||
|
mkClauseCompl : Str -> (Polarity => Aspect => Str) -> Str -> Clause = \np,vp,compl -> {
|
||||||
|
s = \\p,a => np ++ vp ! p ! a ++ compl ;
|
||||||
|
np = np ;
|
||||||
|
vp = \\p,a => vp ! p ! a ++ compl
|
||||||
|
} ;
|
||||||
|
|
||||||
|
|
||||||
|
-- for structural words
|
||||||
|
|
||||||
|
param
|
||||||
|
DetType = DTFull Number | DTNum | DTPoss ; -- this, these, five, our
|
||||||
|
NumType = NTFull | NTVoid Number ; -- five, sg, pl
|
||||||
|
|
||||||
|
oper
|
||||||
|
Determiner = {s : Str ; detType : DetType} ;
|
||||||
|
|
||||||
|
mkDet = overload {
|
||||||
|
mkDet : Str -> Determiner = \s -> {s = s ; detType = DTFull Sg} ;
|
||||||
|
mkDet : Str -> Number -> Determiner = \s,n -> {s = s ; detType = DTFull n} ;
|
||||||
|
mkDet : Str -> DetType -> Determiner = \s,d -> {s = s ; detType = d} ;
|
||||||
|
} ;
|
||||||
|
|
||||||
|
mkQuant : Str -> {s : Str} = ss ;
|
||||||
|
|
||||||
|
pronNP : (s : Str) -> NP = \s -> {
|
||||||
|
s = word s
|
||||||
|
} ;
|
||||||
|
|
||||||
|
mkPreposition : Str -> Str -> Preposition = \s,b -> {
|
||||||
|
prepMain = word s ;
|
||||||
|
prepPre = word b
|
||||||
|
} ;
|
||||||
|
|
||||||
|
mkSubj : Str -> Str -> {prePart : Str ; sufPart : Str} = \p,s -> {
|
||||||
|
prePart = word p ;
|
||||||
|
sufPart = word s
|
||||||
|
} ;
|
||||||
|
|
||||||
|
Preposition = {prepMain : Str ; prepPre : Str} ;
|
||||||
|
|
||||||
|
-- added by AR
|
||||||
|
|
||||||
|
mkNP : Str -> NP = ss ;
|
||||||
|
|
||||||
|
appPrep : Preposition -> Str -> Str = \prep,s ->
|
||||||
|
prep.prepPre ++ s ++ prep.prepMain ;
|
||||||
|
|
||||||
|
}
|
||||||
45
lib/src/chinese/pinyin/SentenceCmn.gf
Normal file
45
lib/src/chinese/pinyin/SentenceCmn.gf
Normal file
@@ -0,0 +1,45 @@
|
|||||||
|
concrete SentenceCmn of Sentence = CatCmn **
|
||||||
|
open Prelude, ResCmn in {
|
||||||
|
|
||||||
|
flags optimize=all_subs ;
|
||||||
|
|
||||||
|
lin
|
||||||
|
|
||||||
|
PredVP np vp = mkClause np.s vp ;
|
||||||
|
|
||||||
|
PredSCVP sc vp = mkClause sc.s vp ;
|
||||||
|
|
||||||
|
ImpVP vp = {
|
||||||
|
s = table {
|
||||||
|
Pos => infVP vp ;
|
||||||
|
Neg => neg_s ++ infVP vp
|
||||||
|
}
|
||||||
|
} ;
|
||||||
|
|
||||||
|
SlashVP np vp =
|
||||||
|
mkClauseCompl np.s (\\p,a => vp.prePart ++ useVerb vp.verb ! p ! a) vp.compl
|
||||||
|
** {c2 = vp.c2} ;
|
||||||
|
|
||||||
|
SlashVS np vs sslash = <mkClause np.s vs sslash.s : Clause> ** {c2 = sslash.c2} ;
|
||||||
|
|
||||||
|
|
||||||
|
-- yet another reason for discontinuity of clauses
|
||||||
|
AdvSlash slash adv =
|
||||||
|
mkClause slash.np (<\\p,a => adv.s ++ slash.vp ! p ! a : Polarity => Aspect => Str>) []
|
||||||
|
** {c2 = slash.c2} ;
|
||||||
|
|
||||||
|
SlashPrep cl prep = cl ** {c2 = prep} ;
|
||||||
|
|
||||||
|
EmbedS s = ss (conjThat ++ s.s) ;
|
||||||
|
EmbedQS qs = qs ;
|
||||||
|
EmbedVP vp = ss (infVP vp) ;
|
||||||
|
|
||||||
|
UseCl t p cl = {s = cl.s ! p.p ! t.t} ;
|
||||||
|
UseQCl t p cl = {s = cl.s ! p.p ! t.t} ;
|
||||||
|
UseRCl t p cl = {s = cl.s ! p.p ! t.t} ;
|
||||||
|
UseSlash t p cl = {s = cl.s ! p.p ! t.t ; c2 = cl.c2} ;
|
||||||
|
|
||||||
|
AdvS a s = ss (a.s ++ s.s) ;
|
||||||
|
|
||||||
|
RelS s r = ss (s.s ++ r.s) ;
|
||||||
|
}
|
||||||
164
lib/src/chinese/pinyin/StructuralCmn.gf
Normal file
164
lib/src/chinese/pinyin/StructuralCmn.gf
Normal file
@@ -0,0 +1,164 @@
|
|||||||
|
concrete StructuralCmn of Structural = CatCmn **
|
||||||
|
open ParadigmsCmn, ResCmn, Prelude in {
|
||||||
|
|
||||||
|
flags coding = utf8 ;
|
||||||
|
|
||||||
|
lin
|
||||||
|
every_Det = mkDet "mei3" Sg ;
|
||||||
|
|
||||||
|
this_Quant = mkDet "zhe4" ;
|
||||||
|
that_Quant = mkDet "na3" ;
|
||||||
|
|
||||||
|
i_Pron = pronNP "wo3" ;
|
||||||
|
youSg_Pron = pronNP "ni3" ;
|
||||||
|
he_Pron = pronNP "ta1" ;
|
||||||
|
she_Pron = pronNP "ta1" ;
|
||||||
|
we_Pron = pronNP "wo3men" ;
|
||||||
|
youPl_Pron = pronNP "ni3men" ;
|
||||||
|
they_Pron = pronNP "ta1men" ;
|
||||||
|
|
||||||
|
very_AdA = ssword "fei1chang2" ;
|
||||||
|
|
||||||
|
by8means_Prep = mkPrep "pang2bian1" [] ;
|
||||||
|
in_Prep = mkPrep "li3" [];
|
||||||
|
possess_Prep = mkPrep "de" [];
|
||||||
|
with_Prep = mkPrep "yi1qi3" "he2";
|
||||||
|
|
||||||
|
and_Conj = {s = table {
|
||||||
|
CPhr CNPhrase => mkConjForm "he2" ;
|
||||||
|
CPhr CAPhrase => mkConjForm "er2" ;
|
||||||
|
CPhr CVPhrase => mkConjForm "you4" ;
|
||||||
|
CSent => mkConjForm []
|
||||||
|
}
|
||||||
|
} ;
|
||||||
|
or_Conj = {s = table {
|
||||||
|
CPhr _ => mkConjForm "huo4" ;
|
||||||
|
CSent => mkConjForm "hai2shi4"
|
||||||
|
}
|
||||||
|
} ;
|
||||||
|
|
||||||
|
although_Subj = mkSubj "sui1ran2" "dan4";
|
||||||
|
because_Subj = mkSubj "yin1wei2" "suo3yi3" ;
|
||||||
|
when_Subj = mkSubj [] "deshi2hou4" ;
|
||||||
|
|
||||||
|
here_Adv = mkAdv "zhe4li3" ;
|
||||||
|
there_Adv = mkAdv "na3li3" ;
|
||||||
|
whoSg_IP, whoPl_IP = mkIPL "shei2" ;
|
||||||
|
whatSg_IP, whatPl_IP = mkIPL " shen2ma" ;
|
||||||
|
where_IAdv = mkIAdvL "na3li3" ;
|
||||||
|
when_IAdv = mkIAdvL "shen2mashi2hou4" ;
|
||||||
|
how_IAdv = mkIAdvL "ru2he2" ;
|
||||||
|
all_Predet = ssword "suo3you3" ;
|
||||||
|
many_Det = mkDet "duo1" Pl ;
|
||||||
|
someSg_Det = mkDet (word "yi1xie1") Sg ;
|
||||||
|
somePl_Det = mkDet (word "yi1xie1") Sg ;
|
||||||
|
few_Det = mkDet "shao3" Pl ;
|
||||||
|
other_A = mkA "qi2ta1" ;
|
||||||
|
|
||||||
|
oper
|
||||||
|
mkIPL, mkIAdvL, mkAdA, mkIDetL, mkPConjL, mkCAdv, mkIQuant = ssword ;
|
||||||
|
|
||||||
|
-- hsk
|
||||||
|
|
||||||
|
lin
|
||||||
|
|
||||||
|
|
||||||
|
above_Prep = mkPrep "shang4bian1" ;
|
||||||
|
after_Prep = mkPrep "yi3hou4" ;
|
||||||
|
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
|
||||||
|
|
||||||
|
|
||||||
|
can_VV = mkVerb "neng2" [] [] [] [] "bu4" ;
|
||||||
|
must_VV = mkVerb "bi4xu1" [] [] [] [] "bu4" ; ---- False "bu4neng2"
|
||||||
|
want_VV = mkVerb "xiang3" [] [] [] [] "bu4" ;
|
||||||
|
|
||||||
|
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
|
||||||
|
not_Predet = ssword "bu4" ;
|
||||||
|
---only_Predet = mkPredet "qi2" ; --s
|
||||||
|
otherwise_PConj = mkPConjL "hai2shi4" ; --s
|
||||||
|
to_Prep = mkPrep "wang3" ; --s
|
||||||
|
---which_IQuant = mkIQuant "na3" ; --s
|
||||||
|
|
||||||
|
have_V2 = mkV2 "you3" ;
|
||||||
|
|
||||||
|
yes_Utt = ss copula_s ;
|
||||||
|
no_Utt = ss neg_s ;
|
||||||
|
|
||||||
|
oper
|
||||||
|
mkConjForm : Str -> {s1,s2 : Str} = \s -> {s1 = [] ; s2 = word s} ;
|
||||||
|
|
||||||
|
-- manually by AR
|
||||||
|
|
||||||
|
lin
|
||||||
|
always_AdV = ssword "yi1zhi2" ;
|
||||||
|
part_Prep = mkPrep possessive_s ;
|
||||||
|
language_title_Utt = ssword "zhong1wen2" ;
|
||||||
|
please_Voc = ss "qing3" ;
|
||||||
|
quite_Adv = mkAdA "de2hen3" ;
|
||||||
|
|
||||||
|
-- just missing
|
||||||
|
|
||||||
|
lin
|
||||||
|
almost_AdA = ssword "ji1hu1" ;
|
||||||
|
almost_AdN = ssword "ji1hu1" ;
|
||||||
|
--as_CAdv = ssword "shen2ma" ; -- as good as X
|
||||||
|
at_least_AdN = ssword "zui4shao3" ; -- at least five
|
||||||
|
at_most_AdN = ssword "zui4duo1" ;
|
||||||
|
behind_Prep = mkPrep "hou4mian4" "zai4";
|
||||||
|
--both7and_DConj = ssword "shen2ma" ; -- both - and
|
||||||
|
by8agent_Prep = mkPrep "bei4" ; -- by for agent in passive
|
||||||
|
-- [mark] 被
|
||||||
|
during_Prep = mkPrep "qi1jian1" "zai4" ; -- [mark] often equivalent to nothing
|
||||||
|
-- translation for "he swam during this summer. " and "he swam this summer." are often the same
|
||||||
|
--either7or_DConj = ssword "shen2ma" ;
|
||||||
|
everybody_NP = ssword "mei3ge4ren2" ; -- [mark] "mei3ge4ren2": 每(every)+个(classifier)+人(person)
|
||||||
|
everything_NP = ssword "mei3jian4shi4" ; -- [mark] "mei3jian4shi4": 每(every)+件(classifier)+事(thing)
|
||||||
|
everywhere_Adv = mkAdv "dao4chu3" ;
|
||||||
|
here7from_Adv = mkAdv "cong1zhe4li3" ; -- from here
|
||||||
|
here7to_Adv = mkAdv "dao4zhe4li3" ; -- to here
|
||||||
|
-- [mark] "cong1zhe4li3" 从(from) 这里(here)
|
||||||
|
-- "dao4zhe4li3" 到( to ) 这里(here)
|
||||||
|
how8many_IDet = ssword "duo1shao3" ;
|
||||||
|
how8much_IAdv = ssword "duo1shao3" ;
|
||||||
|
if_Subj = mkSubj "ru2guo3" "jiu4" ; -- [mark] "jiu4" often comes between NP and VP
|
||||||
|
--less_CAdv = ssword "shen2ma" ; -- less good than
|
||||||
|
--more_CAdv = ssword "shen2ma" ;
|
||||||
|
most_Predet = ssword "da4duo1shu3" ;
|
||||||
|
nobody_NP = ssword "mei2ren2" ;
|
||||||
|
nothing_NP = ssword "mei2you3shen2ma" ;
|
||||||
|
on_Prep = mkPrep "shang4" "zai4" ;
|
||||||
|
only_Predet = ssword "qi2you3" ; -- only John
|
||||||
|
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
|
||||||
|
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
|
||||||
|
without_Prep = mkPrep "mei2you3" [];
|
||||||
|
youPol_Pron = ssword "nin2" ; -- polite you
|
||||||
|
|
||||||
|
}
|
||||||
36
lib/src/chinese/pinyin/SymbolCmn.gf
Normal file
36
lib/src/chinese/pinyin/SymbolCmn.gf
Normal file
@@ -0,0 +1,36 @@
|
|||||||
|
--# -path=.:../abstract:../common
|
||||||
|
|
||||||
|
concrete SymbolCmn of Symbol = CatCmn ** open Prelude, ResCmn in {
|
||||||
|
|
||||||
|
flags coding = utf8;
|
||||||
|
|
||||||
|
lin
|
||||||
|
SymbPN i = i ;
|
||||||
|
IntPN i = i ;
|
||||||
|
FloatPN i = i ;
|
||||||
|
NumPN i = i ;
|
||||||
|
CNIntNP cn i = {
|
||||||
|
s = cn.s ++ i.s ;
|
||||||
|
c = cn.c
|
||||||
|
} ;
|
||||||
|
CNSymbNP det cn xs = ss (det.s ++ cn.s ++ xs.s) ; ----
|
||||||
|
CNNumNP cn i = {
|
||||||
|
s = cn.s ++ i.s ;
|
||||||
|
c = cn.c
|
||||||
|
} ;
|
||||||
|
|
||||||
|
SymbS sy = sy ;
|
||||||
|
SymbNum sy = sy ;
|
||||||
|
SymbOrd sy = sy ;
|
||||||
|
|
||||||
|
lincat
|
||||||
|
|
||||||
|
Symb, [Symb] = SS ;
|
||||||
|
|
||||||
|
lin
|
||||||
|
MkSymb s = s ;
|
||||||
|
|
||||||
|
BaseSymb = infixSS "" ;
|
||||||
|
ConsSymb = infixSS "" ;
|
||||||
|
|
||||||
|
}
|
||||||
13
lib/src/chinese/pinyin/TenseCmn.gf
Normal file
13
lib/src/chinese/pinyin/TenseCmn.gf
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
concrete TenseCmn of Tense =
|
||||||
|
CatCmn [Tense,Temp], TenseX [Ant,Pol,AAnter,ASimul,PNeg,PPos] ** open ResCmn in {
|
||||||
|
|
||||||
|
lin
|
||||||
|
TTAnt t a = {s = t.s ++ a.s ; t = t.t} ;
|
||||||
|
|
||||||
|
---- ??
|
||||||
|
TPres = {s = [] ; t = APlain} ;
|
||||||
|
TPast = {s = [] ; t = APerf} ;
|
||||||
|
TFut = {s = [] ; t = ADurProg} ;
|
||||||
|
TCond = {s = [] ; t = ADurStat} ;
|
||||||
|
|
||||||
|
}
|
||||||
11
lib/src/chinese/pinyin/TextCmn.gf
Normal file
11
lib/src/chinese/pinyin/TextCmn.gf
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
concrete TextCmn of Text = CommonX - [Temp,Tense,Adv] ** open ResCmn in {
|
||||||
|
|
||||||
|
-- No punctuation - but make sure to leave spaces between sentences!
|
||||||
|
|
||||||
|
lin
|
||||||
|
TEmpty = {s = []} ;
|
||||||
|
TFullStop x xs = {s = x.s ++ fullstop_s ++ xs.s} ;
|
||||||
|
TQuestMark x xs = {s = x.s ++ questmark_s ++ xs.s} ;
|
||||||
|
TExclMark x xs = {s = x.s ++ exclmark_s ++ xs.s} ;
|
||||||
|
|
||||||
|
}
|
||||||
60
lib/src/chinese/pinyin/VerbCmn.gf
Normal file
60
lib/src/chinese/pinyin/VerbCmn.gf
Normal file
@@ -0,0 +1,60 @@
|
|||||||
|
concrete VerbCmn of Verb = CatCmn ** open ResCmn, Prelude in {
|
||||||
|
|
||||||
|
flags optimize=all_subs ;
|
||||||
|
|
||||||
|
lin
|
||||||
|
UseV = predV ;
|
||||||
|
|
||||||
|
SlashV2a v = predV v ** {c2 = v.c2} ;
|
||||||
|
|
||||||
|
Slash2V3 v np = insertObj np (predV v) ** {c2 = v.c3} ; ---- to check arg order
|
||||||
|
Slash3V3 v np = insertObj np (predV v) ** {c2 = v.c2} ;
|
||||||
|
|
||||||
|
SlashV2A v ap = insertObj ap (predV v) ** {c2 = v.c2} ;
|
||||||
|
|
||||||
|
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} ;
|
||||||
|
|
||||||
|
ComplVV v vp = {
|
||||||
|
verb = v ;
|
||||||
|
compl = vp.verb.s ++ vp.compl ;
|
||||||
|
prePart = vp.prePart
|
||||||
|
} ;
|
||||||
|
|
||||||
|
ComplVS v s = insertObj s (predV v) ;
|
||||||
|
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 ;
|
||||||
|
|
||||||
|
UseComp comp = comp ;
|
||||||
|
|
||||||
|
SlashVV v vp = ---- too simple?
|
||||||
|
insertObj (mkNP (infVP vp)) (predV v) ** {c2 = vp.c2} ;
|
||||||
|
|
||||||
|
SlashV2VNP v np vp =
|
||||||
|
insertObj np
|
||||||
|
(insertObj (mkNP (infVP vp)) (predV v)) ** {c2 = vp.c2} ;
|
||||||
|
|
||||||
|
AdvVP vp adv = case adv.advType of {
|
||||||
|
ATManner => insertObj (ss (deVAdv_s ++ adv.s)) vp ; -- he sleeps well
|
||||||
|
_ => insertAdv (ss (zai_V.s ++ adv.s)) vp -- he sleeps in the house / today
|
||||||
|
} ;
|
||||||
|
|
||||||
|
AdVVP adv vp = insertAdv adv vp ;
|
||||||
|
|
||||||
|
ReflVP vp = insertObj (mkNP reflPron) vp ;
|
||||||
|
|
||||||
|
PassV2 v = insertObj (mkNP passive_s) (predV v) ; ----
|
||||||
|
|
||||||
|
CompAP ap = insertObj (mkNP ap.s) (predV copula) ; ---- hen / bu
|
||||||
|
|
||||||
|
CompNP np = insertObj np (predV copula) ; ----
|
||||||
|
|
||||||
|
CompCN cn = insertObj cn (predV copula) ; ----
|
||||||
|
|
||||||
|
CompAdv adv = insertObj adv (predV zai_V) ;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
Reference in New Issue
Block a user