added an experimental version of TranslateDut, and documentation steps.t2t on how it was built

This commit is contained in:
aarne
2014-04-11 07:48:26 +00:00
parent ea40bc151b
commit 7363598913
8 changed files with 887 additions and 5 deletions

View File

@@ -133,6 +133,7 @@ TranslateEng: TranslateEng.pgf
TranslateBul: TranslateBul.pgf
TranslateChi: TranslateChi.pgf
TranslateGer: TranslateGer.pgf
TranslateDut: TranslateDut.pgf
TranslateSwe: TranslateSwe.pgf
TranslateHin: TranslateHin.pgf
TranslateFin: TranslateFin.pgf
@@ -146,6 +147,8 @@ GFMKT=mkdir -p ../translator && gf $S -make -literal=Symb -probs=$(TPROBSFILE) -
TRANSLATE8=TranslateEng.pgf TranslateBul.pgf TranslateChi.pgf TranslateGer.pgf TranslateSwe.pgf TranslateHin.pgf TranslateFin.pgf TranslateFre.pgf
TRANSLATE10=TranslateEng.pgf TranslateBul.pgf TranslateChi.pgf TranslateGer.pgf TranslateSwe.pgf TranslateHin.pgf TranslateFin.pgf TranslateFre.pgf TranslateIta.pgf TranslateSpa.pgf
TRANSLATE11=$(TRANSLATE10) TranslateDut.pgf
# Without dependencies:
Translate10:
$(GFMKT) -name=Translate10 $(TRANSLATE10) +RTS -K32M
@@ -154,6 +157,14 @@ Translate10:
Translate10.pgf: $(TRANSLATE10)
$(GFMKT) -name=Translate10 $(TRANSLATE10) +RTS -K32M
# Without dependencies:
Translate11:
$(GFMKT) -name=Translate11 $(TRANSLATE11) +RTS -K32M
# With dependencies:
Translate11.pgf: $(TRANSLATE10)
$(GFMKT) -name=Translate11 $(TRANSLATE11) +RTS -K32M
# Without dependencies:
Translate8:
$(GFMKT) -name=Translate8 $(TRANSLATE8) +RTS -K32M
@@ -168,6 +179,7 @@ TranslateBul.pgf:: ; $(GFMKT) -name=TranslateBul translator/TranslateBul.gf
TranslateChi.pgf:: ; $(GFMKT) -name=TranslateChi translator/TranslateChi.gf +RTS -K64M
TranslateFin.pgf:: ; $(GFMKT) -name=TranslateFin translator/TranslateFin.gf +RTS -K64M
TranslateGer.pgf:: ; $(GFMKT) -name=TranslateGer translator/TranslateGer.gf
TranslateDut.pgf:: ; $(GFMKT) -name=TranslateDut translator/TranslateDut.gf
TranslateHin.pgf:: ; $(GFMKT) -name=TranslateHin translator/TranslateHin.gf
TranslateFre.pgf:: ; $(GFMKT) -name=TranslateFre translator/TranslateFre.gf +RTS -K64M
TranslateSwe.pgf:: ; $(GFMKT) -name=TranslateSwe translator/TranslateSwe.gf

43
lib/src/chunk/ChunkDut.gf Normal file
View File

@@ -0,0 +1,43 @@
concrete ChunkDut of Chunk = CatDut
---- , ExtensionsDut
**
ChunkFunctor - [UseVC, VPS_Chunk, emptyNP, VPI_Chunk]
with (Syntax = SyntaxDut), (Extensions = ExtensionsDut)
**
open
SyntaxDut, (E = ExtensionsDut), Prelude,
ResDut, (P = ParadigmsDut) in {
oper
emptyNP = SyntaxDut.mkNP (P.mkPN []) ;
----lin
---- NP_Acc_Chunk np = ss (np.s ! NPC Acc) ;
---- NP_Gen_Chunk np = ss (np.s ! NPC Gen) ;
---- VPI_Chunk vpi = {s = vpi.s ! (True | False)} ;
lin
copula_inf_Chunk = ss "zijn" ;
refl_SgP1_Chunk = ss "mij zelf" ;
refl_SgP2_Chunk = ss "jij zelf" ;
refl_SgP3_Chunk = ss "zij zelf" ;
refl_PlP1_Chunk = ss "ons zelf" ;
refl_PlP2_Chunk = ss "jullie zelf" ;
refl_PlP3_Chunk = ss "zij zelf" ;
neg_Chunk = ss "niet" ;
copula_Chunk = ss "is" ;
copula_neg_Chunk = ss "is niet" ;
past_copula_Chunk = ss "was" ;
past_copula_neg_Chunk = ss "was niet" ;
future_Chunk = ss "zal" ;
future_neg_Chunk = ss "zal niet" ;
cond_Chunk = ss "zou" ;
cond_neg_Chunk = ss "zou niet" ;
perfect_Chunk = ss "heeft" ;
perfect_neg_Chunk = ss "heeft niet" ;
past_perfect_Chunk = ss "had" ;
past_perfect_neg_Chunk = ss "had niet" ;
}

View File

@@ -24,7 +24,7 @@ lin
S_Chunk s = mkUtt s ;
SSlash_Chunk s = mkUtt <lin S s : S> ;
QS_Chunk qs = mkUtt qs ;
CN_Pl_Chunk cn = mkUtt (mkNP aPl_Det cn) ;
CN_Pl_Chunk cn = mkUtt (Syntax.mkNP aPl_Det cn) ;
CN_Sg_Chunk cn = mkUtt cn ;
---- CN_Pl_Gen_Chunk cn = ss (cn.s ! Pl ! Gen) ;
---- CN_Sg_Gen_Chunk cn = ss (cn.s ! Sg ! Gen) ;
@@ -34,11 +34,11 @@ lin
NP_Nom_Chunk np = mkUtt np ;
---- NP_Acc_Chunk np = ss (np.s ! NPAcc) ;
---- NP_Gen_Chunk np = ss (np.s ! NCase Gen) | ss (np.s ! NPNomPoss) ;
Numeral_Nom_Chunk num = mkUtt (mkNP (mkDet num)) ;
Numeral_Nom_Chunk num = mkUtt (Syntax.mkNP (Syntax.mkDet num)) ;
---- Numeral_Gen_Chunk num = ss (num.s ! NCard ! Gen) ;
---- Ord_Nom_Chunk ord = ss (ord.s ! Nom) ;
---- Ord_Gen_Chunk ord = ss (ord.s ! Gen) ;
Predet_Chunk predet = mkUtt (mkNP predet emptyNP) ;
Predet_Chunk predet = mkUtt (Syntax.mkNP predet emptyNP) ;
Prep_Chunk prep = mkAdv prep emptyNP ; ----
---- RP_Nom_Chunk rp = ss (rp.s ! RC Neutr (NCase Nom)) ;
---- RP_Acc_Chunk rp = ss (rp.s ! RPrep Masc) ; ----

View File

@@ -0,0 +1,446 @@
concrete DictionaryDut of Dictionary = CatDut
** open ParadigmsDut, MorphoDut, IrregDut, (L=LexiconDut), (S=StructuralDut), Prelude in {
lin add_V3 = L.add_V3 ;
lin airplane_N = L.airplane_N ;
lin already_Adv = L.already_Adv ;
lin animal_N = L.animal_N ;
lin answer_V2S = L.answer_V2S ;
lin apartment_N = L.apartment_N ;
lin apple_N = L.apple_N ;
lin art_N = L.art_N ;
lin ashes_N = L.ashes_N ;
lin ask_V2Q = L.ask_V2Q ;
lin baby_N = L.baby_N ;
lin back_N = L.back_N ;
lin bad_A = L.bad_A ;
lin bank_N = L.bank_N ;
lin bark_N = L.bark_N ;
lin beautiful_A = L.beautiful_A ;
lin become_VA = L.become_VA ;
lin beer_N = L.beer_N ;
lin beg_V2V = L.beg_V2V ;
lin belly_N = L.belly_N ;
lin big_A = L.big_A ;
lin bike_N = L.bike_N ;
lin bird_N = L.bird_N ;
lin bite_V2 = L.bite_V2 ;
lin black_A = L.black_A ;
lin blood_N = L.blood_N ;
lin blow_V = L.blow_V ;
lin blue_A = L.blue_A ;
lin boat_N = L.boat_N ;
lin bone_N = L.bone_N ;
lin book_N = L.book_N ;
lin boot_N = L.boot_N ;
lin boss_N = L.boss_N ;
lin boy_N = L.boy_N ;
lin bread_N = L.bread_N ;
lin break_V2 = L.break_V2 ;
lin breast_N = L.breast_N ;
lin breathe_V = L.breathe_V ;
lin broad_A = L.broad_A ;
lin brother_N2 = L.brother_N2 ;
lin brown_A = L.brown_A ;
lin burn_V = L.burn_V ;
lin butter_N = L.butter_N ;
lin buy_V2 = L.buy_V2 ;
lin camera_N = L.camera_N ;
lin cap_N = L.cap_N ;
lin car_N = L.car_N ;
lin carpet_N = L.carpet_N ;
lin cat_N = L.cat_N ;
lin ceiling_N = L.ceiling_N ;
lin chair_N = L.chair_N ;
lin cheese_N = L.cheese_N ;
lin child_N = L.child_N ;
lin church_N = L.church_N ;
lin city_N = L.city_N ;
lin clean_A = L.clean_A ;
lin clever_A = L.clever_A ;
lin close_V2 = L.close_V2 ;
lin cloud_N = L.cloud_N ;
lin coat_N = L.coat_N ;
lin cold_A = L.cold_A ;
lin come_V = L.come_V ;
lin computer_N = L.computer_N ;
lin correct_A = L.correct_A ;
lin count_V2 = L.count_V2 ;
lin country_N = L.country_N ;
lin cousin_N = L.cousin_N ;
lin cow_N = L.cow_N ;
lin cut_V2 = L.cut_V2 ;
lin day_N = L.day_N ;
lin die_V = L.die_V ;
lin dig_V = L.dig_V ;
lin dirty_A = L.dirty_A ;
lin distance_N3 = L.distance_N3 ;
lin doctor_N = L.doctor_N ;
lin dog_N = L.dog_N ;
lin door_N = L.door_N ;
lin drink_V2 = L.drink_V2 ;
lin dry_A = L.dry_A ;
lin dull_A = L.dull_A ;
lin dust_N = L.dust_N ;
lin ear_N = L.ear_N ;
lin earth_N = L.earth_N ;
lin easy_A2V = L.easy_A2V ;
lin eat_V2 = L.eat_V2 ;
lin egg_N = L.egg_N ;
lin empty_A = L.empty_A ;
lin enemy_N = L.enemy_N ;
lin eye_N = L.eye_N ;
lin factory_N = L.factory_N ;
lin far_Adv = L.far_Adv ;
lin fat_N = L.fat_N ;
lin father_N2 = L.father_N2 ;
lin fear_V2 = L.fear_V2 ;
lin fear_VS = L.fear_VS ;
lin feather_N = L.feather_N ;
lin fight_V2 = L.fight_V2 ;
lin find_V2 = L.find_V2 ;
lin fingernail_N = L.fingernail_N ;
lin fire_N = L.fire_N ;
lin fish_N = L.fish_N ;
lin float_V = L.float_V ;
lin floor_N = L.floor_N ;
lin flow_V = L.flow_V ;
lin flower_N = L.flower_N ;
lin fly_V = L.fly_V ;
lin fog_N = L.fog_N ;
lin foot_N = L.foot_N ;
lin forget_V2 = L.forget_V2 ;
lin freeze_V = L.freeze_V ;
lin fridge_N = L.fridge_N ;
lin friend_N = L.friend_N ;
lin fruit_N = L.fruit_N ;
lin full_A = L.full_A ;
lin fun_AV = L.fun_AV ;
lin garden_N = L.garden_N ;
lin girl_N = L.girl_N ;
lin give_V3 = L.give_V3 ;
lin glove_N = L.glove_N ;
lin go_V = L.go_V ;
lin gold_N = L.gold_N ;
lin grammar_N = L.grammar_N ;
lin grass_N = L.grass_N ;
lin green_A = L.green_A ;
lin guts_N = L.guts_N ;
lin hair_N = L.hair_N ;
lin hand_N = L.hand_N ;
lin harbour_N = L.harbour_N ;
lin hat_N = L.hat_N ;
lin hate_V2 = L.hate_V2 ;
lin head_N = L.head_N ;
lin hear_V2 = L.hear_V2 ;
lin heart_N = L.heart_N ;
lin heavy_A = L.heavy_A ;
lin hill_N = L.hill_N ;
lin hit_V2 = L.hit_V2 ;
lin hold_V2 = L.hold_V2 ;
lin hope_VS = L.hope_VS ;
lin horn_N = L.horn_N ;
lin horse_N = L.horse_N ;
lin hot_A = L.hot_A ;
lin house_N = L.house_N ;
lin hunt_V2 = L.hunt_V2 ;
lin husband_N = L.husband_N ;
lin ice_N = L.ice_N ;
lin important_A = L.important_A ;
lin industry_N = L.industry_N ;
lin iron_N = L.iron_N ;
lin john_PN = L.john_PN ;
lin jump_V = L.jump_V ;
lin kill_V2 = L.kill_V2 ;
lin king_N = L.king_N ;
lin knee_N = L.knee_N ;
lin know_V2 = L.know_V2 ;
lin know_VQ = L.know_VQ ;
lin know_VS = L.know_VS ;
lin lake_N = L.lake_N ;
lin lamp_N = L.lamp_N ;
lin language_N = L.language_N ;
lin laugh_V = L.laugh_V ;
lin leaf_N = L.leaf_N ;
lin learn_V2 = L.learn_V2 ;
lin leather_N = L.leather_N ;
lin leave_V2 = L.leave_V2 ;
lin left_Ord = L.left_Ord ;
lin leg_N = L.leg_N ;
lin lie_V = L.lie_V ;
lin like_V2 = L.like_V2 ;
lin listen_V2 = L.listen_V2 ;
lin live_V = L.live_V ;
lin liver_N = L.liver_N ;
lin long_A = L.long_A ;
lin lose_V2 = L.lose_V2 ;
lin louse_N = L.louse_N ;
lin love_N = L.love_N ;
lin love_V2 = L.love_V2 ;
lin man_N = L.man_N ;
lin married_A2 = L.married_A2 ;
lin meat_N = L.meat_N ;
lin milk_N = L.milk_N ;
lin moon_N = L.moon_N ;
lin mother_N2 = L.mother_N2 ;
lin mountain_N = L.mountain_N ;
lin mouth_N = L.mouth_N ;
lin music_N = L.music_N ;
lin name_N = L.name_N ;
lin narrow_A = L.narrow_A ;
lin near_A = L.near_A ;
lin neck_N = L.neck_N ;
lin new_A = L.new_A ;
lin newspaper_N = L.newspaper_N ;
lin night_N = L.night_N ;
lin nose_N = L.nose_N ;
lin now_Adv = L.now_Adv ;
lin number_N = L.number_N ;
lin oil_N = L.oil_N ;
lin old_A = L.old_A ;
lin open_V2 = L.open_V2 ;
lin paint_V2A = L.paint_V2A ;
lin paper_N = L.paper_N ;
lin paris_PN = L.paris_PN ;
lin peace_N = L.peace_N ;
lin pen_N = L.pen_N ;
lin person_N = L.person_N ;
lin planet_N = L.planet_N ;
lin plastic_N = L.plastic_N ;
lin play_V = L.play_V ;
lin play_V2 = L.play_V2 ;
lin policeman_N = L.policeman_N ;
lin priest_N = L.priest_N ;
lin probable_AS = L.probable_AS ;
lin pull_V2 = L.pull_V2 ;
lin push_V2 = L.push_V2 ;
lin put_V2 = L.put_V2 ;
lin queen_N = L.queen_N ;
lin question_N = L.question_N ;
lin radio_N = L.radio_N ;
lin rain_N = L.rain_N ;
lin rain_V0 = L.rain_V0 ;
lin read_V2 = L.read_V2 ;
lin reason_N = L.reason_N ;
lin red_A = L.red_A ;
lin religion_N = L.religion_N ;
lin restaurant_N = L.restaurant_N ;
lin right_Ord = L.right_Ord ;
lin river_N = L.river_N ;
lin road_N = L.road_N ;
lin rock_N = L.rock_N ;
lin roof_N = L.roof_N ;
lin root_N = L.root_N ;
lin rope_N = L.rope_N ;
lin rotten_A = L.rotten_A ;
lin round_A = L.round_A ;
lin rub_V2 = L.rub_V2 ;
lin rubber_N = L.rubber_N ;
lin rule_N = L.rule_N ;
lin run_V = L.run_V ;
lin salt_N = L.salt_N ;
lin sand_N = L.sand_N ;
lin say_VS = L.say_VS ;
lin school_N = L.school_N ;
lin science_N = L.science_N ;
lin scratch_V2 = L.scratch_V2 ;
lin sea_N = L.sea_N ;
lin see_V2 = L.see_V2 ;
lin seed_N = L.seed_N ;
lin seek_V2 = L.seek_V2 ;
lin sell_V3 = L.sell_V3 ;
lin send_V3 = L.send_V3 ;
lin sew_V = L.sew_V ;
lin sharp_A = L.sharp_A ;
lin sheep_N = L.sheep_N ;
lin ship_N = L.ship_N ;
lin shirt_N = L.shirt_N ;
lin shoe_N = L.shoe_N ;
lin shop_N = L.shop_N ;
lin short_A = L.short_A ;
lin silver_N = L.silver_N ;
lin sing_V = L.sing_V ;
lin sister_N = L.sister_N ;
lin sit_V = L.sit_V ;
lin skin_N = L.skin_N ;
lin sky_N = L.sky_N ;
lin sleep_V = L.sleep_V ;
lin small_A = L.small_A ;
lin smell_V = L.smell_V ;
lin smoke_N = L.smoke_N ;
lin smooth_A = L.smooth_A ;
lin snake_N = L.snake_N ;
lin snow_N = L.snow_N ;
lin sock_N = L.sock_N ;
lin song_N = L.song_N ;
lin speak_V2 = L.speak_V2 ;
lin spit_V = L.spit_V ;
lin split_V2 = L.split_V2 ;
lin squeeze_V2 = L.squeeze_V2 ;
lin stab_V2 = L.stab_V2 ;
lin stand_V = L.stand_V ;
lin star_N = L.star_N ;
lin steel_N = L.steel_N ;
lin stick_N = L.stick_N ;
lin stone_N = L.stone_N ;
lin stop_V = L.stop_V ;
lin stove_N = L.stove_N ;
lin straight_A = L.straight_A ;
lin student_N = L.student_N ;
lin stupid_A = L.stupid_A ;
lin suck_V2 = L.suck_V2 ;
lin sun_N = L.sun_N ;
lin swell_V = L.swell_V ;
lin swim_V = L.swim_V ;
lin switch8off_V2 = L.switch8off_V2 ;
lin switch8on_V2 = L.switch8on_V2 ;
lin table_N = L.table_N ;
lin tail_N = L.tail_N ;
lin talk_V3 = L.talk_V3 ;
lin teach_V2 = L.teach_V2 ;
lin teacher_N = L.teacher_N ;
lin television_N = L.television_N ;
lin thick_A = L.thick_A ;
lin thin_A = L.thin_A ;
lin think_V = L.think_V ;
lin throw_V2 = L.throw_V2 ;
lin tie_V2 = L.tie_V2 ;
lin today_Adv = L.today_Adv ;
lin tongue_N = L.tongue_N ;
lin tooth_N = L.tooth_N ;
lin train_N = L.train_N ;
lin travel_V = L.travel_V ;
lin tree_N = L.tree_N ;
lin turn_V = L.turn_V ;
lin ugly_A = L.ugly_A ;
lin understand_V2 = L.understand_V2 ;
lin university_N = L.university_N ;
lin village_N = L.village_N ;
lin vomit_V = L.vomit_V ;
lin wait_V2 = L.wait_V2 ;
lin walk_V = L.walk_V ;
lin war_N = L.war_N ;
lin warm_A = L.warm_A ;
lin wash_V2 = L.wash_V2 ;
lin watch_V2 = L.watch_V2 ;
lin water_N = L.water_N ;
lin wet_A = L.wet_A ;
lin white_A = L.white_A ;
lin wide_A = L.wide_A ;
lin wife_N = L.wife_N ;
lin win_V2 = L.win_V2 ;
lin wind_N = L.wind_N ;
lin window_N = L.window_N ;
lin wine_N = L.wine_N ;
lin wing_N = L.wing_N ;
lin wipe_V2 = L.wipe_V2 ;
lin woman_N = L.woman_N ;
lin wonder_VQ = L.wonder_VQ ;
lin wood_N = L.wood_N ;
lin worm_N = L.worm_N ;
lin write_V2 = L.write_V2 ;
lin year_N = L.year_N ;
lin yellow_A = L.yellow_A ;
lin young_A = L.young_A ;
lin above_Prep = S.above_Prep ;
lin after_Prep = S.after_Prep ;
lin all_Predet = S.all_Predet ;
lin almost_AdA = S.almost_AdA ;
lin almost_AdN = S.almost_AdN ;
lin although_Subj = S.although_Subj ;
lin always_AdV = S.always_AdV ;
lin and_Conj = S.and_Conj ;
lin as_CAdv = S.as_CAdv ;
lin at_least_AdN = S.at_least_AdN ;
lin at_most_AdN = S.at_most_AdN ;
lin because_Subj = S.because_Subj ;
lin before_Prep = S.before_Prep ;
lin behind_Prep = S.behind_Prep ;
lin between_Prep = S.between_Prep ;
lin both7and_DConj = S.both7and_DConj ;
lin but_PConj = S.but_PConj ;
lin by8agent_Prep = S.by8agent_Prep ;
lin by8means_Prep = S.by8means_Prep ;
lin can8know_VV = S.can8know_VV ;
lin can_1_VV = S.can_VV ;
lin can_2_VV = S.can8know_VV ;
lin during_Prep = S.during_Prep ;
lin either7or_DConj = S.either7or_DConj ;
lin every_Det = S.every_Det ;
lin everybody_NP = S.everybody_NP ;
lin everything_NP = S.everything_NP ;
lin everywhere_Adv = S.everywhere_Adv ;
lin except_Prep = S.except_Prep ;
lin few_Det = S.few_Det ;
lin for_Prep = S.for_Prep ;
lin from_Prep = S.from_Prep ;
lin have_V2 = S.have_V2 ;
lin he_Pron = S.he_Pron ;
lin here7from_Adv = S.here7from_Adv ;
lin here7to_Adv = S.here7to_Adv ;
lin how8many_IDet = S.how8many_IDet ;
lin how8much_IAdv = S.how8much_IAdv ;
lin how_IAdv = S.how_IAdv ;
lin i_Pron = S.i_Pron ;
lin if_Subj = S.if_Subj ;
lin if_then_Conj = S.if_then_Conj ;
lin in8front_Prep = S.in8front_Prep ;
lin in_Prep = S.in_Prep ;
lin it_Pron = S.it_Pron ;
lin less_CAdv = S.less_CAdv ;
lin many_Det = S.many_Det ;
lin more_CAdv = S.more_CAdv ;
lin most_Predet = S.most_Predet ;
lin much_Det = S.much_Det ;
lin must_VV = S.must_VV ;
lin no_Quant = S.no_Quant ;
lin no_Utt = S.no_Utt ;
lin nobody_NP = S.nobody_NP ;
lin not_Predet = S.not_Predet ;
lin nothing_NP = S.nothing_NP ;
lin on_Prep = S.on_Prep ;
lin only_Predet = S.only_Predet ;
lin or_Conj = S.or_Conj ;
lin otherwise_PConj = S.otherwise_PConj ;
lin part_Prep = S.part_Prep ;
lin please_Voc = S.please_Voc ;
lin possess_Prep = S.possess_Prep ;
lin quite_Adv = S.quite_Adv ;
lin she_Pron = S.she_Pron ;
lin so_AdA = S.so_AdA ;
lin somePl_Det = S.somePl_Det ;
lin someSg_Det = S.someSg_Det ;
lin somebody_NP = S.somebody_NP ;
lin something_NP = S.something_NP ;
lin somewhere_Adv = S.somewhere_Adv ;
lin that_Quant = S.that_Quant ;
lin that_Subj = S.that_Subj ;
lin there7from_Adv = S.there7from_Adv ;
lin there7to_Adv = S.there7to_Adv ;
lin there_Adv = S.there_Adv ;
lin therefore_PConj = S.therefore_PConj ;
lin they_Pron = S.they_Pron ;
lin this_Quant = S.this_Quant ;
lin through_Prep = S.through_Prep ;
lin to_Prep = S.to_Prep ;
lin too_AdA = S.too_AdA ;
lin under_Prep = S.under_Prep ;
lin very_AdA = S.very_AdA ;
lin want_VV = S.want_VV ;
lin we_Pron = S.we_Pron ;
lin whatPl_IP = S.whatPl_IP ;
lin whatSg_IP = S.whatSg_IP ;
lin when_IAdv = S.when_IAdv ;
lin when_Subj = S.when_Subj ;
lin where_IAdv = S.where_IAdv ;
lin which_IQuant = S.which_IQuant ;
lin whoPl_IP = S.whoPl_IP ;
lin whoSg_IP = S.whoSg_IP ;
lin why_IAdv = S.why_IAdv ;
lin with_Prep = S.with_Prep ;
lin without_Prep = S.without_Prep ;
lin yes_Utt = S.yes_Utt ;
lin youPl_Pron = S.youPl_Pron ;
lin youPol_Pron = S.youPol_Pron ;
lin youSg_Pron = S.youSg_Pron ;
}

View File

@@ -0,0 +1,120 @@
--# -path=.:../abstract
concrete ExtensionsDut of Extensions =
CatDut ** open MorphoDut, ResDut, ParadigmsDut, SyntaxDut, (E = ExtraDut), (G = GrammarDut), Prelude in {
flags literal=Symb ; coding = utf8 ;
----lincat
---- VPI = E.VPI ;
---- ListVPI = E.ListVPI ;
---- VPS = E.VPS ;
---- ListVPS = E.ListVPS ;
--- lin
---- MkVPI = E.MkVPI ;
---- ConjVPI = E.ConjVPI ;
---- ComplVPIVV = E.ComplVPIVV ;
---- MkVPS = E.MkVPS ;
---- ConjVPS = E.ConjVPS ;
---- PredVPS = E.PredVPS ;
---- BaseVPI = E.BaseVPI ;
---- ConsVPI = E.ConsVPI ;
---- BaseVPS = E.BaseVPS ;
---- ConsVPS = E.ConsVPS ;
---- GenNP = E.GenNP ;
---- GenIP = E.GenIP ;
---- GenRP = E.GenRP ;
---- PassVPSlash = E.PassVPSlash ;
---- PassAgentVPSlash = E.PassAgentVPSlash ;
---- EmptyRelSlash = E.EmptyRelSlash ;
lin
{-
ComplVV v ant p vp =
let
vpi = infVP v.isAux vp
in
insertExtrapos vpi.p4 (
insertInfExt vpi.p3 (
insertInf vpi.p2 (
insertObj vpi.p1 (
predVGen v.isAux v)))) ;
PastPartRS ant pol sl = { -- guessed by KA, some fields in sl are ignored!!
s = \\gn => let agr = agrgP3 Masc (numGenNum gn)
in sl.s.s ! VPastPart APred ++
(sl.nn ! agr).p1 ++ (sl.nn ! agr).p2 ++ sl.a2;
c = Nom
} ;
PresPartRS ant pol vp = { -- guessed by KA!!
s = \\gn => let agr = agrgP3 Masc (numGenNum gn)
in vp.s.s ! VPresPart APred ++
(vp.nn ! agr).p1 ++ (vp.nn ! agr).p2;
c = Nom
} ;
-}
PredVPosv = G.PredVP;
PredVPovs = G.PredVP;
{-
CompoundCN noun cn = {
s = \\a,n,c => glue (noun.s ! Sg ! Nom) (cn.s ! a ! n ! c) ;
g = cn.g
} ;
-}
GerundN v = { -- parsing
s = \\n,c => v.s ! VInf False ; --- formalisieren, not formalisierung
g = Neutr
} ;
{-
GerundAP v = { -- beckoning
s = \\agr => v.s ! VPresPart ;
isPre = True
} ;
PastPartAP v = { -- broken
s = \\agr => v.s ! VPPart ;
isPre = True
} ;
OrdCompar a = {s = \\c => a.s ! AAdj Compar c } ; -- higher
PositAdVAdj a = {s = a.s ! AAdv} ; -- really
UseQuantPN q pn = {s = \\c => q.s ! False ! Sg ++ pn.s ! npcase2case c ; a = agrgP3 Sg pn.g} ; -- this London
SlashV2V v p vp = insertObjc (\\a => p.s ++ case p.p of {CPos => ""; _ => "niet"} ++ -- force not to sleep
v.c3 ++
infVP v.typ vp a)
(predVc v) ;
ComplPredVP np vp = { -- ?
s = \\t,a,b,o =>
let
verb = vp.s ! t ! a ! b ! o ! np.a ;
compl = vp.s2 ! np.a
in
case o of {
ODir => compl ++ "," ++ np.s ! npNom ++ verb.aux ++ verb.adv ++ vp.ad ++ verb.fin ++ verb.inf ;
OQuest => verb.aux ++ compl ++ "," ++ np.s ! npNom ++ verb.adv ++ vp.ad ++ verb.fin ++ verb.inf
}
} ;
-}
CompS s = {s = \\_ => "dat" ++ s.s ! Main} ; -- S -> Comp
CompVP ant p vp = {s = \\_ => useInfVP True vp} ; -- VP -> Comp
lin
that_RP = which_RP ;
---- UttAdV adv = adv;
}

View File

@@ -90,7 +90,7 @@ lin
UseQuantPN q pn = {s = \\c => q.s ! False ! Sg ++ pn.s ! npcase2case c ; a = agrgP3 Sg pn.g} ; -- this London
SlashV2V v p vp = insertObjc (\\a => p.s ++ case p.p of {CPos => ""; _ => "not"} ++ -- force not to sleep
SlashV2V v p vp = insertObjc (\\a => p.s ++ case p.p of {CPos => ""; _ => "nicht"} ++ -- force not to sleep
v.c3 ++
infVP v.typ vp a)
(predVc v) ;
@@ -107,7 +107,7 @@ lin
}
} ;
-}
CompS s = {s = \\_ => "that" ++ s.s ! Main} ; -- S -> Comp
CompS s = {s = \\_ => "dass" ++ s.s ! Main} ; -- S -> Comp
CompVP ant p vp = {s = \\_ => useInfVP True vp} ; -- VP -> Comp
lin

View File

@@ -0,0 +1,34 @@
--# -path=.:../chunk:alltenses
concrete TranslateDut of Translate =
TenseX,
NounDut - [PPartNP],
AdjectiveDut,
NumeralDut,
SymbolDut [
PN, Symb, String, CN, Card, NP, MkSymb, SymbPN, CNNumNP
],
ConjunctionDut,
VerbDut - [
UseCopula,
PassV2
],
AdverbDut,
PhraseDut,
SentenceDut,
QuestionDut,
RelativeDut,
IdiomDut,
---- ConstructionDut,
---- DocumentationDut,
ChunkDut,
ExtensionsDut [CompoundCN,AdAdV,UttAdV,ApposNP,MkVPI, MkVPS, PredVPS, PassVPSlash, PassAgentVPSlash],
DictionaryDut **
open MorphoDut, ResDut, ParadigmsDut, SyntaxDut, (E = ExtraDut), Prelude in {
flags
literal=Symb ;
}

View File

@@ -0,0 +1,227 @@
Steps for Extending RGL to a Large Scale Translation Grammar
We will add Dutch to the system of big translation grammars.
=The Translate grammar=
This is where we are
$ pwd
/Users/aarne/GF/lib/src/translator
We start from files for German
$ ls -l *Ger.gf
-rw-r--r-- 1 aarne staff 1615550 Apr 10 23:38 DictionaryGer.gf
-rw-r--r-- 1 aarne staff 3042 Jan 22 15:39 ExtensionsGer.gf
-rw-r--r-- 1 aarne staff 662 Apr 9 11:14 TranslateGer.gf
We make copies of these ones
$ cp -p ExtensionsGer.gf ExtensionsDut.gf
$ cp -p TranslateGer.gf TranslateDut.gf
Then we change Ger->Dut in these files
We take the common parts of a dictionary ; Ger doesn't have them this way but Spa does
$ grep "L\." DictionarySpa.gf >DictionaryDut.gf
$ grep "S\." DictionarySpa.gf >>DictionaryDut.gf
Then we add a header, copying from DictionarySpa and changing Spa->Dut. And of course a "}" to the end!
concrete DictionarySpa of Dictionary = CatSpa
** open ParadigmsSpa, MorphoSpa, IrregSpa, (L=LexiconSpa), (S=StructuralSpa), Prelude in {
We can now try compile this, using -s to suppress 60k warnings about missing linearizations:
$ gf -s DictionaryDut.gf
This goes fine - but what about the translator itself?
$ gf -s TranslateDut.gf
File TenseDut.gf does not exist.
Just change it to TenseX as in many other languages, as Dutch has no special tenses. Try again (in GF shell):
> i TranslateDut.gf
File ConstructionDut.gf does not exist.
Let us just comment this inheritance out from TranslateDut, like in some other languages where
this module is not yet available. The same with DocumentationDut.
---- ConstructionDut,
---- DocumentationDut,
I use four dashes for comments meaning "to be fixed soon". Try again:
> i TranslateDut.gf
File ChunkDut.gf does not exist.
This is more critical, since we want a robust translator! Let's fix this:
$ cd ../chunk/
$ cp -p ChunkGer.gf ChunkDut.gf
$ cd ../translator/
Again, go to ChunkDut.gf and change Ger->Dut. Also look for double quotes and change strings in them. E.g.
copula_inf_Chunk = ss "sein" --> copula_inf_Chunk = ss "zijn"
Now try again (in GF):
> i TranslateDut.gf
Warning: In inherited module Extensions,
...
no occurrence of element BaseVPI
Now we notice that ExtraDut is just a dummy module. We comment out all references to it in ExtensionsDut; of course we
will fix ExtraDut later. E.g.
---- BaseVPI = E.BaseVPI ;
We could continue commenting out things that don't compile. We could just give up and comment out ExtensionsDut from TranslateDut.
It doesn't use many functions anyway...
---- ExtensionsDut [CompoundCN,AdAdV,UttAdV,ApposNP,MkVPI, MkVPS, PredVPS, PassVPSlash, PassAgentVPSlash],
Unfortunately, ChunkDut also needs it. So let's at least make it compile by commenting out all offensive functions.
There is not much left, and in ChunkDut we also comment out whatever the compiler complains about, with four dashes.
We obtain
concrete ChunkDut of Chunk = CatDut
---- , ExtensionsDut
**
ChunkFunctor - [UseVC, VPS_Chunk, emptyNP, VPI_Chunk]
with (Syntax = SyntaxDut), (Extensions = ExtensionsDut)
**
open
SyntaxDut, (E = ExtensionsDut), Prelude,
ResDut, (P = ParadigmsDut) in {
Et voilà:
> i TranslateDut.gf
linking ... OK
Languages: TranslateDut
Let us try it:
> gr | l -treebank
Translate: ChunkPhr (PlusChunk fullstop_Chunk (OneChunk refl_SgP1_Chunk))
TranslateDut: * . mij zelf
Let us make it compilable in GF/lib/src/Makefile by adding entries for TranslateDut and Translate11 - since we now have 11 languages.
Again, we can look for TranslateGer and make a copy beside it, as well as Translate10:
TranslateGer: TranslateGer.pgf
TranslateDut: TranslateDut.pgf
TranslateDut.pgf:: ; $(GFMKT) -name=TranslateDut translator/TranslateDut.gf
# Without dependencies:
Translate11:
$(GFMKT) -name=Translate11 $(TRANSLATE11) +RTS -K32M
# With dependencies:
Translate11.pgf: $(TRANSLATE10)
$(GFMKT) -name=Translate11 $(TRANSLATE11) +RTS -K32M
Since we have everything up to date in Translate10, let us just add the necessary new things to include Dut:
$ pwd
/Users/aarne/GF/lib/src
$ make TranslateDut.pgf
$ make Translate11
We can first try it in the plain C runtime:
$ pgf-translate Translate11.pgf Phr TranslateEng TranslateDut
> what is this
0.07 sec
[18.070923] ChunkPhr (OneChunk (QS_Chunk (UseQCl (TTAnt TPres ASimul) PPos (QuestIComp (CompIP whatSg_IP)
(DetNP (DetQuant this_Quant NumSg))))))
* wat is dit
wat is dit
> can we translate now
0.19 sec
[35.258053] ChunkPhr (OneChunk (QS_Chunk (UseQCl (TTAnt TPres ASimul) PPos (QuestCl (PredVP (UsePron we_Pron)
(AdvVP (ComplVV can_1_VV (UseV translate_V)) now_Adv))))))
* kunnen we nu [translate_V]
kunnen we nu [translate_V]
What about the web application?
First make the new grammar accessible:
cd GF/src/www/robust/
$ ls
App10.pgf Translate10.pgf Translate8.pgf
$ ln -s /Users/aarne/GF/lib/src/Translate11.pgf
Then update the reference to this grammar - change Translate10 to Translate11 in one place:
$ cd ..
$ grep Translate10 */*.js
js/gftranslate.js:gftranslate.jsonurl="/robust/Translate10.pgf"
Try start the gf server
gf -server --document-root=/Users/aarne/GF/src/www/
Point your browser to http://localhost:41296/wc.html
Wait a bit, and you will see Dutch among the available languages!
=Building the Android app=
Navigate to the App directory and create AppDut; also change Ger->Dut as before
$ pwd
/Users/aarne/GF/examples/app
$ cp -p AppGer.gf AppDut.gf
Extend the Makefile as before:
TRANSLATE11=$(TRANSLATE10) AppDut.pgf
# Without dependencies:
App11:
$(GFMKT) -name=App11 $(TRANSLATE11) +RTS -K200M
Make it:
$ make AppDut.pgf
$ make App11
Check that all languages are consistently included:
$ gf +RTS -K200M App11.pgf
Languages: AppBul AppChi AppDut AppEng AppFin AppFre AppGer AppHin AppIta AppSpa AppSwe
App> l house_N
къща
房 子
huis
house
talo
maison
Haus
शाला
casa
casa
hus
Now follow the instructions in README in the app/ directory.
You also need to add to Translator.java, in a place near AppGer reference,
new Language("nl-NL", "Dutch", "AppDut", R.xml.qwerty),