From 74384044c902509e952b074108e164aa045a1eab Mon Sep 17 00:00:00 2001 From: "John J. Camilleri" Date: Mon, 12 Nov 2018 10:05:42 +0100 Subject: [PATCH] Move everything related to synopsis into subfolder Clean up some unused and generated files --- doc/CC_eng_tha.txt | 1698 ----------------- doc/Makefile | 66 +- doc/Test.hs | 22 - doc/categories.png | Bin 123025 -> 0 bytes doc/editor.png | Bin 20552 -> 0 bytes doc/index.txt | 267 --- doc/official.txt | 581 ------ doc/paradigms.txt | 48 - doc/rgl-publications.html | 529 ----- doc/status.html | 862 --------- doc/{ => synopsis}/.gitignore | 5 +- doc/synopsis/Makefile | 67 + doc/{ => synopsis}/MkExx.hs | 0 doc/{ => synopsis}/MkExxTable.hs | 0 doc/{ => synopsis}/MkSynopsis.hs | 27 +- .../additional.txt} | 0 doc/{ => synopsis}/api-examples.txt | 0 .../browse.txt} | 0 doc/{ => synopsis}/categories-intro.txt | 0 doc/{ => synopsis}/categories.dot | 0 .../example.txt} | 0 .../intro.txt} | 0 doc/{ => synopsis}/quicklinks.js | 0 doc/{ => synopsis}/synopsis.css | 0 .../template.html} | 0 doc/translation.html | 329 ---- 26 files changed, 94 insertions(+), 4407 deletions(-) delete mode 100644 doc/CC_eng_tha.txt delete mode 100644 doc/Test.hs delete mode 100644 doc/categories.png delete mode 100644 doc/editor.png delete mode 100644 doc/index.txt delete mode 100644 doc/official.txt delete mode 100644 doc/paradigms.txt delete mode 100644 doc/rgl-publications.html delete mode 100644 doc/status.html rename doc/{ => synopsis}/.gitignore (62%) create mode 100644 doc/synopsis/Makefile rename doc/{ => synopsis}/MkExx.hs (100%) rename doc/{ => synopsis}/MkExxTable.hs (100%) rename doc/{ => synopsis}/MkSynopsis.hs (95%) rename doc/{synopsis-additional.txt => synopsis/additional.txt} (100%) rename doc/{ => synopsis}/api-examples.txt (100%) rename doc/{synopsis-browse.txt => synopsis/browse.txt} (100%) rename doc/{ => synopsis}/categories-intro.txt (100%) rename doc/{ => synopsis}/categories.dot (100%) rename doc/{synopsis-example.txt => synopsis/example.txt} (100%) rename doc/{synopsis-intro.txt => synopsis/intro.txt} (100%) rename doc/{ => synopsis}/quicklinks.js (100%) rename doc/{ => synopsis}/synopsis.css (100%) rename doc/{_template.html => synopsis/template.html} (100%) delete mode 100644 doc/translation.html diff --git a/doc/CC_eng_tha.txt b/doc/CC_eng_tha.txt deleted file mode 100644 index 3d33db6bd..000000000 --- a/doc/CC_eng_tha.txt +++ /dev/null @@ -1,1698 +0,0 @@ - -mkText (mkPhr (mkQS (mkCl she_NP sleep_V))) questMarkPunct (mkText (mkPhr yes_Utt) fullStopPunct) -does she sleep ? yes . -หล่อนนอนหลับใช่ไหม ใช่ - -mkText yes_Utt -yes . -ใช่ - -mkText (mkS pastTense (mkCl she_NP sleep_V)) -she slept . -หล่อนนอนหลับ - -mkText (mkCl she_NP sleep_V) -she sleeps . -หล่อนนอนหลับ - -mkText (mkQS pastTense (mkQCl (mkCl she_NP sleep_V))) -did she sleep ? -หล่อนนอนหลับไหม - -mkText negativePol (mkImp sleep_V) -don't sleep ! -อย่านอนหลับ - -mkText (mkText (mkPhr (mkUtt where_IAdv)) questMarkPunct (mkText (mkPhr (mkUtt here_Adv)))) (mkText (mkPhr (mkUtt when_IAdv)) questMarkPunct (mkText (mkPhr (mkUtt now_Adv)) exclMarkPunct)) -where ? here . when ? now ! -ที่ไหนที่นี่เมื่อไรเดี๋ยวนี้ -- spaces - -mkPhr but_PConj (mkUtt (mkImp sleep_V)) (mkVoc (mkNP i_Pron friend_N)) -but sleep , my friend -แต่นอนหลับซิเพี่อนของฉัน - -mkPhr (mkS futureTense negativePol (mkCl she_NP sleep_V)) -she won't sleep -หล่อนไม่นอนหลับ -- place of negation (but possible) - -mkPhr (mkCl she_NP sleep_V) -she sleeps -หล่อนนอนหลับ - -mkPhr (mkQS conditionalTense (mkQCl (mkCl she_NP sleep_V))) -would she sleep -หล่อนนอนหลับไหม - -mkPhr (mkImp sleep_V) -sleep -นอนหลับซิ - -mkPhr (mkPConj and_Conj) (mkUtt now_Adv) -and now -และเดี๋ยวนี้ -- tone mark - -mkPhr yes_Utt (mkVoc (mkNP i_Pron friend_N)) -yes , my friend -ใช่เพี่อนของฉัน - -mkUtt (mkS pastTense (mkCl she_NP sleep_V)) -she slept -หล่อนนอนหลับ - -mkUtt (mkCl she_NP sleep_V) -she sleeps -หล่อนนอนหลับ - -mkUtt (mkQS pastTense negativePol (mkQCl who_IP sleep_V)) -who didn't sleep -ใครไม่นอนหลับ -- neg place not preferred - -mkUtt (mkQCl who_IP sleep_V) -who sleeps -ใครนอนหลับ - -mkUtt pluralImpForm negativePol (mkImp (mkVP man_N)) -don't be men -อย่าเป็นชาย - -mkUtt who_IP -who -ใคร -- ay - -mkUtt why_IAdv -why -ทำไม -- th - -mkUtt (mkNP this_Det man_N) -this man -ชายคนนี้ - -mkUtt here_Adv -here -ที่นี่ - -mkUtt (mkVP sleep_V) -to sleep -นอนหลับ - -mkUtt (mkCN beer_N) -beer -เบียร์ - -mkUtt (mkAP good_A) -good -ดี - -mkUtt (mkCard (mkNumeral n5_Unit)) -five -ห้า - -mkPhr (lets_Utt (mkVP sleep_V)) -let's sleep -นอนหลับ - -mkS positivePol (mkCl she_NP sleep_V) -she sleeps -หล่อนนอนหลับ - -mkS negativePol (mkCl she_NP sleep_V) -she doesn't sleep -หล่อนไม่นอนหลับ -- neg place - -mkS simultaneousAnt (mkCl she_NP sleep_V) -she sleeps -หล่อนนอนหลับ - -mkS anteriorAnt (mkCl she_NP sleep_V) -she has slept -หล่อนนอนหลับ - -mkS presentTense (mkCl she_NP sleep_V) -she sleeps -หล่อนนอนหลับ - -mkS pastTense (mkCl she_NP sleep_V) -she slept -หล่อนนอนหลับ - -mkS futureTense (mkCl she_NP sleep_V) -she will sleep -หล่อนจะนอน -- ca !! - -mkS conditionalTense (mkCl she_NP sleep_V) -she would sleep -หล่อนนอนหลับ - -mkUtt singularImpForm (mkImp (mkVP man_N)) -be a man -เป็นชายซิ - -mkUtt pluralImpForm (mkImp (mkVP man_N)) -be men -เป็นชายซิ - -mkUtt politeImpForm (mkImp (mkVP man_N)) -be a man -เป็นชายซิ - -mkS conditionalTense anteriorAnt negativePol (mkCl she_NP sleep_V) -she wouldn't have slept -หล่อนไม่ได้นอนหลับ -- daay !! - -mkS and_Conj (mkS (mkCl she_NP sleep_V)) (mkS (mkCl i_NP run_V)) -she sleeps and I run -หล่อนนอนหลับและฉันวิ่ง - -mkS and_Conj (mkListS (mkS (mkCl she_NP sleep_V)) (mkListS (mkS (mkCl i_NP run_V)) (mkS (mkCl (mkNP youSg_Pron) walk_V)))) -she sleeps , I run and you walk -หล่อนนอนหลับ ฉันวิ่งและคุณเดิน -- comma - -mkS today_Adv (mkS (mkCl she_NP sleep_V)) -today she sleeps -วันนี้หล่อนนอนหลับ - -mkCl she_NP sleep_V -she sleeps -หล่อนนอนหลับ - -mkCl she_NP love_V2 he_NP -she loves him -หล่อนรักเขา - -mkCl she_NP send_V3 it_NP he_NP -she sends it to him -หล่อนส่งมันให้กับเขา - -mkCl she_NP want_VV (mkVP sleep_V) -she wants to sleep -หล่อนอยากนอนหลับ - -mkCl she_NP say_VS (mkS (mkCl i_NP sleep_V)) -she says that I sleep -หล่อนพูดว่าฉันนอนหลับ -- wa is complaining - -mkCl she_NP wonder_VQ (mkQS (mkQCl who_IP sleep_V)) -she wonders who sleeps -หล่อนประหลาดใจว่าใครนอนหลับ - -mkCl she_NP become_VA old_A -she becomes old -หล่อนกลายเป็นคนแก่ -- classifier !! - -mkCl she_NP become_VA (mkAP very_AdA old_A) -she becomes very old -หล่อนกลายเป็นคนแก่มาก -- classifier !! - -mkCl she_NP paint_V2A it_NP red_A -she paints it red -หล่อนทามันสีแดง - -mkCl she_NP paint_V2A it_NP (mkAP red_A) -she paints it red -หล่อนทามันสีแดง - -mkCl she_NP answer_V2S he_NP (mkS (mkCl we_NP sleep_V)) -she answers to him that we sleep -หล่อนตอบเขาว่าเรานอนหลับ - -mkCl she_NP ask_V2Q he_NP (mkQS (mkQCl who_IP sleep_V)) -she asks him who sleeps -หล่อนถามเขาว่าใครนอนหลับ - -mkCl she_NP beg_V2V he_NP (mkVP sleep_V) -she begs him to sleep -หล่อนขอเขานอนหลับ - -mkCl she_NP old_A -she is old -หล่อนแก่ - -mkCl she_NP old_A he_NP -she is older than he -หล่อนแก่กว่าเขา - -mkCl she_NP married_A2 he_NP -she is married to him -หล่อนแต่งงานแล้วกับเขา - -mkCl she_NP (mkAP very_AdA old_A) -she is very old -หล่อนแก่มาก - -mkCl she_NP (mkNP the_Det woman_N) -she is the woman -หล่อนเป็นหญิง - -mkCl she_NP woman_N -she is a woman -หล่อนเป็นหญิง - -mkCl she_NP (mkCN old_A woman_N) -she is an old woman -หล่อนเป็นหญิงแก่ - -mkCl she_NP here_Adv -she is here -หล่อนอยู่ที่นี่ - -mkCl she_NP (mkVP always_AdV (mkVP sleep_V)) -she always sleeps -หล่อนนอนหลับเสมอ -- not forever - -mkCl house_N -there is a house -มีบ้าน - -mkCl (mkNP many_Det house_N) -there are many houses -มีบ้านหลายหลัง - -mkCl she_NP (mkRS (mkRCl which_RP (mkVP sleep_V))) -it is she who sleeps -หล่อนเป็นคนที่นอนหลับ -- not classifier !! - -mkCl here_Adv (mkS (mkCl she_NP sleep_V)) -it is here that she sleeps -หล่อนนอนหลับที่นี่ -- perhaps thini khue, otherwise thini in the end !! - -mkCl rain_V0 -it rains -มีฝน - -mkCl (progressiveVP (mkVP rain_V0)) -it is raining -กำลังมีฝน - -mkCl (mkSC (mkS (mkCl she_NP sleep_V))) (mkVP good_A) -that she sleeps is good -ว่าหล่อนนอนหลับดี - -mkS (genericCl (mkVP sleep_V)) -one sleeps -นอนหลับ - -mkUtt (mkVP sleep_V) -to sleep -นอนหลับ - -mkUtt (mkVP love_V2 he_NP) -to love him -รักเขา - -mkUtt (mkVP send_V3 it_NP he_NP) -to send it to him -ส่งมันให้กับเขา -- also without kab - -mkUtt (mkVP want_VV (mkVP sleep_V)) -to want to sleep -อยากนอนหลับ - -mkUtt (mkVP know_VS (mkS (mkCl she_NP sleep_V))) -to know that she sleeps -รู้ว่าหล่อนนอนหลับ - -mkUtt (mkVP wonder_VQ (mkQS (mkQCl who_IP sleep_V))) -to wonder who sleeps -ประหลาดใจว่าใครนอนหลับ -- ay - -mkUtt (mkVP become_VA (mkAP red_A)) -to become red -กลายเป็นสีแดง - -mkUtt (mkVP paint_V2A it_NP (mkAP red_A)) -to paint it red -ทามันเป็นสีแดง -- red was missing - -mkUtt (mkVP answer_V2S he_NP (mkS (mkCl she_NP sleep_V))) -to answer to him that she sleeps -ตอบเขาว่าหล่อนนอนหลับ -- missing compl - -mkUtt (mkVP ask_V2Q he_NP (mkQS (mkQCl who_IP sleep_V))) -to ask him who sleeps -ถามเขาว่าใครนอนหลับ -- missing compl - -mkUtt (mkVP beg_V2V he_NP (mkVP sleep_V)) -to beg him to sleep -ขอเขาให้นอนหลับ -- compl - -mkUtt (mkVP old_A) -to be old -แก่ - -mkUtt (mkVP old_A he_NP) -to be older than he -แก่กว่าเขา - -mkUtt (mkVP married_A2 he_NP) -to be married to him -แต่งงานแล้วกับเขา - -mkUtt (mkVP (mkAP very_AdA old_A)) -to be very old -แก่มาก - -mkUtt (mkVP woman_N) -to be a woman -เป็นหญิง -- pu ying !! - -mkUtt (mkVP (mkCN old_A woman_N)) -to be an old woman -เป็นหญิงแก่ -- pu !! - -mkUtt (mkVP (mkNP the_Det woman_N)) -to be the woman -เป็นหญิง - -mkUtt (mkVP here_Adv) -to be here -อยู่ที่นี่ - -mkUtt (mkVP (mkVP sleep_V) here_Adv) -to sleep here -นอนหลับที่นี่ - -mkUtt (mkVP always_AdV (mkVP sleep_V)) -always to sleep -นอนหลับเสมอ -- not forever - -mkUtt (mkVP (mkVPSlash paint_V2A (mkAP black_A)) it_NP) -to paint it black -ทามันเป็นสีดำ -- compl - -mkUtt (mkVP (mkVPSlash paint_V2A (mkAP black_A))) -to paint itself black -ทาตัวเองเป็นสีดำ -- compl - -mkUtt (mkVP (mkComp (mkAP warm_A))) -to be warm -อุ่น - -mkUtt (reflexiveVP love_V2) -to love itself -รักตัวเอง - -mkUtt (reflexiveVP (mkVPSlash paint_V2A (mkAP black_A))) -to paint itself black -ทาตัวเองเป็นสีดำ -- compl - -mkUtt (passiveVP love_V2) -to be loved -ถูกรัก - -mkUtt (passiveVP love_V2 she_NP) -to be loved by her -ถูกหล่อนรัก -- agent before verb !! - -mkUtt (progressiveVP (mkVP sleep_V)) -to be sleeping -กำลังนอนหลับ - -mkComp (mkAP old_A) -old -แก่ - -mkComp (mkNP this_Det man_N) -this man -ชายคนนี้ - -mkComp here_Adv -here -อยู่ที่นี่ - -mkSC (mkS (mkCl she_NP sleep_V)) -that she sleeps -ว่าหล่อนนอนหลับ - -mkSC (mkQS (mkQCl who_IP sleep_V)) -who sleeps -ว่าใครนอนหลับ -- ay - -mkSC (mkVP sleep_V) -to sleep -นอนหลับ - -mkImp (mkVP (mkVP come_V) (mkAdv to_Prep (mkNP i_Pron house_N))) -come to my house -มาถืงบ้านของฉันซิ - -mkImp come_V -come -มาซิ - -mkImp buy_V2 it_NP -buy it -ซื้อมันซิ - -mkUtt (mkNP this_Quant man_N) -this man -ชายคนนี้ - -mkUtt (mkNP this_Quant (mkCN old_A man_N)) -this old man -ชายแก่คนนี้ - -mkUtt (mkNP this_Quant (mkNum (mkNumeral n5_Unit)) (mkCN old_A man_N)) -these five old men -ชายแก่ห้าคนนี้ - -mkUtt (mkNP this_Quant (mkNum (mkNumeral n5_Unit)) man_N) -these five men -ชายห้าคนนี้ - -mkUtt (mkNP (mkDet the_Quant (mkNum (mkNumeral n5_Unit))) (mkCN old_A man_N)) -the five old men -ชายแก่ห้าคน - -mkUtt (mkNP (mkDet the_Quant (mkNum (mkNumeral n5_Unit))) man_N) -the five men -ชายห้าคน - -mkUtt (mkNP (mkNumeral (tenfoldSub100 n5_Unit)) (mkCN old_A man_N)) -fifty old men -ชายแก่ห้าสิบคน - -mkUtt (mkNP (mkNumeral (tenfoldSub100 n5_Unit)) man_N) -fifty men -ชายห้าสิบคน - -mkUtt (mkNP (mkDigits n5_Dig (mkDigits n1_Dig)) (mkCN old_A man_N)) -5 1 old men -ชายแก่ ๕๑ คน -- space around number !! - -mkUtt (mkNP (mkDigits n5_Dig (mkDigits n1_Dig)) man_N) -5 1 men -ชาย ๕๑ คน -- space - -mkUtt (mkNP i_Pron (mkCN old_A man_N)) -my old man -ชายแก่ของฉัน - -mkUtt (mkNP i_Pron man_N) -my man -ชายของฉัน - -mkUtt (mkNP paris_PN) -Paris -ปารีส - -mkUtt (mkNP we_Pron) -we -เรา - -mkUtt (mkNP this_Quant) -this -นี้ - -mkUtt (mkNP this_Quant (mkNum (mkNumeral n5_Unit))) -these five -ห้านี้ - -mkUtt (mkNP (mkDet the_Quant (mkNum (mkNumeral n5_Unit)) (mkOrd good_A))) -the five best -ห้าที่ดีที่สุด -- thi as classifier !! - -mkUtt (mkNP (mkCN old_A beer_N)) -old beer -เบียร์เก่า -- old for inanimate - -mkUtt (mkNP beer_N) -beer -เบียร์ - -mkUtt (mkNP only_Predet (mkNP this_Det woman_N)) -only this woman -หญิงคนนี้เท่านั้น -- only comes last !! - -mkUtt (mkNP (mkNP the_Det man_N) see_V2) -the man seen -ชายเห็น - -mkUtt (mkNP (mkNP paris_PN) today_Adv) -Paris today -ปารีสวันนี้ - -mkUtt (mkNP (mkNP john_PN) (mkRS (mkRCl which_RP (mkVP walk_V)))) -John , who walks -จอห์นคนที่เดิน -- classifier !! - -mkUtt (mkNP or_Conj (mkNP this_Det woman_N) (mkNP john_PN)) -this woman or John -หญิงคนนี้หริอจอห์น - -mkUtt (mkNP or_Conj (mkListNP (mkNP this_Det woman_N) (mkListNP (mkNP john_PN) i_NP))) -this woman , John or I -หญิงคนนี้ จอห์นหริอฉัน -- space, no comma - -mkUtt i_NP -I -ฉัน - -mkUtt you_NP -you -คุณ - -mkUtt youPol_NP -you -คุณ - -mkUtt he_NP -he -เขา - -mkUtt she_NP -she -หล่อน - -mkUtt it_NP -it -มัน - -mkUtt we_NP -we -เรา - -mkUtt youPl_NP -you -คุณ - -mkUtt they_NP -they -เขาทั้งหลาย -- more than one - - -mkUtt this_NP -this -นี้ - -mkUtt that_NP -that -นั้น - -mkUtt these_NP -these -เหล่านี้ -- more than one !! - -mkUtt those_NP -those -เหล่านั้น -- more than one !! - -mkUtt (mkNP the_Det house_N) -the house -บ้าน - -mkUtt (mkNP a_Det house_N) -a house -บ้าน - -mkUtt (mkNP theSg_Det house_N) -the house -บ้าน - -mkUtt (mkNP thePl_Det house_N) -the houses -บ้าน - -mkUtt (mkNP aSg_Det woman_N) -a woman -หญิง - -mkUtt (mkNP aPl_Det woman_N) -women -หญิง - -mkUtt (mkNP this_Det woman_N) -this woman -หญิงคนนี้ - -mkUtt (mkNP that_Det woman_N) -that woman -หญิงคนนั้น - -mkUtt (mkNP these_Det woman_N) -these women -หญิงเหล่านี้ -- more than one !! - -mkUtt (mkNP those_Det woman_N) -those women -หญิงเหล่านั้น -- more !! - -mkUtt (mkNP (mkQuant i_Pron) house_N) -my house -บ้านของฉัน - -mkUtt (mkNP the_Quant house_N) -the house -บ้าน - -mkUtt (mkNP a_Quant house_N) -a house -บ้าน - -mkNum (mkNumeral (tenfoldSub100 n2_Unit)) -twenty -ยี่สิบ - -mkNum (mkDigits n2_Dig (mkDigits n1_Dig)) -2 1 -๒๑ - -mkNum (mkCard almost_AdN (mkCard (mkNumeral n5_Unit))) -almost five -เกิอบห้า -- before numeral !! - -mkNum (mkCard almost_AdN (mkCard (mkNumeral n5_Unit))) -almost five -เกิอบห้า -- before - -mkCard (mkNumeral n7_Unit) -seven -เจ็ด - -mkOrd small_A -smallest -เล็กที่สุด - -mkCard (mkAdN more_CAdv) (mkCard (mkNumeral n8_Unit)) -more than eight -มากกว่าแปด -- before numeral !! - -mkNumeral (mkSub1000 n9_Unit (mkSub100 n9_Unit n9_Unit)) -nine hundred and ninety - nine -เก้าร้อยเก้าสิบเก้า -- tone mark for nine - -mkNumeral (mkSub1000 n9_Unit (mkSub100 n9_Unit n9_Unit)) (mkSub1000 n9_Unit (mkSub100 n9_Unit n9_Unit)) -nine hundred and ninety - nine thousand nine hundred and ninety - nine -เก้าแสนเก้าหมื่นเก้าพันเก้าร้อยเก้าสิบเก้า -- tone - -thousandfoldNumeral (mkSub1000 n9_Unit (mkSub100 n9_Unit n9_Unit)) -nine hundred and ninety - nine thousand -เก้าแสนเก้าหมื่นเก้าพัน -- tone - -mkNumeral (mkSub1000 (mkSub100 n9_Unit n9_Unit)) -ninety - nine -เก้าสิบเก้า -- tone - -mkNumeral (mkSub1000 n9_Unit) -nine hundred -เก้าร้อย -- tone - -mkNumeral (mkSub1000 n9_Unit (mkSub100 n9_Unit n9_Unit)) -nine hundred and ninety - nine -เก้าร้อยเก้าสิบเก้า -- tone - -mkSub100 n8_Unit -eight -แปด - -mkSub100 n8_Unit n3_Unit -eighty - three -แปดสิบสาม - -mkSub100 n8_Unit -eight -แปด - -mkNumeral n1_Unit -one -หนึง - -mkNumeral n2_Unit -two -สอง - -mkNumeral n3_Unit -three -สาม - -mkNumeral n4_Unit -four -สี่ - -mkNumeral n5_Unit -five -ห้า - -mkNumeral n6_Unit -six -หก - -mkNumeral n7_Unit -seven -เจ็ด - -mkNumeral n8_Unit -eight -แปด - -mkNumeral n9_Unit -nine -เก้า -- tone - -mkDigits n4_Dig -4 -๔ - -mkDigits n1_Dig (mkDigits n2_Dig (mkDigits n3_Dig (mkDigits n3_Dig (mkDigits n4_Dig (mkDigits n8_Dig (mkDigits n6_Dig)))))) -1 , 2 3 3 , 4 8 6 -๑ ๒๓๓ ๔๘๖ -- commas if amount of money etc !! - -mkCN house_N -house -บ้าน - -mkCN mother_N2 (mkNP the_Det king_N) -mother of the king -แม่ของพระราชา -- khong - -mkCN distance_N3 (mkNP this_Det city_N) (mkNP paris_PN) -distance from this city to Paris -ระยะทางจากเมืองเมืองนี้ถืงปารีส - -mkCN mother_N2 -mother -แม่ - -mkCN distance_N3 -distance -ระยะทาง - -mkCN big_A house_N -big house -บ้านใหญ่ - -mkCN big_A (mkCN blue_A house_N) -big blue house -บ้านสีน้ำเงินหลังใหญ่ -- better with classifier !! - -mkCN (mkAP very_AdA big_A) house_N -very big house -บ้านใหญ่มาก - -mkCN (mkAP very_AdA big_A) (mkCN blue_A house_N) -very big blue house -บ้านสีน้ำเงินหลังใหญ่มาก -- better with classifier - -mkCN man_N (mkRS (mkRCl which_RP she_NP love_V2)) -man whom she loves -ชายที่หล่อนรัก - -mkCN (mkCN old_A man_N) (mkRS (mkRCl which_RP she_NP love_V2)) -old man whom she loves -ชายแก่ที่หล่อนรัก - -mkCN house_N (mkAdv on_Prep (mkNP the_Det hill_N)) -house on the hill -บ้านบนเนินเขา - -mkCN (mkCN big_A house_N) (mkAdv on_Prep (mkNP the_Det hill_N)) -big house on the hill -บ้านใหญ่บนเนินเขา - -mkNum (mkCard almost_AdN (mkCard (mkNumeral n5_Unit))) -almost five -เกิอบห้า -- order - -mkNum (mkCard almost_AdN (mkCard (mkNumeral n5_Unit))) -almost five -เกิอบห้า -- order - -mkCN (mkCN reason_N) (mkVP sleep_V) -reason to sleep -เหตุที่นอนหลับ -- add thi !! - -mkCN (mkCN reason_N) (mkVP sleep_V) -reason to sleep -เหตุที่นอนหลับ -- same as prev - -mkCN king_N (mkNP john_PN) -king John -พระราชาจอห์น - -mkCN (mkCN old_A king_N) (mkNP john_PN) -old king John -พระราชาแก่จอห์น - -mkAP warm_A -warm -อุ่น - -mkAP warm_A (mkNP paris_PN) -warmer than Paris -อุ่นกว่าปารีส - -mkAP married_A2 she_NP -married to her -แต่งงานแล้วกับหล่อน - -mkAP married_A2 -married -แต่งงานแล้ว - -mkCl (mkVP (mkAP (mkAP good_A) (mkS (mkCl she_NP sleep_V)))) -it is good that she sleeps -ดีว่าหล่อนนอนหลับ - -mkCl (mkVP (mkAP (mkAP uncertain_A) (mkQS (mkQCl who_IP sleep_V)))) -it is uncertain who sleeps -ลังเลใจว่าใครนอนหลับ - -mkCl she_NP (mkAP (mkAP ready_A) (mkVP sleep_V)) -she is ready to sleep -หล่อนพร้อมนอนหลับ - -mkCl she_NP (mkAP (mkAP ready_A) (mkSC (mkVP sleep_V))) -she is ready to sleep -หล่อนพร้อมนอนหลับ - -mkAP very_AdA old_A -very old -แก่มาก - -mkAP very_AdA (mkAP very_AdA old_A) -very very old -แก่มากมาก - -mkAP or_Conj (mkAP old_A) (mkAP young_A) -old or young -แก่หริอรุ่น - -mkAP and_Conj (mkListAP (mkAP old_A) (mkListAP (mkAP big_A) (mkAP warm_A))) -old , big and warm -แก่ ใหญ่และอุ่น -- comma - -mkAP (mkOrd old_A) -oldest -แก่ที่สุด - -mkAP as_CAdv (mkAP old_A) she_NP -as old as she -แก่เท่าหล่อน - -mkUtt (reflAP married_A2) -married to itself -แต่งงานแล้วกับตัวเอง - -mkUtt (comparAP warm_A) -warmer -อุ่นกว่า - -mkAdv warm_A -warmly -อุ่น - -mkAdv in_Prep (mkNP the_Det house_N) -in the house -ในบ้าน - -mkAdv when_Subj (mkS (mkCl she_NP sleep_V)) -when she sleeps -เมื่อหล่อนนอนหลับ -- when !!?? - -mkAdv more_CAdv warm_A he_NP -more warmly than he -อบอุ่นมากกว่าเขา -- mak kwa - -mkAdv more_CAdv warm_A (mkS (mkCl he_NP run_V)) -more warmly than he runs -อบอุ่นมากกว่าที่เขาวิ่ง - -mkAdv very_AdA (mkAdv warm_A) -very warmly -อุ่นมาก - -mkAdv and_Conj here_Adv now_Adv -here and now -ที่นี่และเดี๋ยวนี้ -- tone mark - -mkAdv and_Conj (mkListAdv (mkAdv with_Prep she_NP) (mkListAdv here_Adv now_Adv)) -with her , here and now -กับหล่อน ที่นี่และเดี๋ยวนี้ -- comma, tone - -mkQS conditionalTense anteriorAnt negativePol (mkQCl who_IP sleep_V) -who wouldn't have slept -ใครนอนไม่หลับ -- ay - -mkQS (mkCl she_NP sleep_V) -does she sleep -หล่อนนอนหลับไหม - -mkQCl (mkCl she_NP sleep_V) -does she sleep -หล่อนนอนหลับไหม - -mkQCl who_IP (mkVP (mkVP sleep_V) here_Adv) -who sleeps here -ใครนอนหลับที่นี่ -- ay - -mkQCl who_IP sleep_V -who sleeps -ใครนอนหลับ -- ay - -mkQCl who_IP love_V2 she_NP -who loves her -ใครรักหล่อน -- ay - -mkQCl who_IP send_V3 it_NP she_NP -who sends it to her -ใครส่งมันให้กับหล่อน -- ay, send - -mkQCl who_IP want_VV (mkVP sleep_V) -who wants to sleep -ใครอยากนอนหลับ -- ay - -mkQCl who_IP say_VS (mkS (mkCl i_NP sleep_V)) -who says that I sleep -ใครบอกว่าฉันนอนหลับ -- ay, say (also phut) - -mkQCl who_IP wonder_VQ (mkQS (mkQCl who_IP sleep_V)) -who wonders who sleeps -ใครประหลาดใจว่าใครนอนหลับ -- ay ay - -mkQCl who_IP become_VA old_A -who becomes old -ใครกลายเป็นคนแก่ -- ay, classifier !! - -mkQCl who_IP become_VA (mkAP very_AdA old_A) -who becomes very old -ใครกลายเป็นคนแก่มาก -- ay, classifier - -mkQCl who_IP paint_V2A it_NP red_A -who paints it red -ใครทามันสีแดง -- ay, compl - -mkQCl who_IP paint_V2A it_NP (mkAP very_AdA red_A) -who paints it very red -ใครทามันสีแดงมาก -- ay, compl - -mkQCl who_IP answer_V2S he_NP (mkS (mkCl we_NP sleep_V)) -who answers to him that we sleep -ใครตอบเขาว่าเรานอนหลับ -- ay, compl - -mkQCl who_IP ask_V2Q he_NP (mkQS (mkQCl who_IP sleep_V)) -who asks him who sleeps -- ay, compl -ใครถามเขาว่าใครนอนหลับ - -mkQCl who_IP beg_V2V he_NP (mkVP sleep_V) -who begs him to sleep -ใครขอให้เขานอนหลับ -- beg; possible withour hay - -mkQCl who_IP old_A -who is old -ใครแก่ -- ay - -mkQCl who_IP old_A he_NP -who is older than he -ใครแก่กว่าเขา - -mkQCl who_IP married_A2 he_NP -who is married to him -ใครแต่งงานแล้วกับเขา - -mkQCl who_IP (mkAP very_AdA old_A) -who is very old -ใครแก่มาก - -mkQCl who_IP (mkNP the_Det woman_N) -who is the woman -ใครเป็นหญิง -- possible with pu - -mkQCl who_IP woman_N -who is a woman -ใครเป็นหญิง - -mkQCl who_IP (mkCN old_A woman_N) -who is an old woman -ใครเป็นหญิงแก่ - -mkQCl who_IP here_Adv -who is here -ใครอยู่ที่นี่ - -mkQCl who_IP (mkVP always_AdV (mkVP sleep_V)) -who always sleeps -ใครนอนหลับเสมอ -- always - -mkQCl why_IAdv (mkCl she_NP sleep_V) -why does she sleep -หล่อนนอนหลับทำไม -- th - -mkQCl with_Prep who_IP (mkCl she_NP sleep_V) -with whom does she sleep -หล่อนนอนหลับกับใคร -- ay - -mkQCl where_IAdv she_NP -where is she -หล่อนอยู่ที่ไหน - -mkQCl (mkIComp who_IP) (mkNP this_Det man_N) -who is this man -ชายคนนี้เป็นใคร - -mkQCl (mkIP which_IQuant city_N) -which city is there -คือเมืองเมืองไหน -- order !! - -mkQCl who_IP she_NP -who is her -หล่อนเป็นใคร -- order - -mkQCl who_IP (mkClSlash (mkClSlash she_NP love_V2) today_Adv) -whom does she love today -หล่อนรักใครวันนี้ -- adv last or first !! - -mkIP (mkIDet which_IQuant (mkNum (mkNumeral n5_Unit))) (mkCN big_A city_N) -which five big cities -เมืองใหญ่ห้าเมืองไหน - -mkIP (mkIDet which_IQuant (mkNum (mkNumeral n5_Unit))) city_N -which five cities -เมืองห้าเมืองไหน - -mkIP (mkIDet which_IQuant (mkNum (mkNumeral n5_Unit))) -which five -ห้าไหน - -mkIP which_IQuant (mkCN big_A city_N) -which big city -เมืองใหญ่เมืองไหน - -mkIP which_IQuant (mkNum (mkNumeral n5_Unit)) (mkCN big_A city_N) -which five big cities -เมืองใหญ่ห้าเมืองไหน - -mkIP which_IQuant city_N -which city -เมืองเมืองไหน - -mkIP who_IP (mkAdv in_Prep (mkNP paris_PN)) -who in Paris -ใครในปารีส - -mkUtt what_IP -what -อะไร - -mkUtt who_IP -who -ใคร - -mkIAdv in_Prep (mkIP which_IQuant city_N) -in which city -ในเมืองเมืองไหน - -mkIAdv where_IAdv (mkAdv in_Prep (mkNP paris_PN)) -where in Paris -ที่ไหนในปารีส - -mkIP (mkIDet which_IQuant pluralNum) house_N -which houses -บ้านหลังไหน - -mkIP (mkIDet which_IQuant) house_N -which house -บ้านหลังไหน - -mkIP which_IDet house_N -which house -บ้านหลังไหน - -mkIP whichPl_IDet house_N -which houses -บ้านหลังไหน - -mkCN woman_N (mkRS conditionalTense anteriorAnt negativePol (mkRCl which_RP sleep_V)) -woman who wouldn't have slept -หญิงที่นอนไม่หลับ - -mkCN woman_N (mkRS (mkRCl which_RP sleep_V)) -woman who sleeps -หญิงที่นอนหลับ - -mkCN woman_N (mkRS or_Conj (mkRS (mkRCl which_RP sleep_V)) (mkRS (mkRCl which_RP we_NP love_V2))) -woman who sleeps or whom we love -หญิงที่นอนหลับหริอที่เรารัก - -mkCN woman_N (mkRS (mkRCl which_RP (mkVP (mkVP sleep_V) here_Adv))) -woman who sleeps here -หญิงที่นอนหลับที่นี่ - -mkCN woman_N (mkRS (mkRCl which_RP sleep_V)) -woman who sleeps -หญิงที่นอนหลับ - -mkCN woman_N (mkRS (mkRCl which_RP love_V2 he_NP)) -woman who loves him -หญิงที่รักเขา - -mkCN woman_N (mkRS (mkRCl which_RP send_V3 it_NP he_NP)) -woman who sends it to him -หญิงที่ส่งมันให้กับเขา -- send - -mkCN woman_N (mkRS (mkRCl which_RP want_VV (mkVP sleep_V))) -woman who wants to sleep -หญิงที่อยากนอนหลับ - -mkCN woman_N (mkRS (mkRCl which_RP say_VS (mkS (mkCl i_NP sleep_V)))) -woman who says that I sleep -หญิงที่บอกว่าฉันนอนหลับ -- put better than bok? - -mkCN woman_N (mkRS (mkRCl which_RP wonder_VQ (mkQS (mkQCl who_IP sleep_V)))) -woman who wonders who sleeps -หญิงที่ประหลาดใจว่าใครนอนหลับ - -mkCN woman_N (mkRS (mkRCl which_RP become_VA old_A)) -woman who becomes old -หญิงที่กลายเป็นคนแก่ -- classifier !! - -mkCN woman_N (mkRS (mkRCl which_RP become_VA (mkAP very_AdA old_A))) -woman who becomes very old -หญิงที่กลายเป็นคนแก่มาก -- classifier - -mkCN woman_N (mkRS (mkRCl which_RP paint_V2A it_NP red_A)) -woman who paints it red -หญิงที่ทามันสีแดง - -mkCN woman_N (mkRS (mkRCl which_RP paint_V2A it_NP (mkAP very_AdA red_A))) -woman who paints it very red -หญิงที่ทามันสีแดงมาก - -mkCN woman_N (mkRS (mkRCl which_RP answer_V2S he_NP (mkS (mkCl we_NP sleep_V)))) -woman who answers to him that we sleep -หญิงที่ตอบเขาว่าเรานอนหลับ -- compl - -mkCN woman_N (mkRS (mkRCl which_RP ask_V2Q he_NP (mkQS (mkQCl who_IP sleep_V)))) -woman who asks him who sleeps -หญิงที่ถามเขาว่าใครนอนหลับ -- ay - -mkCN woman_N (mkRS (mkRCl which_RP beg_V2V he_NP (mkVP sleep_V))) -woman who begs him to sleep -หญิงที่ขอให้เขานอนหลับ -- beg - -mkCN woman_N (mkRS (mkRCl which_RP old_A)) -woman who is old -หญิงที่แก่ - -mkCN woman_N (mkRS (mkRCl which_RP old_A he_NP)) -woman who is older than he -หญิงที่แก่กว่าเขา - -mkCN woman_N (mkRS (mkRCl which_RP married_A2 he_NP)) -woman who is married to him -หญิงที่แต่งงานแล้วกับเขา - -mkCN woman_N (mkRS (mkRCl which_RP (mkAP very_AdA old_A))) -woman who is very old -หญิงที่แก่มาก - -mkCN woman_N (mkRS (mkRCl which_RP (mkNP the_Det woman_N))) -woman who is the woman -หญิงที่เป็นหญิง - -mkCN student_N (mkRS (mkRCl which_RP woman_N)) -student who is a woman -นักศึกษาที่เป็นหญิง - -mkCN student_N (mkRS (mkRCl which_RP (mkCN old_A woman_N))) -student who is an old woman -นักศึกษาที่เป็นหญิงแก่ - -mkCN woman_N (mkRS (mkRCl which_RP here_Adv)) -woman who is here -หญิงที่อยู่ที่นี่ - -mkCN woman_N (mkRS (mkRCl which_RP (mkVP always_AdV (mkVP sleep_V)))) -woman who always sleeps -หญิงที่นอนหลับเสมอ -- always - -mkCN woman_N (mkRS (mkRCl which_RP we_NP love_V2)) -woman whom we love -หญิงที่เรารัก - -mkCN woman_N (mkRS (mkRCl which_RP (mkClSlash (mkClSlash she_NP love_V2) today_Adv))) -woman whom she loves today -หญิงที่หล่อนรักวันนี้ - -mkRP in_Prep (mkNP all_Predet (mkNP the_Quant pluralNum city_N)) which_RP -all the cities in whom -ทุกเมืองในที่ -- or เมืองทั้งหมดในที่ - -mkSSlash (mkTemp pastTense anteriorAnt) negativePol (mkClSlash she_NP (mkVPSlash see_V2)) -she hadn't seen -หล่อนไม่เห็น - -mkQCl who_IP (mkClSlash she_NP (mkVPSlash see_V2)) -whom does she see -หล่อนเห็นใคร - -mkQCl who_IP (mkClSlash she_NP see_V2) -whom does she see -หล่อนเห็นใคร - -mkQCl who_IP (mkClSlash she_NP want_VV see_V2) -whom does she want to see -หล่อนอยากเห็นใคร - -mkQCl who_IP (mkClSlash (mkCl she_NP sleep_V) with_Prep) -with whom does she sleep -หล่อนนอนหลับกับใคร - -mkQCl who_IP (mkClSlash (mkClSlash she_NP see_V2) today_Adv) -whom does she see today -หล่อนเห็นใครวันนี้ - -mkQCl who_IP (mkClSlash she_NP know_VS (mkSSlash (mkTemp pastTense anteriorAnt) negativePol (mkClSlash we_NP (mkVPSlash see_V2)))) -whom does she know that we hadn't seen -ใครที่หล่อนรู้ว่าเราไม่เห็น -- khray first !! - -mkQCl who_IP (mkClSlash she_NP (mkVPSlash see_V2)) -whom does she see -หล่อนเห็นใคร -- or khray thi lon hin !! - -mkQCl who_IP (mkClSlash she_NP (mkVPSlash send_V3 it_NP)) -to whom does she send it -หล่อนส่งมันให้ใคร -- send - -mkQCl who_IP (mkClSlash she_NP (mkVPSlash paint_V2A (mkAP red_A))) -whom does she paint red -ใครที่หล่อนทาสีแดง - -mkQCl who_IP (mkClSlash she_NP (mkVPSlash ask_V2Q (mkQS (mkQCl where_IAdv (mkCl i_NP sleep_V))))) -whom does she ask where I sleep -หล่อนถามใครว่าฉันนอนหลับที่ไหน -- order !! - -mkQCl who_IP (mkClSlash she_NP (mkVPSlash answer_V2S (mkS (mkCl i_NP sleep_V)))) -to whom does she answer that I sleep -หล่อนตอบใครว่าฉันนอนหลับ -- compl - -mkQCl who_IP (mkClSlash she_NP (mkVPSlash beg_V2V (mkVP sleep_V))) -whom does she beg to sleep -หล่อนขอนอนหลับกับใคร - -mkQCl who_IP (mkClSlash she_NP (mkVPSlash want_VV (mkVPSlash see_V2))) -whom does she want to see -หล่อนอยากเห็นใคร - -mkQCl who_IP (mkClSlash she_NP (mkVPSlash beg_V2V i_NP (mkVPSlash see_V2))) -whom does she beg me to see -หล่อนขอให้ฉันเห็นใคร -- beg - -mkAdv above_Prep it_NP -above it -ข้างบนมัน - -mkAdv after_Prep it_NP -after it -หลังจากมัน -- lang cak - -mkUtt (mkNP all_Predet (mkNP thePl_Det man_N)) -all the men -ชายทั้งหมด -- order !! - -mkAP almost_AdA red_A -almost red -เกิอบสีแดง -- order !! - -mkCard almost_AdN (mkCard (mkNumeral n8_Unit)) -almost eight -เกิอบแปด -- order !! - -mkAdv although_Subj (mkS (mkCl she_NP sleep_V)) -although she sleeps -ถืงหล่อนนอนหลับ - -always_AdV -always -เสมอ -- always! - -mkAdv and_Conj here_Adv now_Adv -here and now -ที่นี่และเดี๋ยวนี้ -- tone - -mkAdv because_Subj (mkS (mkCl she_NP sleep_V)) -because she sleeps -เพราะหล่อนนอนหลับ - -mkAdv before_Prep it_NP -before it -ก่อนมัน - -mkAdv behind_Prep it_NP -behind it -หลังมัน - -mkAdv between_Prep (mkNP and_Conj you_NP i_NP) -between you and me -ระหว่างคุณและฉัน -- place of tone mark - -mkAdv both7and_DConj here_Adv there_Adv -both here and there -ทั้งที่นี่และที่นั่น -- both - -but_PConj -but -แต่ - -mkAdv by8agent_Prep it_NP -by it -มัน - -mkAdv by8means_Prep it_NP -by it -ผ่านมัน - -mkUtt (mkVP can8know_VV (mkVP sleep_V)) -to be able to sleep -นอนหลับได้ - -mkUtt (mkVP can_VV (mkVP sleep_V)) -to be able to sleep -นอนหลับได้ - -mkAdv during_Prep it_NP -during it -ที่มัน -- ra wang man (= between) - -mkAdv either7or_DConj here_Adv there_Adv -either here or there -ที่นี่หริอที่นั่น -- or: mai - ko - -mkUtt (mkNP every_Det woman_N) -every woman -หญิงทุกคน - -mkUtt everybody_NP -everybody -ทุกคน -- every person - -mkUtt everything_NP -everything -ทุกสิ่ง - -everywhere_Adv -everywhere -ทุกที่ - -mkAdv for_Prep it_NP -for it -ให้มัน - -mkAdv from_Prep it_NP -from it -จากมัน -- a: - -mkUtt (mkNP he_Pron) -he -เขา - -here_Adv -here -ที่นี่ - -here7to_Adv -to here -ที่นี่ - -here7from_Adv -from here -จากนี่ -- a: - -mkUtt how_IAdv -how -อย่างไร - -mkUtt (mkIP how8many_IDet house_N) -how many houses -บ้านกี่หลัง - -mkUtt how8much_IAdv -how much -เท่าไร - -mkUtt (mkNP i_Pron) -I -ฉัน - -mkAdv if_Subj (mkS (mkCl she_NP sleep_V)) -if she sleeps -ถ้าหล่อนนอนหลับ - -mkAdv in8front_Prep it_NP -in front of it -หน้ามัน - -mkAdv in_Prep it_NP -in it -ในมัน - -mkUtt (mkNP it_Pron) -it -มัน - -less_CAdv -less -น้อย - -mkUtt (mkNP many_Det house_N) -many houses -บ้านหลายหลัง - -more_CAdv -more -มากกว่า -- more than - -most_Predet -most -มากที่สุด - -mkUtt (mkNP much_Det wine_N) -much wine -เหล้าองุ่นหลายขวด -- the word much - -must_VV -have to -ต้อง - -no_Utt -no -ไม่ - -mkAdv on_Prep it_NP -on it -บนมัน - -only_Predet -only -เท่านั้น -- tone mark - -mkAdv or_Conj here_Adv there_Adv -here or there -ที่นี่หริอที่นั่น - -otherwise_PConj -otherwise -ไม่อย่างนั้น -- was very informal - -mkAdv part_Prep it_NP -of it -มัน - -please_Voc -please -ขอ - -mkAdv possess_Prep it_NP -of it -ของมัน - -quite_Adv -quite -ค่อนข้าง -- tone mark - -mkUtt (mkNP she_Pron) -she -หล่อน - -so_AdA -so -ดังนั้น -- (maak, if alone) !! - -mkUtt (mkNP someSg_Det wine_N) -some wine -เหล้าองุ่นบางขวด -- tone mark in wrong order; second tone mark off - -mkUtt (mkNP somePl_Det woman_N) -some women -หญิงบางคน -- tone mark - -mkUtt somebody_NP -somebody -บางคน - -mkUtt something_NP -something -บางสิ่ง - -somewhere_Adv -somewhere -บางแห่ง - -mkUtt (mkNP that_Quant house_N) -that house -บ้านหลังนั้น - -mkAdv that_Subj (mkS (mkCl she_NP sleep_V)) -that she sleeps -ว่าหล่อนนอนหลับ - -there_Adv -there -ที่นั่น - -there7to_Adv -there -ที่นั่น - -there7from_Adv -from there -จากนั่น -- a: - -therefore_PConj -therefore -เพราะฉะนั้น - -mkUtt (mkNP they_Pron) -they -เขา - -mkUtt (mkNP this_Quant house_N) -this house -บ้านหลังนี้ - -mkAdv through_Prep it_NP -through it -ผ่านมัน - -mkAdv to_Prep it_NP -to it -ถืงมัน - -too_AdA -too -เกินไป - -mkAdv under_Prep it_NP -under it -ใต้มัน - -very_AdA -very -มาก - -want_VV -want -อยาก - -mkUtt (mkNP we_Pron) -we -เรา - -whatPl_IP -what -อะไร - -whatSg_IP -what -อะไร - -mkUtt when_IAdv -when -เมื่อไร - -mkAdv when_Subj (mkS (mkCl she_NP sleep_V)) -when she sleeps -ที่หล่อนนอนหลับ -- tone mark, th !! tone mark in Subj? - -mkUtt where_IAdv -where -ที่ไหน - -mkIP which_IQuant house_N -which house -บ้านหลังไหน - -whoPl_IP -who -ใคร - -whoSg_IP -who -ใคร - -mkUtt why_IAdv -why -ทำไม -- th - -mkAdv with_Prep it_NP -with it -กับมัน - -mkAdv without_Prep it_NP -without it -ไม่มีมัน -- tone mark - -yes_Utt -yes -ใช่ - -mkUtt (mkNP youSg_Pron) -you -คุณ - -mkUtt (mkNP youPl_Pron) -you -คุณ - -mkUtt (mkNP youPol_Pron) -you -คุณ - -mkUtt (mkNP no_Quant house_N) -no house -ไม่มีบ้าน -- may mi + N + C - -mkUtt (mkNP not_Predet everybody_NP) -not everybody -ไม่ทุกคน - -mkAdv if_then_Conj here_Adv there_Adv -if here then there -ถ้าที่นี่ก็ที่นั่น - -mkCard at_least_AdN (mkCard (mkNumeral n8_Unit)) -at least eight -อย่างน้อยแปด -- order - -mkCard at_most_AdN (mkCard (mkNumeral n8_Unit)) -at most eight -อย่างมากแปด -- order - -mkUtt nobody_NP -nobody -ไม่มีใคร - -mkUtt nothing_NP -nothing -เปล่า - -mkAdv except_Prep it_NP -except it -นอกจากมัน - -as_CAdv -as -เท่า - -mkUtt (mkVP have_V2 it_NP) -to have it -มีมัน - diff --git a/doc/Makefile b/doc/Makefile index 249095a9d..bb2880692 100644 --- a/doc/Makefile +++ b/doc/Makefile @@ -1,66 +1,18 @@ -.PHONY: all index status synopsis abstract +.PHONY: all status synopsis abstract + +GFDOC=gfdoc +S=../src all: synopsis -GF_alltenses=$(GF_LIB_PATH)/alltenses -GF=gf -GFDOC=gfdoc +status: status.html -index: - txt2tags -thtml index.txt -status: +synopsis: + make -C synopsis + +status.html: txt2tags -thtml status.txt -synopsis: synopsis.html - -S=../src - -# List of languages extracted from languages.csv, with 'Synopsis' column == y -LANGS=$(shell cat ../languages.csv | cut -d',' -f1,10 | grep ',y' | cut -d',' -f1) - -# This list was constructed by observing what files MkSynopsis.hs reads -SRC_FILES=$(S)/abstract/Common.gf $(S)/abstract/Cat.gf $(S)/api/Constructors.gf $(S)/abstract/Structural.gf $(patsubst %,$S/*/Paradigms%.gf,$(LANGS)) - -EXAMPLES_OUT=$(patsubst %,api-examples-%.txt,$(LANGS)) -INCLUDES=synopsis-intro.txt categories-intro.txt categories-imagemap.html synopsis-additional.txt synopsis-browse.txt synopsis-example.txt - -synopsis.txt: MkSynopsis.hs MkExxTable.hs $(INCLUDES) $(EXAMPLES_OUT) $(SRC_FILES) - runghc -i.. MkSynopsis.hs - -TMP=tmp.html -synopsis.html: synopsis.txt _template.html - txt2tags --target=html --no-headers --quiet --toc --outfile=$@ --infile=$< - pandoc \ - --from=html \ - --to=html5 \ - --standalone \ - --template=_template.html \ - --css=synopsis.css \ - --metadata='title:"GF Resource Grammar Library: Synopsis"' \ - --variable='rel-root:../..' \ - --output=$(TMP) \ - $@ - mv $(TMP) $@ - -categories.png: categories.dot - dot -Tpng $^ > $@ - -categories-imagemap.html: categories.dot - dot -Tcmapx $^ > $@ - abstract: $(GFDOC) -txthtml $S/abstract/*.gf mv $S/abstract/*.html abstract - -api-examples.gfs: api-examples.txt MkExx.hs - runghc MkExx.hs < $< > $@ - -# Since .gfo files aren't self-contained, the dependencies given here are -# incomplete. But I am thinking that the Try%.gfo file will always be newer -# than any other files it depends on, so the rule will trigger when -# needed anyway. //TH 2018-10-22 -api-examples-%.txt: $(GF_alltenses)/Try%.gfo api-examples.gfs - GF_LIB_PATH=$(GF_LIB_PATH) $(GF) -retain -s $< $@ - -clean: - rm -rf synopsis.txt api-examples.gfs $(EXAMPLES_OUT) diff --git a/doc/Test.hs b/doc/Test.hs deleted file mode 100644 index 25165cb0a..000000000 --- a/doc/Test.hs +++ /dev/null @@ -1,22 +0,0 @@ -import qualified Data.Map as Map -import Data.Char - -gold = "CC_eng_tha.txt" -tested = "api-examples-Tha.txt" - -main = do - s <- readFile gold - let corrects = Map.fromList $ exx 1 5 2 (lines s) --- mapM_ putStrLn $ concat [[t,s] | (t,s) <- Map.toList corrects] - t <- readFile tested - mapM_ (doTest corrects) (exx 18 22 1 (map (drop 4) (lines t))) - -exx x y z ss = [(ss!!k,ss!!(k+z)) | k <- [x,y .. length ss - 2]] - -doTest corrects (t,s) = case Map.lookup t corrects of - Just c -> if unspace s == uncomment c then return () else mapM_ putStrLn [t,unspace s,c] - _ -> return () - -unspace = filter (not . isSpace) -uncomment = unspace . takeWhile (/= '-') - diff --git a/doc/categories.png b/doc/categories.png deleted file mode 100644 index 590540fc51dc4187be56636998adde51d4f5c469..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 123025 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 L`njxgN@xNANfd0H diff --git a/doc/editor.png b/doc/editor.png deleted file mode 100644 index 63a3161bfc38346991ade7840c152f7a9172284a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 20552 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 -Last update: %%date(%c) - -% NOTE: this is a txt2tags file. -% Create an html file from this file using: -% txt2tags --toc -thtml index.txt - -%!target:html - -%!postproc(html): #BCEN
-%!postproc(html): #ECEN
- - -#BCEN - -[10lang-large.png] - -#ECEN - - -The GF Resource Grammar Library defines the basic grammar of -ten languages: -Danish, English, Finnish, French, German, -Italian, Norwegian, Russian, Spanish, Swedish. -Still incomplete implementations for Arabic and Catalan are also -included. - -**New** in December 2007: Browsing the library by syntax editor -[directly on the web ../../../demos/resource-api/editor.html]. - - - - -==Authors== - -Inger Andersson and Therese Soderberg (Spanish morphology), -Nicolas Barth and Sylvain Pogodalla (French verb list), -Ali El Dada (Arabic modules), -Magda Gerritsen and Ulrich Real (Russian paradigms and lexicon), -Janna Khegai (Russian modules), -Bjorn Bringert (many Swadesh lexica), -Carlos Gonzala (Spanish cardinals), -Harald Hammarstrm (German morphology), -Patrik Jansson (Swedish cardinals), -Andreas Priesnitz (German lexicon), -Aarne Ranta, -Jordi Saludes (Catalan modules), -Henning Thielemann (German lexicon). - - -We are grateful for contributions and -comments to several other people who have used this and -the previous versions of the resource library, including -Ludmilla Bogavac, -Ana Bove, -David Burke, -Lauri Carlson, -Gloria Casanellas, -Karin Cavallin, -Robin Cooper, -Hans-Joachim Daniels, -Elisabet Engdahl, -Markus Forsberg, -Kristofer Johannisson, -Anni Laine, -Hans Lei, -Peter Ljunglf, -Saara Myllyntausta, -Wanjiku Ng'ang'a, -Nadine Perera, -Jordi Saludes. - - -==License== - -The GF Resource Grammar Library is open-source software licensed under -GNU Lesser General Public License (LGPL). See the file [LICENSE ../LICENSE] for more -details. - - -==Scope== - -Coverage, for each language: -- complete morphology -- lexicon of the ca. 100 most important structural words -- test lexicon of ca. 300 content words (rough equivalents in each language) -- list of irregular verbs (separately for each language) -- representative fragment of syntax (cf. CLE (Core Language Engine)) -- rather flat semantics (cf. Quasi-Logical Form of CLE) - - -Organization: -- top-level (API) modules -- Ground API + special-purpose APIs -- "school grammar" concepts rather than advanced linguistic theory - - -Presentation: -- tool ``gfdoc`` for generating HTML from grammars -- example collections - - -==Location== - -Assuming you have installed the libraries, you will find the precompiled -``gfc`` and ``gfr`` files directly under ``$GF_LIB_PATH``, whose default -value is ``/usr/local/share/GF/``. The precompiled subdirectories are -``` - alltenses - mathematical - multimodal - present -``` -Do for instance -``` - cd $GF_LIB_PATH - gf alltenses/langs.gfcm - - > p -cat=S -lang=LangEng "this grammar is too big" | tb -``` -For more details, see the [Synopsis synopsis.html]. - - -==Compilation== - -If you want to compile the library from scratch, use ``make`` in the root of -the source directory: -``` - cd GF/lib/resource-1.0 - make -``` -The ``make`` procedure does not by default make Arabic and Catalan, but you -can uncomment the relevant lines in ``Makefile`` to compile them. - - -==Encoding== - -Finnish, German, Romance, and Scandinavian languages are in isolatin-1. - -Arabic and Russian are in UTF-8. - -English is in pure ASCII. - -The different encodings imply, unfortunately, that it is hard to get -a nice view of all languages simultaneously. The easiest way to achieve this is -to use ``gfeditor``, which automatically converts grammars to UTF-8. - - -==Using the resource as library== - -This API is accessible by both ``present`` and ``alltenses``. The modules you most often need are -- ``Syntax``, the interface to syntactic structures -- ``Syntax``//L//, the implementations of ``Syntax`` for each language //L// -- ``Paradigms``//L//, the morphological paradigms for each language //L// - - -The [Synopsis synopsis.html] gives examples on the typical usage of these -modules. - - -==Using the resource as top level grammar== - -The following modules can be used for parsing and linearization. They are accessible from both -``present`` and ``alltenses``. -- ``Lang``//L// for each language //L//, implementing a common abstract syntax ``Lang`` -- ``Danish``, ``English``, etc, implementing ``Lang`` with language-specific extensions - - -In addition, there is in both ``present`` and ``alltenses`` the file -- ``langs.gfcm``, a package with precompiled ``Lang``//L// grammars - - -A way to test and view the resource grammar is to load ``langs.gfcm`` either into ``gfeditor`` -or into the ``gf`` shell and perform actions such as syntax editing and treebank generation. -For instance, the command -``` - > p -lang=LangEng -cat=S "this grammar is too big" | tb -``` -creates a treebank entry with translations of this sentence. - -For parsing, currently only English and the Scandinavian languages are within the limits ofr -reasonable resources. For other languages //L//, parsing with ``Lang``//L// will probably eat -up the computer resources before finishing the parser generation. - - - -==Accessing the lower level ground API== - -The ``Syntax`` API is implemented in terms a bunch of ``abstract`` modules, which -as of version 1.2 are mainly interesting for implementors of the resource. -See the [documentation for version 1.1 index-1.1.html] for more details. - - -==Known bugs and missing components== - -Danish -- the lexicon and chosen inflections are only partially verified - - -English - - -Finnish -- wrong cases in some passive constructions - - -French -- multiple clitics (with V3) not always right -- third person pronominal questions with inverted word order - have wrong forms if "t" is required e.g. - (e.g. "comment fera-t-il" becomes "comment fera il") - - -German - - -Italian -- multiple clitics (with V3) not always right - - -Norwegian -- the lexicon and chosen inflections are only partially verified - - -Russian -- some functions missing -- some regular paradigms are missing - - -Spanish -- multiple clitics (with V3) not always right -- missing contractions with imperatives and clitics - - -Swedish - - - - -==More reading== - -[Synopsis synopsis.html]. The concise guide to API v. 1.2. - -[Grammars as Software Libraries gslt-sem-2006.html]. Slides -with background and motivation for the resource grammar library. - -[GF Resource Grammar Library Version 1.0 clt2006.html]. Slides -giving an overview of the library and practical hints on its use. - -[How to write resource grammars Resource-HOWTO.html]. Helps you -start if you want to add another language to the library. - -[Parametrized modules for Romance languages http://www.cs.chalmers.se/~aarne/geocal2006.pdf]. -Slides explaining some ideas in the implementation of -French, Italian, and Spanish. - -[Grammar writing by examples http://www.cs.chalmers.se/~aarne/slides/webalt-2005.pdf]. -Slides showing how linearization rules are written as strings parsable by the resource grammar. - -[Multimodal Resource Grammars http://www.cs.chalmers.se/~aarne/slides/talk-edin2005.pdf]. -Slides showing how to use the multimodal resource library. N.B. the library -examples are from ``multimodal/old``, which is a reduced-size API. - -[GF Resource Grammar Library ../../../doc/resource.pdf] (pdf). -Printable user manual with API documentation, for version 1.0. - diff --git a/doc/official.txt b/doc/official.txt deleted file mode 100644 index 1216226e2..000000000 --- a/doc/official.txt +++ /dev/null @@ -1,581 +0,0 @@ -The Official EU languages - -The 20 official languages of the EU and their abbreviations are as follows: - -Espaol ES Spanish -Dansk DA Danish -Deutsch DE German -Elinika EL Greek -English EN -Franais FR French -Italiano IT Italian -Nederlands NL Dutch -Portugus PT Portuguese -Suomi FI Finnish -Svenska SV Swedish -?e?tina CS Czech -Eesti ET Estonian -Latviesu valoda LV Latvian -Lietuviu kalba LT Lithuanian -Magyar HU Hungarian -Malti MT Maltese -Polski PL Polish -Sloven?ina SK Slovak -Sloven??ina SL Slovene - -http://europa.eu.int/comm/education/policies/lang/languages/index_en.html - ------ -http://www.w3.org/WAI/ER/IG/ert/iso639.htm - -ar arabic -no norwegian -ru russian - --- - -ISO 639: 3-letter codes - -abk ab Abkhazian -ace Achinese -ach Acoli -ada Adangme -aar aa Afar -afh Afrihili -afr af Afrikaans -afa Afro-Asiatic (Other) -aka Akan -akk Akkadian -alb/sqi sq Albanian -ale Aleut -alg Algonquian languages -tut Altaic (Other) -amh am Amharic -apa Apache languages -ara ar Arabic -arc Aramaic -arp Arapaho -arn Araucanian -arw Arawak -arm/hye hy Armenian -art Artificial (Other) -asm as Assamese -ath Athapascan languages -map Austronesian (Other) -ava Avaric -ave Avestan -awa Awadhi -aym ay Aymara -aze az Azerbaijani -nah Aztec -ban Balinese -bat Baltic (Other) -bal Baluchi -bam Bambara -bai Bamileke languages -bad Banda -bnt Bantu (Other) -bas Basa -bak ba Bashkir -baq/eus eu Basque -bej Beja -bem Bemba -ben bn Bengali -ber Berber (Other) -bho Bhojpuri -bih bh Bihari -bik Bikol -bin Bini -bis bi Bislama -bra Braj -bre be Breton -bug Buginese -bul bg Bulgarian -bua Buriat -bur/mya my Burmese -bel be Byelorussian -cad Caddo -car Carib -cat ca Catalan -cau Caucasian (Other) -ceb Cebuano -cel Celtic (Other) -cai Central American Indian (Other) -chg Chagatai -cha Chamorro -che Chechen -chr Cherokee -chy Cheyenne -chb Chibcha -chi/zho zh Chinese -chn Chinook jargon -cho Choctaw -chu Church Slavic -chv Chuvash -cop Coptic -cor Cornish -cos co Corsican -cre Cree -mus Creek -crp Creoles and Pidgins (Other) -cpe Creoles and Pidgins, English-based (Other) -cpf Creoles and Pidgins, French-based (Other) -cpp Creoles and Pidgins, Portuguese-based (Other) -cus Cushitic (Other) - hr Croatian -ces/cze cs Czech -dak Dakota -dan da Danish -del Delaware -din Dinka -div Divehi -doi Dogri -dra Dravidian (Other) -dua Duala -dut/nla nl Dutch -dum Dutch, Middle (ca. 1050-1350) -dyu Dyula -dzo dz Dzongkha -efi Efik -egy Egyptian (Ancient) -eka Ekajuk -elx Elamite -eng en English -enm English, Middle (ca. 1100-1500) -ang English, Old (ca. 450-1100) -esk Eskimo (Other) -epo eo Esperanto -est et Estonian -ewe Ewe -ewo Ewondo -fan Fang -fat Fanti -fao fo Faroese -fij fj Fijian -fin fi Finnish -fiu Finno-Ugrian (Other) -fon Fon -fra/fre fr French -frm French, Middle (ca. 1400-1600) -fro French, Old (842- ca. 1400) -fry fy Frisian -ful Fulah -gaa Ga -gae/gdh Gaelic (Scots) -glg gl Gallegan -lug Ganda -gay Gayo -gez Geez -geo/kat ka Georgian -deu/ger de German -gmh German, Middle High (ca. 1050-1500) -goh German, Old High (ca. 750-1050) -gem Germanic (Other) -gil Gilbertese -gon Gondi -got Gothic -grb Grebo -grc Greek, Ancient (to 1453) -ell/gre el Greek, Modern (1453-) -kal kl Greenlandic -grn gn Guarani -guj gu Gujarati -hai Haida -hau ha Hausa -haw Hawaiian -heb he Hebrew -her Herero -hil Hiligaynon -him Himachali -hin hi Hindi -hmo Hiri Motu -hun hu Hungarian -hup Hupa -iba Iban -ice/isl is Icelandic -ibo Igbo -ijo Ijo -ilo Iloko -inc Indic (Other) -ine Indo-European (Other) -ind id Indonesian -ina ia Interlingua (International Auxiliary language Association) -ine - Interlingue -iku iu Inuktitut -ipk ik Inupiak -ira Iranian (Other) -gai/iri ga Irish -sga Irish, Old (to 900) -mga Irish, Middle (900 - 1200) -iro Iroquoian languages -ita it Italian -jpn ja Japanese -jav/jaw jv/jw Javanese -jrb Judeo-Arabic -jpr Judeo-Persian -kab Kabyle -kac Kachin -kam Kamba -kan kn Kannada -kau Kanuri -kaa Kara-Kalpak -kar Karen -kas ks Kashmiri -kaw Kawi -kaz kk Kazakh -kha Khasi -khm km Khmer -khi Khoisan (Other) -kho Khotanese -kik Kikuyu -kin rw Kinyarwanda -kir ky Kirghiz -kom Komi -kon Kongo -kok Konkani -kor ko Korean -kpe Kpelle -kro Kru -kua Kuanyama -kum Kumyk -kur ku Kurdish -kru Kurukh -kus Kusaie -kut Kutenai -lad Ladino -lah Lahnda -lam Lamba -oci oc Langue d'Oc (post 1500) -lao lo Lao -lat la Latin -lav lv Latvian -ltz Letzeburgesch -lez Lezghian -lin ln Lingala -lit lt Lithuanian -loz Lozi -lub Luba-Katanga -lui Luiseno -lun Lunda -luo Luo (Kenya and Tanzania) -mac/mak mk Macedonian -mad Madurese -mag Magahi -mai Maithili -mak Makasar -mlg mg Malagasy -may/msa ms Malay -mal Malayalam -mlt ml Maltese -man Mandingo -mni Manipuri -mno Manobo languages -max Manx -mao/mri mi Maori -mar mr Marathi -chm Mari -mah Marshall -mwr Marwari -mas Masai -myn Mayan languages -men Mende -mic Micmac -min Minangkabau -mis Miscellaneous (Other) -moh Mohawk -mol mo Moldavian -mkh Mon-Kmer (Other) -lol Mongo -mon mn Mongolian -mos Mossi -mul Multiple languages -mun Munda languages -nau na Nauru -nav Navajo -nde Ndebele, North -nbl Ndebele, South -ndo Ndongo -nep ne Nepali -new Newari -nic Niger-Kordofanian (Other) -ssa Nilo-Saharan (Other) -niu Niuean -non Norse, Old -nai North American Indian (Other) -nor no Norwegian -nno Norwegian (Nynorsk) -nub Nubian languages -nym Nyamwezi -nya Nyanja -nyn Nyankole -nyo Nyoro -nzi Nzima -oji Ojibwa -ori or Oriya -orm om Oromo -osa Osage -oss Ossetic -oto Otomian languages -pal Pahlavi -pau Palauan -pli Pali -pam Pampanga -pag Pangasinan -pan pa Panjabi -pap Papiamento -paa Papuan-Australian (Other) -fas/per fa Persian -peo Persian, Old (ca 600 - 400 B.C.) -phn Phoenician -pol pl Polish -pon Ponape -por pt Portuguese -pra Prakrit languages -pro Provencal, Old (to 1500) -pus ps Pushto -que qu Quechua -roh rm Rhaeto-Romance -raj Rajasthani -rar Rarotongan -roa Romance (Other) -ron/rum ro Romanian -rom Romany -run rn Rundi -rus ru Russian -sal Salishan languages -sam Samaritan Aramaic -smi Sami languages -smo sm Samoan -sad Sandawe -sag sg Sango -san sa Sanskrit -srd Sardinian -sco Scots -sel Selkup -sem Semitic (Other) - sr Serbian -scr sh Serbo-Croatian -srr Serer -shn Shan -sna sn Shona -sid Sidamo -bla Siksika -snd sd Sindhi -sin si Singhalese -sit - Sino-Tibetan (Other) -sio Siouan languages -sla Slavic (Other) -ssw ss Siswant -slk/slo sk Slovak -slv sl Slovenian -sog Sogdian -som so Somali -son Songhai -wen Sorbian languages -nso Sotho, Northern -sot st Sotho, Southern -sai South American Indian (Other) -esl/spa es Spanish -suk Sukuma -sux Sumerian -sun su Sudanese -sus Susu -swa sw Swahili -ssw Swazi -sve/swe sv Swedish -syr Syriac -tgl tl Tagalog -tah Tahitian -tgk tg Tajik -tmh Tamashek -tam ta Tamil -tat tt Tatar -tel te Telugu -ter Tereno -tha th Thai -bod/tib bo Tibetan -tig Tigre -tir ti Tigrinya -tem Timne -tiv Tivi -tli Tlingit -tog to Tonga (Nyasa) -ton Tonga (Tonga Islands) -tru Truk -tsi Tsimshian -tso ts Tsonga -tsn tn Tswana -tum Tumbuka -tur tr Turkish -ota Turkish, Ottoman (1500 - 1928) -tuk tk Turkmen -tyv Tuvinian -twi tw Twi -uga Ugaritic -uig ug Uighur -ukr uk Ukrainian -umb Umbundu -und Undetermined -urd ur Urdu -uzb uz Uzbek -vai Vai -ven Venda -vie vi Vietnamese -vol vo Volapk -vot Votic -wak Wakashan languages -wal Walamo -war Waray -was Washo -cym/wel cy Welsh -wol wo Wolof -xho xh Xhosa -sah Yakut -yao Yao -yap Yap -yid yi Yiddish -yor yo Yoruba -zap Zapotec -zen Zenaga -zha za Zhuang -zul zu Zulu -zun Zuni - -ISO 639: 2-letter codes - -AA "Afar" -AB "Abkhazian" -AF "Afrikaans" -AM "Amharic" -AR "Arabic" -AS "Assamese" -AY "Aymara" -AZ "Azerbaijani" -BA "Bashkir" -BE "Byelorussian" -BG "Bulgarian" -BH "Bihari" -BI "Bislama" -BN "Bengali" "Bangla" -BO "Tibetan" -BR "Breton" -CA "Catalan" -CO "Corsican" -CS "Czech" -CY "Welsh" -DA "Danish" -DE "German" -DZ "Bhutani" -EL "Greek" -EN "English" "American" -EO "Esperanto" -ES "Spanish" -ET "Estonian" -EU "Basque" -FA "Persian" -FI "Finnish" -FJ "Fiji" -FO "Faeroese" -FR "French" -FY "Frisian" -GA "Irish" -GD "Gaelic" "Scots Gaelic" -GL "Galician" -GN "Guarani" -GU "Gujarati" -HA "Hausa" -HI "Hindi" -HR "Croatian" -HU "Hungarian" -HY "Armenian" -IA "Interlingua" -IE "Interlingue" -IK "Inupiak" -IN "Indonesian" -IS "Icelandic" -IT "Italian" -IW "Hebrew" -JA "Japanese" -JI "Yiddish" -JW "Javanese" -KA "Georgian" -KK "Kazakh" -KL "Greenlandic" -KM "Cambodian" -KN "Kannada" -KO "Korean" -KS "Kashmiri" -KU "Kurdish" -KY "Kirghiz" -LA "Latin" -LN "Lingala" -LO "Laothian" -LT "Lithuanian" -LV "Latvian" "Lettish" -MG "Malagasy" -MI "Maori" -MK "Macedonian" -ML "Malayalam" -MN "Mongolian" -MO "Moldavian" -MR "Marathi" -MS "Malay" -MT "Maltese" -MY "Burmese" -NA "Nauru" -NE "Nepali" -NL "Dutch" -NO "Norwegian" -OC "Occitan" -OM "Oromo" "Afan" -OR "Oriya" -PA "Punjabi" -PL "Polish" -PS "Pashto" "Pushto" -PT "Portuguese" -QU "Quechua" -RM "Rhaeto-Romance" -RN "Kirundi" -RO "Romanian" -RU "Russian" -RW "Kinyarwanda" -SA "Sanskrit" -SD "Sindhi" -SG "Sangro" -SH "Serbo-Croatian" -SI "Singhalese" -SK "Slovak" -SL "Slovenian" -SM "Samoan" -SN "Shona" -SO "Somali" -SQ "Albanian" -SR "Serbian" -SS "Siswati" -ST "Sesotho" -SU "Sudanese" -SV "Swedish" -SW "Swahili" -TA "Tamil" -TE "Tegulu" -TG "Tajik" -TH "Thai" -TI "Tigrinya" -TK "Turkmen" -TL "Tagalog" -TN "Setswana" -TO "Tonga" -TR "Turkish" -TS "Tsonga" -TT "Tatar" -TW "Twi" -UK "Ukrainian" -UR "Urdu" -UZ "Uzbek" -VI "Vietnamese" -VO "Volapuk" -WO "Wolof" -XH "Xhosa" -YO "Yoruba" -ZH "Chinese" -ZU "Zulu" diff --git a/doc/paradigms.txt b/doc/paradigms.txt deleted file mode 100644 index 0c4cf260c..000000000 --- a/doc/paradigms.txt +++ /dev/null @@ -1,48 +0,0 @@ -Morphological Paradigms in the GF Resource Grammar Library -Aarne Ranta - - -This is a synopsis of the main morphological paradigms for -nouns (``N``), adjectives (``A``), and verbs (``V``). - - -=English= - -``` - mkN : (flash : Str) -> N ; -- car, bus, ax, hero, fly, boy - mkN : (man,men : Str) -> N ; -- index, indices - mkN : (man,men,man's,men's : Str) -> N ; - mkN : Str -> N -> N ; -- baby boom - - mkA : (happy : Str) -> A ; -- small, happy, free - mkA : (fat,fatter : Str) -> A ; - mkA : (good,better,best,well : Str) -> A - compoundA : A -> A ; -- -/more/most ridiculous - - mkV : (cry : Str) -> V ; -- call, kiss, echo, cry, pray - mkV : (stop,stopped : Str) -> V ; - mkV : (drink,drank,drunk : Str) -> V ; - mkV : (run,ran,run,running : Str) -> V ; - mkV : (go,goes,went,gone,going : Str) -> V -``` - -=French= - -``` - mkN : (cheval : Str) -> N ; -- pas, prix, nez, bijou, cheval - mkN : (foie : Str) -> Gender -> N ; - mkN : (oeil,yeux : Str) -> Gender -> N ; - mkN : N -> Str -> N - - mkA : (cher : Str) -> A ; -- banal, heureux, italien, jeune, amer, carr, joli - mkA : (sec,seche : Str) -> A ; - mkA : (banal,banale,banaux,banalement : Str) -> A ; - mkA : (bon : A) -> (meilleur : A) -> A - prefixA : A -> A ; - - mkV : (finir : Str) -> V ; -- aimer, cder, placer, manger, payer, finir - mkV : (jeter,jette,jettera : Str) -> V ; - mkV : V2 -> V - etreV : V -> V ; - reflV : V -> V ; -``` diff --git a/doc/rgl-publications.html b/doc/rgl-publications.html deleted file mode 100644 index fdf576cb5..000000000 --- a/doc/rgl-publications.html +++ /dev/null @@ -1,529 +0,0 @@ - - - - - - -GF Resource Grammar Library Documentation and Publications - -
-

GF Resource Grammar Library Documentation and Publications

-Aarne Ranta
-20170119 -
- -

-To be completed. Contributions welcome - in particular, links to open access publications! -

- -

Afrikaans

- - - -

Amharic

- - - -

Arabic

- -
    -
  • Source: http://www.grammaticalframework.org/lib/src/arabic (Ali El Dada) -

    -
  • Publications -

    -Ali El Dada. -Arabic Resource Grammar in GF, MSc Thesis, Chalmers University, 2006. -

    -A. El Dada and A. Ranta. -Implementing an Open Source Arabic Resource Grammar in GF. -In M. Mughazy (ed), -Perspectives on Arabic Linguistics XX. Papers from the Twentieth Annual Symposium on Arabic Linguistics, Kalamazoo, March 26 -John Benjamins Publishing Company. -2007. -
    -An outline of the Arabic resource grammar project, focusing on linguistic aspects. -

    -A. El Dada. -Implementation of the Arabic Numerals and their Syntax in GF. -Computational Approaches to Semitic Languages: Common Issues and Resources, - ACL-2007 Workshop, -June 28, 2007, Prague. -2007. -http://acl.ldc.upenn.edu/W/W07/W07-08.pdf -
    -A case study with the resource grammar, focusing on the morphosyntax -and agreement of constructions with numerals. -
- -

Bulgarian

- - - -

Catalan

- - - -

Chinese

- - - -

Danish

- - - -

Dutch

- - - -

English

- -
    -
  • Source: http://www.grammaticalframework.org/lib/src/english (Aarne Ranta, Björn Bringert, Krasimir Angelov) -

    -
  • Publications -

    -A. Ranta. -The GF Resource Grammar Library. -Linguistic Issues in Language Technology, -2 (2), -2009. -PDF -
    -A systematic presentation of the library from the linguistic point of view. -Not only about English, but English examples abound. -
- -

Estonian

- - - -

Finnish

- - - -

French

- - - -

German

- - - -

Greek

- -
    -
  • Source: http://www.grammaticalframework.org/lib/src/greek (Ioanna Papadopoulou) -

    -
  • Publications -

    -Ioanna Papadopoulou. -GF Modern Greek Resource Grammar, -MA thesis, University of Gothenburg, -2013. -

    -Ioanna Papadopoulou. -GF Modern Greek Resource Grammar. -RANLP 2013. -
- -

Hebrew

- - - -

Hindi

- - - -

Icelandic

- - - -

Interlingua

- - - -

Italian

- - - -

Japanese

- - - -

Latin

- - - -

Latvian

- - - -

Maltese

- - - -

Nepali

- - - -

Norwegian (bokmål)

- - - -

Norwegian (nynorsk)

- - - -

Persian

- - - -

Polish

- - - -

Punjabi

- -
    -
  • Source: http://www.grammaticalframework.org/lib/src/punjabi (Shafqat Virk, Muhammad Humayoun) -

    -
  • Publications -

    -S. Virk, M. Humayoun, and A. Ranta. -An Open-Source Punjabi Resource Grammar. -Proceedings of RANLP-2011, Recent Advances in Natural Language Processing, -Hissar, Bulgaria, 12-14 September, 2011. -pp. 70-76. -http://lml.bas.bg/~iva/ranlp2011/RANLR2011_Proceedings.PDF -

    -M. Humayoun and A. Ranta. -Developing Punjabi Morphology, Corpus and Lexicon. -The 24th Pacific Asia conference on Language, Information and Computation (PACLIC24), -2010. -
- -

Romanian

- - - -

Russian

- -
    -
  • Source: http://www.grammaticalframework.org/lib/src/russian (Janna Khegai, Nikita Frolov) -

    -
  • Publications -

    -J. Khegai. -GF parallel resource grammars and Russian. -In proceedings of ACL2006 - (The joint conference of the International Committee on Computational - Linguistics and the Association for Computational Linguistics) (pp. 475-482), - Sydney, Australia, July 2006. -

    -J. Khegai and A. Ranta. -Building and Using a Russian Resource Grammar in GF. -In A. Gelbukh (ed), -Intelligent Text Processing and Computational Linguistics (CICLing-2004), -Seoul, Korea, February 2003, -Springer LNCS 945, -pp. 38-41, -2004. -
- -

Sindhi

- - - -

Spanish

- - - -

Swahili

- - - -
    -
  • Publications -

    -Wanjiku Ng'ng'a. -Building Swahili Resource Grammars for the Grammatical Framework, -In D. Santos, K. Lindén and W. Ng'ang'a (eds), -Shall We Play the Festschrift Game? -Essays on the Occasion of Lauri Carlson's 60th Birthday. -Springer, Heidelberg, 2012. -pp. 227-241. -http://link.springer.com/chapter/10.1007/978-3-642-30773-7_13 -
- -

Swedish

- - - -

Thai

- - - -

Turkish

- - - -

Urdu

- -
    -
  • Source: http://www.grammaticalframework.org/lib/src/urdu http://www.grammaticalframework.org/lib/src/hindustani (Shafqat Virk, Muhamman Humayoun) -

    -
  • Publications -

    -S. Virk, M. Humayoun, and A. Ranta. -An Open Source Urdu Resource Grammar. -Proceedings of the 8th Workshop on Asian Language Resources (Coling 2010 workshop), -2010. -

    -M. Humayoun, H. Hammarström, and A. Ranta. -Urdu Morphology, Orthography and Lexicon Extraction. -CAASL-2: The Second Workshop on Computational Approaches to Arabic Script-based Languages, -July 21-22, 2007, LSA 2007 Linguistic Institute, Stanford University. -2007. -

    -See also Hindi above. -
- - - - diff --git a/doc/status.html b/doc/status.html deleted file mode 100644 index 546385edf..000000000 --- a/doc/status.html +++ /dev/null @@ -1,862 +0,0 @@ - - - - - -The Status of the GF Resource Grammar Library - -
-

The Status of the GF Resource Grammar Library

-Aarne Ranta
-20170119 -
- -

-The following table gives the languages currently available in the -GF Resource Grammar Library. -

-

-For another view, see the -The Resource Grammar Library coverage map . -

-

-Corrections and additions are welcome! Notice that only those parts of implementations -that are currently available via http://grammaticalframework.org -are marked in the table -

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
ISOLanguageDarcsMiniParadLexLangAPISymbIrregDictTranstestedpublauthors
AfrAfrikaans+-+++++------*LP,LM
AmhAmharic++++++------+*MK
AraArabic++++-------+AD
BulBulgarian+++++++++++++*KA
CatCatalan+++++++++-+++-*JS,*IL
ChiChinese+-+++++--++-+ZL,*AR,*CP,QH
DanDanish+++++++++--+-*AR
DutDutch+++++++++-++-*AR,FJ
EngEnglish++++++++++++++*AR,BB,KA
EstEstonian+-+++++----++*KK,*IL
FinFinnish++++++++-+++++*AR,*IL
FreFrench+++++++++++++-*AR,RE
GerGerman+++++++++++++-*AR,HH,EG
GreGreek(mod)+-+++++-----+*IP
GrcGreek(anc)-----------+*HLe
HebHebrew+----------+*DD
HinHindi++++++++--+++*SV,*KP,MH,AR,PK
IceIcelandic+-+++++-----+*BT
InaInterlingua++++++-------JB
ItaItalian++++++++--+++-*AR,*RE,GP
JpnJapanese+-+++++---+++*LZ
LatLatin+-------+---*AR,*HLa
LavLatvian+-+++++----++*NG,*PP
MltMaltese++++++++----+*JC
MonMongolian+-+++++--+--+*NE
NepNepali++++++------+*DS
NnoNorwegian(n)+++++++++----*SRE
NorNorwegian(b)+++++++++--+-*AR
PesPersian+-++++----++*SV,*EA,SM
PnbPunjabi+++++++----+*SV,MH
PolPolish+++++++---++IN,*AS
RonRomanian++++++++---++*RE
RusRussian+++++++--++-+JK,*NF
SndSindhi++++++++----+*SV,*JD
SpaSpanish+++++++++-+++-*AR,IA,TS,*IL
SwaSwahili+----------+*WN,JM
SweSwedish++++++++++++++*MA,*AR,MF
ThaThai+-++++++--++-*AR,CK
TsnTswana------------*LPs,AB
TurTurkish+-+++----+---*SC,KA
UrdUrdu++++++++---++*SV,MH
- -

-ISO = 3-letter ISO language code, used in library file names -(mostly ISO 639-2 B (bibliographic)) -

-

-Darcs = available in the darcs repository of http://code.haskell.org/gf http://www.grammaticalframework.org/ -

-

-Mini = minimal resource, compiles with make minimal (obsolete) -

-

-Parad = Paradigms file complete for major POS, ++ means with smart paradigms -

-

-Lex = the resource Lexicon (nearly) complete -

-

-Lang = the resource Syntax (nearly) complete -

-

-API = the Syntax compiles -

-

-API = the Symbolic API compiles -

-

-Irreg = the Irreg module with irregular verbs exists -

-

-Dict = the Dict module, large-scale morphological lexicon, exists -

-

-Trans = large-scale translation module and dictionary exists -

-

-tested = tested in some applications, ++ means extensively tested with no major issues -

-

-publ = publications available, see RGL publication list -

-

-authors = main contributors, * means still active -(ready to fix bugs, answer to questions, etc) -

- -

Author codes

- -

-AB Ansu Berg, -AD Ali El Dada, -AR Aarne Ranta, -AS Adam Slaski, -BB Björn Bringert, -BT Bjarki Traustason, -CK Chotiros Kairoje, -CP Chen Peng, -DD Dana Dannélls, -DS Dinesh Simk, -EA Elnaz Abolahrar, -EG Erzsébet Galgóczy -FJ Femke Johansson, -HH Harald Hammarström, -HLa Herbert Lange, -HLe Hans Leiss, -GP Gabriele Paganelli, -IA Ingrid Andersson, -IL Inari Listenmaa, -IN Ilona Novak, -IP Ioanna Papadopoulou, -JB Jean-Philippe Bernardy, -JC John J. Camilleri, -JD Jherna Devi, -JK Janna Khegai, -JM Juliet Mutahi, -JS Jordi Saludes, -KA Krasimir Angelov, -KK Kaarel Kaljurand, -KP Kuchi Prasad, -LM Laurette Marais, -LP Laurette Pretorius, -LZ Liza Zimina, -MA Malin Ahlberg, -MF Markus Forsberg, -MK Markos Kassa Gobena, -MH Muhammad Humayoun, -NE Nyamsuren Erdenebadrakh, -NF Nick Frolov, -NG Normunds Gruzitis, -QH Qiao Haiyan, -RE Ramona Enache, -PP Peteris Paikens, -SC Server Cimen, -SM Sofy Moradi, -SRE Stian Rødven Eide, -SV Shafqat Virk, -TH Therese Söderberg, -WN Wanjiku Ng'ang'a, -ZL Zhuo Lin Qiqige -

- -

Rules

- -

-Only components available at http://grammaticalframework.org are indicated in the table -(exceptions: Ancient Greek, Mongolian, to appear soon). -

-

-If you want to work on a language already in the table, please be kind and contact the -active authors of it. -

-

-Feel free to start a new language that is not yet in the table - but let us know and -contribute some code as soon as you can! -

- - - - diff --git a/doc/.gitignore b/doc/synopsis/.gitignore similarity index 62% rename from doc/.gitignore rename to doc/synopsis/.gitignore index d8273c264..b0e9b0a7b 100644 --- a/doc/.gitignore +++ b/doc/synopsis/.gitignore @@ -1,5 +1,6 @@ +index.txt +index.html api-examples-*.txt api-examples.gfs categories-imagemap.html -synopsis.txt -synopsis.html +categories.png diff --git a/doc/synopsis/Makefile b/doc/synopsis/Makefile new file mode 100644 index 000000000..6e3a96269 --- /dev/null +++ b/doc/synopsis/Makefile @@ -0,0 +1,67 @@ +# Your GF_LIB_PATH must be set in order for this build script to work + +.PHONY: all index clean + +GF_alltenses=$(GF_LIB_PATH)/alltenses +GF=gf +GFDOC=gfdoc + +ROOT=../.. +S=$(ROOT)/src +CONFIG=$(ROOT)/languages.csv + +# List of languages extracted from languages.csv, with 'Synopsis' column == y +LANGS=$(shell cat $(CONFIG) | cut -d',' -f1,10 | grep ',y' | cut -d',' -f1) + +# This list was constructed by observing what files MkSynopsis.hs reads +SRC_FILES=$(S)/abstract/Common.gf $(S)/abstract/Cat.gf $(S)/api/Constructors.gf $(S)/abstract/Structural.gf $(patsubst %,$S/*/Paradigms%.gf,$(LANGS)) + +EXAMPLES_OUT=$(patsubst %,api-examples-%.txt,$(LANGS)) +INCLUDES=intro.txt categories-intro.txt categories-imagemap.html additional.txt browse.txt example.txt + +TMP=tmp.html +TEMPLATE=template.html + +all: index + +index: index.html + +index.txt: MkSynopsis.hs MkExxTable.hs $(INCLUDES) $(EXAMPLES_OUT) $(SRC_FILES) + runghc -i$(ROOT) MkSynopsis.hs + +index.html: index.txt $(TEMPLATE) + txt2tags --target=html --no-headers --quiet --toc --outfile=$@ --infile=$< + pandoc \ + --from=html \ + --to=html5 \ + --standalone \ + --template=$(TEMPLATE) \ + --css=synopsis.css \ + --metadata='title:"GF Resource Grammar Library: Synopsis"' \ + --variable='rel-root:$(ROOT)/..' \ + --output=$(TMP) \ + $@ + mv $(TMP) $@ + +categories.png: categories.dot + dot -Tpng $^ > $@ + +categories-imagemap.html: categories.dot + dot -Tcmapx $^ > $@ + +api-examples.gfs: api-examples.txt MkExx.hs + runghc MkExx.hs < $< > $@ + +# Since .gfo files aren't self-contained, the dependencies given here are +# incomplete. But I am thinking that the Try%.gfo file will always be newer +# than any other files it depends on, so the rule will trigger when +# needed anyway. //TH 2018-10-22 +api-examples-%.txt: $(GF_alltenses)/Try%.gfo api-examples.gfs + GF_LIB_PATH=$(GF_LIB_PATH) $(GF) -retain -s $< $@ + +clean: + rm -rf \ + index.txt \ + index.html \ + api-examples.gfs \ + $(EXAMPLES_OUT) diff --git a/doc/MkExx.hs b/doc/synopsis/MkExx.hs similarity index 100% rename from doc/MkExx.hs rename to doc/synopsis/MkExx.hs diff --git a/doc/MkExxTable.hs b/doc/synopsis/MkExxTable.hs similarity index 100% rename from doc/MkExxTable.hs rename to doc/synopsis/MkExxTable.hs diff --git a/doc/MkSynopsis.hs b/doc/synopsis/MkSynopsis.hs similarity index 95% rename from doc/MkSynopsis.hs rename to doc/synopsis/MkSynopsis.hs index e07dec14c..c7cd1f27f 100644 --- a/doc/MkSynopsis.hs +++ b/doc/synopsis/MkSynopsis.hs @@ -6,14 +6,17 @@ import Data.Char import Data.List import qualified Data.Map as M import Text.Printf -import Config +import Config (loadLangsFrom, LangInfo (..)) +import qualified Config type Cats = [(String,String,String)] type Rules = [(String,String,String)] -- the file generated -synopsis :: FilePath -synopsis = "synopsis.txt" +outfile :: FilePath +outfile = "index.txt" + +configFile = ".." ".." Config.configFile -- the language in which revealed examples are shown revealedLang :: String @@ -22,7 +25,7 @@ revealedLang = "Eng" -- all languages shown (a copy of this list appears in Makefile) apiExxFiles :: IO [FilePath] apiExxFiles = do - langs <- loadLangsFrom (".." configFile) + langs <- loadLangsFrom configFile return $ [ "api-examples-" ++ (langCode lang) ++ ".txt" | lang <- langs @@ -35,7 +38,7 @@ main = do cs1 <- getCats commonAPI cs2 <- getCats catAPI let cs = sortCats (cs1 ++ cs2) - writeFile synopsis "GF Resource Grammar Library: Synopsis" + writeFile outfile "GF Resource Grammar Library: Synopsis" space append "%!Encoding:utf-8" append "%!style(html): ./revealpopup.css" @@ -50,7 +53,7 @@ main = do append "%!postproc(html): '#LParadigms' ''" append "%!postproc(tex): '#LParadigms' ''" delimit $ addToolTips cs - include "synopsis-intro.txt" -- TODO dynamic language list + include "intro.txt" -- TODO dynamic language list title "Categories" space link "Source 1:" commonAPI @@ -87,13 +90,13 @@ main = do title "Lexical Paradigms" paradigmFiles >>= mapM_ (putParadigms cs) space - include "synopsis-additional.txt" + include "additional.txt" space - include "synopsis-browse.txt" + include "browse.txt" space title "An Example of Usage" space - include "synopsis-example.txt" + include "example.txt" space title "Table of Contents" space @@ -232,7 +235,7 @@ mkCatTable cs = inChunks chsize (\rs -> header ++ map mk1 rs) cs mk1 (name,expl,ex) = unwords ["|", showCat cs name, "|", expl, "|", typo ex, "|"] typo ex = if take 1 ex == "\"" then itf (init (tail ex)) else ex -srcPath = (() "../src") +srcPath = (() "../../src") commonAPI = srcPath "abstract/Common.gf" catAPI = srcPath "abstract/Cat.gf" @@ -241,7 +244,7 @@ structuralAPI = srcPath "abstract/Structural.gf" paradigmFiles :: IO [(String,FilePath)] paradigmFiles = do - langs <- loadLangsFrom (".." configFile) + langs <- loadLangsFrom configFile return $ [ (name, srcPath $ printf "%s/Paradigms%s.gf" (langDir lang) (langCode lang)) | lang <- langs @@ -263,7 +266,7 @@ splitOn f s = takeWhile (not.f) s : splitOn f rest "" -> [] _:xs -> xs -append s = appendFile synopsis ('\n':s) +append s = appendFile outfile ('\n':s) title s = append $ "=" ++ s ++ "=" stitle s = append $ "==" ++ s ++ "==" include s = append $ "%!include: " ++ s diff --git a/doc/synopsis-additional.txt b/doc/synopsis/additional.txt similarity index 100% rename from doc/synopsis-additional.txt rename to doc/synopsis/additional.txt diff --git a/doc/api-examples.txt b/doc/synopsis/api-examples.txt similarity index 100% rename from doc/api-examples.txt rename to doc/synopsis/api-examples.txt diff --git a/doc/synopsis-browse.txt b/doc/synopsis/browse.txt similarity index 100% rename from doc/synopsis-browse.txt rename to doc/synopsis/browse.txt diff --git a/doc/categories-intro.txt b/doc/synopsis/categories-intro.txt similarity index 100% rename from doc/categories-intro.txt rename to doc/synopsis/categories-intro.txt diff --git a/doc/categories.dot b/doc/synopsis/categories.dot similarity index 100% rename from doc/categories.dot rename to doc/synopsis/categories.dot diff --git a/doc/synopsis-example.txt b/doc/synopsis/example.txt similarity index 100% rename from doc/synopsis-example.txt rename to doc/synopsis/example.txt diff --git a/doc/synopsis-intro.txt b/doc/synopsis/intro.txt similarity index 100% rename from doc/synopsis-intro.txt rename to doc/synopsis/intro.txt diff --git a/doc/quicklinks.js b/doc/synopsis/quicklinks.js similarity index 100% rename from doc/quicklinks.js rename to doc/synopsis/quicklinks.js diff --git a/doc/synopsis.css b/doc/synopsis/synopsis.css similarity index 100% rename from doc/synopsis.css rename to doc/synopsis/synopsis.css diff --git a/doc/_template.html b/doc/synopsis/template.html similarity index 100% rename from doc/_template.html rename to doc/synopsis/template.html diff --git a/doc/translation.html b/doc/translation.html deleted file mode 100644 index 64b621ea9..000000000 --- a/doc/translation.html +++ /dev/null @@ -1,329 +0,0 @@ - - - - - -From Resource Grammar to Wide Coverage Translation with GF - -
-

From Resource Grammar to Wide Coverage Translation with GF

-Aarne Ranta et al.
-January-May 2014 -
- - -

Scope

- -

-Wide-coverage interlingual translator for -Bulgarian, Chinese, Dutch, English, Finnish, French, German, -Hindi, Italian, Spanish, Swedish. -

- -

How to use it

- -

-If you just want to try it before reading more, -here are the main ways to get started: -

-

-1. Run on our server. http://www.grammaticalframework.org/demos/translation.html -

-

-2. Get an Android app. http://www.grammaticalframework.org/demos/app.html -

-

-3. Compile and run in the shell. Get the latest GF sources (with darcs or github) and then -

- -
    -
  • compile and install the GF compiler and library and the C runtime (pgf-translate). -

    -
  • compile the translator: - -
    -    cd GF/lib/src
    -    make -j Translate11.pgf
    -
    - -This will take a long time (fifteen minutes or more) and will probably require at least 8GB of RAM. -

    -
  • run the translator - -
    -    pgf-translate Translate11.pgf Phr TranslateEng TranslateSwe
    -
    - -with obviously the possibility to vary the source and the target language. -
- -

-4. To modify the sources, work on the files in -

- -
-    GF/lib/src/translator/
-
- -

-It is these files that will be explained below. -

- -

GF and the RGL

- -

-GF, Grammatical Framework, was originally designed for the purpose of multilingual controlled language systems, -which would enable high-quality translation on limited domains. The abstract syntax of GF defines the semantic -structures relevant for the domain, and the concrete syntaxes map these structures to grammatically correct -and idiomatic text in each target language. The reversibility of GF enables both generation and parsing, -and thereby translation where the abstract syntax functions as an interlingua. -

-

-As a bottle-neck of GF applications, it was soon realized that the definition of concrete syntax requires a lot -of manual work and linguistic skill, because of the complexities of natural language syntax and morphology. Some of -the complexities can be ignored in a small system. For instance, in a mathematical system, it may be enough to -use verbs in the present tense only. But very much the same linguistic problems must be solved again and again -in new applications: French verb inflection is the same in mathematics as in a tourist phrasebook. To solve -this problem, the GF Resource Grammar Library (RGL) was developed, to take care of "low-level" linguistic -rules such as inflection, agreement, and word order. This enables the authors of application grammars to focus -on the semantics (when designing the abstract syntax) and on selecting RGL functions that produce the idioms they -want. The RGL grew into an international open-source project, where more than 50 persons have contributed to -implementing it for 29 languages by the time of writing this. -

- -

Scaling up GF translation

- -

-The RGL was thus originally designed to be used just as its name says: as a library -for application grammars. Only the latter were meant to be used as top-level grammars, i.e. for -parsing, generation, and translation at run time. Little attention was therefore -paid to the usability of RGL as a top-level -grammar by itself. But when applications accumulated, ranging from technical text to spoken dialogue, the coverage -of the RGL grew into a coverage that approximates a "complete grammar" of many of the languages. -And recently, there has indeed been success in using the RGL as a wide-coverage translation grammar, -mainly due to Krasimir Angelov's efforts to scale up the size of GF applications from language fragments -to open-text processing. This success is a result of four lines of development: -

- -
    -
  • More efficient processing, both due to better algorithms and to an optimized C implementation of a PGF - interpreter, the C runtime, achieving speeds competitive with the state of the art, e.g. the Stanford parser. - This development is also based on the work of Peter Ljunglöf on GF parsing and Lauri Alanko on the C runtime. -

    -
  • Large-scale dictionaries, both manually built and extracted from free sources, and linked into a multilingual - translation dictionary now covering 10k to 60k entries for eleven languages. This work was started by Björn Bringert, - who ported the Oxford Advanced Learner's Dictionary of English to GF. -

    -
  • Probabilistic disambiguation, using a model trained from the Penn Treebank. Due to the common abstract syntax, - the same model can be used for other languages as well, even though the adequacy of this transfer has not - been systematically evaluated. -

    -
  • Robust parsing, which recovers from unknown words and syntax - by using chunk-by-chunk translations. This leads to loss of quality, but fulfills the principle that - "something is better than nothing". -
- -

Remaining problems

- -

-The result of all this work is a wide-coverage translation system, which can be used in the same way as Google -Translate, Bing, Systran, and Apertium - to "translate anything", albeit with a varying quality. At the moment of -writing, the performance is not yet generally on the level with the best of the competition, but shows some promising -improvements in e.g. long-distance agreement and word order. To make these advantages into absolute improvements, we -will need to fix problems that the other systems (or at least some of them) get right but where GF translation -often fails: -

- -
    -
  • Lexical coverage, to eliminate parsing failures due to unknown words. -

    -
  • Disambiguation, with more sophisticated than the essentially context-free tree model used now. -

    -
  • Speed, which gets worse with long sentences and with more complex languages. -

    -
  • Idiomacy, due to the lack of idiomatic constructions that are not compositional and therefore don't get right - in the RGL but are often correct in phrase-based SMT. -
- -

Advantages of GF translation

- -

-Given that these issues get resolved, the strengths of the GF approach can be made more visible: -

- -
    -
  • Grammaticality, in particular the already mentioned issues of agreement and word order. -

    -
  • Predictability, in the sense that a local change in the input usually results in a corresponding - local change in the output (unless otherwise required by idiomacy). -

    -
  • Feedback, i.e. the ease of showing the confidence level of the translation, alternative translations, - and linguistic information. -

    -
  • Adaptability, i.e. the ease of fixing bugs, adapting the system to special domains, and personalizing it. - This can be done with great precision. For instance, a bug in a grammar can be fixed without - breaking anything else. -

    -
  • Light weight. The system runs on standard laptops and even on mobile phones; the size of the run-time - system for all pairs of 11 languages is under 25MB (on the Android platform), and recompiling the whole - system (e.g. after bug fixes or - domain adaptation) is a matter of a few minutes, where corresponding figures for SMT systems are gigabytes of size - and days of retraining. -

    -
  • Multilinguality, in the sense that once the parsing of the input is settled, the output can be readily - rendered into all other languages, - and also in the sense that the GF model works equally well for any language pair. -
- -

Wanted: more work, new ideas

- -

-The recipes for improvement are, as always, more work and new ideas. Each of the four weaknesses mentioned -above can be relieved by more work - in particular, lexical coverage by more work on the lexicon, since -automatic extraction methods cannot really be trusted. As for disambiguation, new ideas about probabilistic -tree models are being discussed. As for speed, new ideas on parsing (in particular, the integration of disambiguation -with parsing) would help, but also the complexity of grammatical structures plays a major role. As for idiomacy, -more work is being done in introducing constructions (non-compositional syntax rules, generalizing the notion of -multiword expressions, in particular, phrases in SMT), but also new ideas are being discussed on how to -extract such constructions from e.g. phrase tables. -

-

-In the following, we will focus on describing the role of grammar in the GF translation system - in particular, how -RGL can be modified to become usable as a top-level grammar for translating open text. -As RGL was not meant to be used for parsing open text, but rather for the controlled language generation task, -it has serious restrictions: -

- -
    -
  • Limited coverage. The RGL does not cover all structures in any language - hence it is likely to fail when - parsing unlimited text. -

    -
  • Semantic overgeneration. Semantic distinctions, such as between mass and count nouns, or place and manner - adverbials, are assumed to be defined in application grammars; the RGL just defines the combinatorics of - elements, but doesn't prescribe which elements can really go together. -

    -
  • Spurious ambiguities. RGL parsing creates more ambiguities than what would be necessary, if there - was more semantic control. In addition, there are partly overlapping structures, which generate - spurious syntactic ambiguities. - Example: the very liberal apposition function. -

    -
  • Inefficiency. Partly because of ambiguities, partly of the deep nesting and complex data structures, parsing - with the RGL can be very slow when compared to application grammars, even the comprehensive ResourceDemo grammar. - For some languages (Romanian, versions of French and Finnish), parsing is not practically possible at all because - PGF generation fails for memory reasons. -

    -
  • Syntax orientation. The structures of the RGL are rather superficial and don't guarantee translation - equivalence when used as interlingua. -

    -
  • Coarse categories. This is a particular aspect of syntax orientation, and causes at the same time overgeneration - and spurious ambiguities. - Example: the category Adv. -
- -

What speaks for using RGL

- -

-Despite these problems, the RGL has shown to be a possible starting point for large-scale translation. It has a couple -of advantages speaking for this: -

- -
    -
  • Coverage. Even though not complete, the RGL has grown into a coverage that is close to complete enough; work - with English shows that just about 20% more constructions can take us there. -

    -
  • Maintainability. The RGL is constantly developed and maintained on its own right, and it makes sense to take - advantage of this and avoid duplicated work with some other large-scale grammar. -
- -

-Of course, we are still left with the other -option of addressing translation with an application grammar, something -similar to the ResourceDemo with flatter and more semantic structures. But this would in turn require -the replication of many rules, even though it would be to a large extent doable by using a functor, that is, -by just one set of rules covering all languages. -

- -

The structure of the wide-coverage translation grammar

- -

-Thus the path chosen is a mixture of RGL and application grammar. In brief, the translation grammar consists of -

- -
    -
  • Selected RGL modules and functions, as they are (using restricted inheritance); around 80% of the syntax. -

    -
  • Overridden RGL functions, with more general types; just a few of them. -

    -
  • Overridden RGL linearizations, typically with more variants in individual languages; just a few, but - increasing. -

    -
  • Syntax extension, new categories and functions, around 20% of the syntax, and increasing. -

    -
  • Big lexicon, with an abstract syntax of 65k lemmas, increasing. -

    -
  • Constructions, inspired by (and partly derived from) Construction Grammars, to capture idioms that - involve specific lexical items and are therefore "between the syntax and the lexicon". -
- -

-The following picture shows the principal module structure of the translation grammar. -

-

- -

-

-Here is a description of each of the modules: -

- -
    -
  • Translate is the top module, which combines the RGL syntax with syntax extensions and a dictionary. - The RGL syntax is not inherited in its entirety, which is indicated by a dashed line. The overridden abstract - syntax functions (common to all languages) are replaced by functions in the Extensions module, whereas the - overridden concrete syntax definitions (specific to each language) are defined in this Translate module. - This consists of the module named Translate. -

    -
  • RGLSyntax stands for the standard RGL module for syntax, excluding the RGL test lexicon and - the language-specific extensions of it. This consists of the standard module named Grammar and - the emerging module named Construction. -

    -
  • Extensions stands for the syntax extensions added to the RGL syntax. This consists of the module - named Extensions. -

    -
  • Dictionary is a large-scale multilingual dictionary. Its abstract syntax uses as identifiers English words - suffixed by categories and word sense information. This consists of the module named Dictionary. -

    -
  • RGLCategories stands for the type system of the standard RGL, the module named Cat. -

    -
  • Chunk is the grammar defining what chunks (noun phrases, verbs, - adverbs, etc) can be used and how they are combined, when exact - syntactic combination fails. -
- -

Where and why the translation grammar differs from the RGL

- -

-A guiding principle is thus that the translation grammar preserves as much as possible of the RGL, so that -duplicated work is avoided. But as the purposes of the two are different, not everything is possible. Two -diverging principles have already been mentioned: -

- -
    -
  • Free variation. The RGL bans free variation, because library users need to have full control on selecting - variants. For instance, English negation has two forms, contracted (don't) and uncontracted (do not), - which in the translation grammar are treated as variants. But RGL users sometimes need to choose the one or the - other, for instance, excluding contracted negation in formal style. -

    -
  • Semantic distinctions. The RGL avoids semantic distinctions that are not absolutely necessary for syntax. - The reason for this is the ambition to keep the library as simple as possible, in particular for the voluntary - implementors of new languages. But meaning-preserving translation needs more distinctions, for instance, in - word senses, subcategorizations, selection restrictions, and tense and aspect systems. -
- -

-The old design principles of the RGL are thus kept in force, and this is made possible by separating parts of the -translation grammar modules from the RGL. -

- - - -