From 6147c1211c9b9fd6b541d92d93c2d90a8146f113 Mon Sep 17 00:00:00 2001 From: aarne Date: Mon, 9 Nov 2015 10:43:24 +0000 Subject: [PATCH] started Estonian phrasebook modules to test AppEst --- examples/phrasebook/GreetingsEst.gf | 32 +++ examples/phrasebook/Makefile | 2 +- examples/phrasebook/PhrasebookEst.gf | 9 + examples/phrasebook/SentencesEst.gf | 62 +++++ examples/phrasebook/WordsEst.gf | 339 +++++++++++++++++++++++++++ 5 files changed, 443 insertions(+), 1 deletion(-) create mode 100644 examples/phrasebook/GreetingsEst.gf create mode 100644 examples/phrasebook/PhrasebookEst.gf create mode 100644 examples/phrasebook/SentencesEst.gf create mode 100644 examples/phrasebook/WordsEst.gf diff --git a/examples/phrasebook/GreetingsEst.gf b/examples/phrasebook/GreetingsEst.gf new file mode 100644 index 000000000..69648be58 --- /dev/null +++ b/examples/phrasebook/GreetingsEst.gf @@ -0,0 +1,32 @@ +--# -coding=latin1 +concrete GreetingsEst of Greetings = SentencesEst [Greeting,mkGreeting] ** open Prelude in { + +---- TODO: real Estonian + +lin + GBye = mkGreeting "hei hei" ; + GCheers = mkGreeting "terveydeksi" ; + GDamn = mkGreeting "hitto" ; + GExcuse, GExcusePol = mkGreeting "anteeksi" ; + GGoodDay = mkGreeting "hyvää päivää" ; + GGoodEvening = mkGreeting "hyvää iltaa" ; + GGoodMorning = mkGreeting "hyvää huomenta" ; + GGoodNight = mkGreeting "hyvää yötä" ; + GGoodbye = mkGreeting "näkemiin" ; + GHello = mkGreeting "hei" ; + GHelp = mkGreeting "apua" ; + GHowAreYou = mkGreeting "mitä kuuluu" ; + GLookOut = mkGreeting "varo" ; + GNiceToMeetYou = mkGreeting "hauska tutustua" ; + GPleaseGive = mkGreeting "ole hyvä" ; + GPleaseGivePol = mkGreeting "olkaa hyvä" ; + GSeeYouSoon = mkGreeting "nähdään pian" ; + GSorry, GSorryPol = mkGreeting "anteeksi" ; + GThanks = mkGreeting "kiitos" ; + GTheCheck = mkGreeting "lasku" ; + GCongratulations = mkGreeting "onnittelut"; + GHappyBirthday = mkGreeting "hyvää syntymäpäivää" ; + GGoodLuck = mkGreeting "onnea" ; + GWhatTime = mkGreeting "paljonko kello on" | mkGreeting "mitä kello on" ; + +} diff --git a/examples/phrasebook/Makefile b/examples/phrasebook/Makefile index cb8e488fa..589737517 100644 --- a/examples/phrasebook/Makefile +++ b/examples/phrasebook/Makefile @@ -1,7 +1,7 @@ compile = runghc Compile forApp: - $(compile) -opt Bul Cat Chi Dut Eng Fin Fre Ger Hin Ita Jpn Spa Swe Tha + $(compile) -opt Bul Cat Chi Dut Eng Est Fin Fre Ger Hin Ita Jpn Spa Swe Tha make gfos .PHONY: gfos diff --git a/examples/phrasebook/PhrasebookEst.gf b/examples/phrasebook/PhrasebookEst.gf new file mode 100644 index 000000000..687cf1b45 --- /dev/null +++ b/examples/phrasebook/PhrasebookEst.gf @@ -0,0 +1,9 @@ +--# -path=.:present + +concrete PhrasebookEst of Phrasebook = + GreetingsEst, + WordsEst ** open + SyntaxEst, + Prelude in { + +} diff --git a/examples/phrasebook/SentencesEst.gf b/examples/phrasebook/SentencesEst.gf new file mode 100644 index 000000000..735f0376f --- /dev/null +++ b/examples/phrasebook/SentencesEst.gf @@ -0,0 +1,62 @@ +--# -coding=latin1 +concrete SentencesEst of Sentences = NumeralEst ** SentencesI + +{- ---- TODO functor exceptions + - [Is, IsMass, NameNN, ObjMass, + IFemale, YouFamFemale, YouPolFemale, IMale, YouFamMale, YouPolMale, + WeMale, WeFemale, YouPlurFamMale, YouPlurFamFemale, YouPlurPolFemale, YouPlurPolMale, + NPPlace, CNPlace, placeNP, mkCNPlace, mkCNPlacePl, + GObjectPlease, + NPNationality, mkNPNationality, + Country, PCountry + ] +-} + + +with + (Syntax = SyntaxEst), + (Symbolic = SymbolicEst), + (Lexicon = LexiconEst) ** + open SyntaxEst, ExtraEst, (P = ParadigmsEst), (V = VerbEst), Prelude in { + +{- ---- TODO: functor exceptions for Est + + lincat + Country = {np : NP ; isExternal : Bool} ; + lin + PCountry x = mkPhrase (mkUtt x.np) ; + oper + NPNationality = {lang : NP ; prop : A ; country : {np : NP ; isExternal : Bool}} ; + NPPlace = {name : NP ; at : Adv ; to : Adv ; from : Adv} ; + CNPlace = {name : CN ; isExternal : Bool ; isPl : Bool} ; + + placeNP : Det -> CNPlace -> NPPlace = \det,kind -> + let name : NP = mkNP det kind.name in { + name = name ; + at = mkAdv (P.casePrep (if_then_else P.Case kind.isExternal P.adessive P.inessive)) name ; + to = mkAdv (P.casePrep (if_then_else P.Case kind.isExternal P.allative P.illative)) name ; + from = mkAdv (P.casePrep (if_then_else P.Case kind.isExternal P.ablative P.elative)) name + } ; + + lin + Is item prop = mkCl item (V.UseComp (CompPartAP prop)) ; -- tämä pizza on herkullista + IsMass mass prop = mkCl (mkNP a_Det mass) (V.UseComp (CompPartAP prop)) ; -- pizza on herkullista + NameNN = mkNP (P.mkPN (P.mkN "NN" "NN:iä")) ; + + IMale, IFemale = + {name = mkNP (ProDrop i_Pron) ; isPron = True ; poss = ProDropPoss i_Pron} ; + YouFamMale, YouFamFemale = + {name = mkNP (ProDrop youSg_Pron) ; isPron = True ; poss = ProDropPoss youSg_Pron} ; + YouPolMale, YouPolFemale = + {name = mkNP (ProDrop youPol_Pron) ; isPron = True ; poss = ProDropPoss youPol_Pron} ; + WeMale, WeFemale = + {name = mkNP (ProDrop we_Pron) ; isPron = True ; poss = ProDropPoss we_Pron} ; + YouPlurFamMale, YouPlurFamFemale, YouPlurPolMale, YouPlurPolFemale = + {name = mkNP (ProDrop youPl_Pron) ; isPron = True ; poss = ProDropPoss youPl_Pron} ; + + ObjMass = PartCN ; + + GObjectPlease o = lin Text (mkPhr noPConj (mkUtt o) (lin Voc (ss "kiitos"))) ; +-} + + } diff --git a/examples/phrasebook/WordsEst.gf b/examples/phrasebook/WordsEst.gf new file mode 100644 index 000000000..0ff86a967 --- /dev/null +++ b/examples/phrasebook/WordsEst.gf @@ -0,0 +1,339 @@ +-- (c) 2010-2015 Aarne Ranta under LGPL +--# -coding=latin1 + +concrete WordsEst of Words = SentencesEst ** + open + SyntaxEst, ParadigmsEst, (L = LexiconEst), + Prelude, (E = ExtraEst) in { + + flags optimize = noexpand ; + + lin + +---- TODO most Est words + +-- kinds + + Apple = mkCN L.apple_N ; + Beer = mkCN L.beer_N ; + Bread = mkCN L.bread_N ; +---- Cheese = mkCN (mkN "juusto") ; +---- Chicken = mkCN (mkN "kana") ; +---- Coffee = mkCN (mkN "kahvi") ; + Fish = mkCN L.fish_N ; +---- Meat = mkCN (mkN "liha") ; + Milk = mkCN L.milk_N ; +---- Pizza = mkCN (mkN "pizza") ; + Salt = mkCN L.salt_N ; +---- Tea = mkCN (mkN "tee") ; + Water = mkCN L.water_N ; + Wine = mkCN L.wine_N ; + +-- qualities + + Bad = L.bad_A ; +---- Boring = mkA "tylsä" ; +---- Cheap = mkA "halpa" ; + Cold = L.cold_A ; +---- Delicious = mkA "herkullinen" ; +---- Expensive = mkA "kallis" ; +---- Fresh = mkA "tuore" ; + Good = L.good_A ; +---- Suspect = mkA "epäilyttävä" ; + Warm = L.warm_A ; + +{- ---- TODO: everything below this + +-- places + + Restaurant = mkPlace (mkN "ravintola") ssa ; + Bank = mkPlace (mkN "pankki") ssa ; + PostOffice = mkPlace (mkN "posti") ssa ; + Bar = mkPlace (mkN "baari") ssa ; + Toilet = mkPlace (mkN "vessa") ssa ; + Museum = mkPlace (mkN "museo") ssa ; + Airport = mkPlace (mkN "lento" (mkN "kenttä")) lla ; + Station = mkPlace (mkN "asema") lla ; + Hospital = mkPlace (mkN "sairaala") ssa ; + Church = mkPlace (mkN "kirkko") ssa ; + Cinema = mkPlace (mkN "elokuva" (mkN "teatteri")) ssa ; + Theatre = mkPlace (mkN "teatteri") ssa ; + Shop = mkPlace (mkN "kauppa") ssa ; + Park = mkPlace (mkN "puisto") ssa ; + Hotel = mkPlace (mkN "hotelli") ssa ; + University = mkPlace (mkN "yliopisto") lla ; + School = mkPlace (mkN "koulu") lla ; + + CitRestaurant cit = { + name = mkCN cit (mkN "ravintola") ; isExternal = False ; isPl = False + } ; + Parking = mkPlace (mkN "pysäköinti" (mkN "alue")) lla ; + Supermarket = mkPlace (mkN "supermarket") ssa ; + Pharmacy = mkPlace (mkN "apteekki") ssa ; + Center = mkPlace (mkN "keskusta") ssa ; + Cafeteria = mkPlace (mkN "kahvila") ssa ; + Disco = mkPlace (mkN "disko") ssa ; + Pub = mkPlace (mkN "pub") ssa ; + AmusementPark = mkPlace (mkN "huvi" (mkN "puisto")) ssa ; + Zoo = mkPlace (mkN "eläin" (mkN "tarha")) ssa ; + +-- currencies + + DanishCrown = mkCN (mkN "Tanskan kruunu") | mkCN (mkN "kruunu") ; + Dollar = mkCN (mkN "dollari") ; + Euro = mkCN (mkN "euro") ; + Lei = mkCN (mkN "lei") ; + Leva = mkCN (mkN "leva") ; + NorwegianCrown = mkCN (mkN "Norjan kruunu") | mkCN (mkN "kruunu") ; + Pound = mkCN (mkN "punta") ; + Rouble = mkCN (mkN "rupla") ; + SwedishCrown = mkCN (mkN "Ruotsin kruunu") | mkCN (mkN "kruunu") ; + Zloty = mkCN (mkN "zloty" "zlotyja") ; + +-- nationalities + + Belgian = mkA "belgialainen" ; + Belgium = {np = mkNP (mkPN "Belgia") ; isExternal = False} ; + Bulgarian = mkNat (mkPN "bulgaria") (mkPN "Bulgaria") (mkA "bulgarialainen") ; + Catalan = mkNat (mkPN "katalaani") (mkPN "Katalonia") (mkA "katalonialainen") ; + Danish = mkNat (mkPN "tanska") (mkPN "Tanska") (mkA "tanskalainen") ; + Dutch = mkNat (mkPN "hollanti") (mkPN "Hollanti") (mkA "hollantilainen") ; + English = mkNat (mkPN "englanti") (mkPN "Englanti") (mkA "englantilainen") ; + Finnish = + mkNat (mkPN (mkN "suomi" "suomia")) (mkPN (mkN "Suomi" "Suomia")) + (mkA "suomalainen") ; + Flemish = mkNP (mkPN "flaami") ; + French = mkNat (mkPN "ranska") (mkPN "Ranska") (mkA "ranskalainen") ; + German = mkNat (mkPN "saksa") (mkPN "Saksa") (mkA "saksalainen") ; + Italian = mkNat (mkPN "italia") (mkPN "Italia") (mkA "italialainen") ; + Norwegian = mkNat (mkPN "norja") (mkPN "Norja") (mkA "norjalainen") ; + Polish = mkNat (mkPN "puola") (mkPN "Puola") (mkA "puolalainen") ; + Romanian = mkNat (mkPN "romania") (mkPN "Romania") (mkA "romanialainen") ; + Russian = mkNatExternal (mkPN "venäjä") (mkPN "Venäjä") (mkA "venäläinen") ; + Spanish = mkNat (mkPN "espanja") (mkPN "Espanja") (mkA "espanjalainen") ; + Swedish = mkNat (mkPN "ruotsi") (mkPN "Ruotsi") (mkA "ruotsalainen") ; + + ---- it would be nice to have a capitalization Predef function + +-- means of transportation + + Bike = mkTransport L.bike_N ; + Bus = mkTransport (mkN "bussi") ; + Car = mkTransport L.car_N ; + Ferry = mkTransport (mkN "lautta") ; + Plane = mkTransport L.airplane_N ; + Subway = mkTransport (mkN "metro") ; + Taxi = mkTransport (mkN "taksi") ; + Train = mkTransport L.train_N ; + Tram = mkTransport (mkN "raitiovaunu") ; + + ByFoot = ParadigmsEst.mkAdv "jalkaisin" ; + + +-- actions + + AHasAge p num = mkCl p.name (mkNP num L.year_N) ; + AHasChildren p num = mkCl p.name have_V2 (mkNP num L.child_N) ; + AHasName p name = mkCl (nameOf p) name ; + AHasRoom p = haveForPerson p.name (mkCN (mkN "huone")) ; + AHasTable p = haveForPerson p.name (mkCN (mkN "pöytä")) ; + AHungry p = E.AdvExistNP (SyntaxEst.mkAdv on_Prep p.name) (mkNP (mkN "nälkä")) ; + AIll p = mkCl p.name (mkA "sairas") ; + AKnow p = mkCl p.name (mkV "tietää") ; + ALike p item = mkCl p.name L.like_V2 item ; + ALive p co = mkCl p.name (mkVP (mkVP (mkV "asua")) (SyntaxEst.mkAdv (casePrep (if_then_else Case co.isExternal adessive inessive)) co.np)) ; + ALove p q = mkCl p.name (mkV2 (mkV "rakastaa") partitive) q.name ; + AMarried p = mkCl p.name (ParadigmsEst.mkAdv "naimisissa") ; + AReady p = mkCl p.name (ParadigmsEst.mkA "valmis") ; + AScared p = mkCl p.name (caseV partitive (mkV "pelottaa")) ; + ASpeak p lang = mkCl p.name (mkV2 (mkV "puhua") partitive) lang ; + AThirsty p = E.AdvExistNP (SyntaxEst.mkAdv on_Prep p.name) (mkNP (mkN "jano")) ; + ATired p = mkCl p.name (caseV partitive (mkV "väsyttää")) ; + AUnderstand p = mkCl p.name (mkV "ymmärtää") ; + AWant p obj = mkCl p.name (mkV2 "haluta") obj ; + AWantGo p place = mkCl p.name want_VV (mkVP (mkVP L.go_V) place.to) ; + +-- miscellaneous + + QWhatName p = mkQS (mkQCl whatSg_IP (mkVP (nameOf p))) ; + QWhatAge p = mkQS (mkQCl (E.ICompAP (mkAP L.old_A)) p.name) ; + HowMuchCost item = mkQS (mkQCl how8much_IAdv (mkCl item (mkV "maksaa"))) ; + ItCost item price = mkCl item (mkV2 (mkV "maksaa")) price ; + + PropOpen p = mkCl p.name open_Adv ; + PropClosed p = mkCl p.name closed_Adv ; + PropOpenDate p d = mkCl p.name (mkVP (mkVP open_Adv) d) ; + PropClosedDate p d = mkCl p.name (mkVP (mkVP closed_Adv) d) ; + PropOpenDay p d = mkCl p.name (mkVP (mkVP open_Adv) d.habitual) ; + PropClosedDay p d = mkCl p.name (mkVP (mkVP closed_Adv) d.habitual) ; + + +-- Building phrases from strings is complicated: the solution is to use +-- mkText : Text -> Text -> Text ; + + PSeeYouDate d = mkText (lin Text (ss ("nähdään"))) (mkPhrase (mkUtt d)) ; + PSeeYouPlace p = mkText (lin Text (ss ("nähdään"))) (mkPhrase (mkUtt p.at)) ; + PSeeYouPlaceDate p d = + mkText (lin Text (ss ("nähdään"))) + (mkText (mkPhrase (mkUtt p.at)) (mkPhrase (mkUtt d))) ; + +-- Relations are expressed as "my wife" or "my son's wife", as defined by $xOf$ +-- below. Languages without productive genitives must use an equivalent of +-- "the wife of my son" for non-pronouns. + + Wife = xOf sing (mkN "vaimo") ; + Husband = xOf sing L.man_N ; + Son = xOf sing L.boy_N ; + Daughter = xOf sing (mkN "tytär") ; + Children = xOf plur L.child_N ; + +-- week days + + Monday = let d = "maanantai" in mkDay (mkPN d) (d + "sin") ; + Tuesday = let d = "tiistai" in mkDay (mkPN d) (d + "sin") ; + Wednesday = let d = "keskiviikko" in mkDay (mkPN d) (d + "isin") ; + Thursday = let d = "torstai" in mkDay (mkPN d) (d + "sin") ; + Friday = let d = "perjantai" in mkDay (mkPN d) (d + "sin") ; + Saturday = let d = "lauantai" in mkDay (mkPN d) (d + "sin") ; + Sunday = let d = "sunnuntai" in mkDay (mkPN d) (d + "sin") ; + + Tomorrow = ParadigmsEst.mkAdv "huomenna" ; + +-- transports + + HowFar place = mkQS (mkQCl far_IAdv place.name) ; + HowFarFrom x y = + mkQS (mkQCl far_IAdv (mkCl y.name x.from)) ; + HowFarFromBy x y t = + mkQS (mkQCl far_IAdv (mkCl y.name + (mkVP (mkVP x.from) t))) ; + HowFarBy place t = + mkQS (mkQCl far_IAdv (mkCl place.name t)) ; + -- mkQS (mkQCl (mkIAdv far_IAdv t) y.name) ; + + WhichTranspPlace trans place = + mkQS (mkQCl (mkIP which_IDet trans.name) (mkVP (mkVP L.go_V) place.to)) ; + + IsTranspPlace trans place = + mkQS (mkQCl (mkCl (mkVP (mkVP (mkVP (mkV "päästä")) place.to) trans.by))) ; + -- pääseekö keskustaan bussilla + -- mkQS (mkQCl (E.AdvPredNP place.to L.go_V (E.PartCN (trans.name)))) ; + -- meneekö keskustaan bussia + +-- modifiers of places + + TheBest = mkSuperl L.good_A ; + TheClosest = mkSuperl (mkA (mkN "läheinen") "lähempi" "lähin") ; + TheCheapest = mkSuperl (mkA (mkN "halpa") "halvempi" "halvin") ; + TheMostExpensive = mkSuperl (mkA (mkN "kallis") "kalliimpi" "kallein") ; + TheMostPopular = mkSuperl (mkA "suosittu") ; + TheWorst = mkSuperl (mkA "huono") ; + + SuperlPlace sup p = placeNP sup p ; + + oper + mkNat : PN -> PN -> A -> + {lang : NP ; prop : A ; country : {np : NP ; isExternal : Bool}} = \nat,co,pro -> + {lang = mkNP nat ; + prop = pro ; + country = {np = mkNP co ; isExternal = False} + } ; + + mkNatExternal : PN -> PN -> A -> + {lang : NP ; prop : A ; country : {np : NP ; isExternal : Bool}} = \nat,co,pro -> + {lang = mkNP nat ; + prop = pro ; + country = {np = mkNP co ; isExternal = True} + } ; + + ---- using overloaded paradigms slows down compilation dramatically + mkDay : PN -> Str -> {name : NP ; point : Adv ; habitual : Adv} = \d,s -> + let day = mkNP d in + {name = day ; + point = SyntaxEst.mkAdv (casePrep essive) day ; + habitual = ParadigmsEst.mkAdv s + } ; + + mkPlace : N -> Bool -> {name : CN ; isExternal : Bool ; isPl : Bool} = \p,e -> { + name = mkCN p ; + isExternal = e ; + isPl = False + } ; + ssa = False ; + lla = True ; + + xOf : GNumber -> N -> NPPerson -> NPPerson = \n,x,p -> + relativePerson n (mkCN x) (\a,b,c -> mkNP (E.GenNP b) a c) p ; + + nameOf : NPPerson -> NP = \p -> (xOf sing L.name_N p).name ; + + oper + -- do you have a table for five persons + haveForPerson : NP -> CN -> Card -> Cl = \p,a,n -> + mkCl p have_V2 +---- (mkNP (E.PartCN a) ---- partitive works in questions ) + (mkNP (mkNP a_Det a) + (SyntaxEst.mkAdv for_Prep (mkNP n (mkN "henki" "henkiä")))) ; +---- (SyntaxEst.mkAdv for_Prep (mkNP (mkDet n)))) ; -- 60s faster compile 25/10/2010 + + open_Adv = ParadigmsEst.mkAdv "avoinna" ; + closed_Adv = ParadigmsEst.mkAdv "kiinni" ; + + mkTransport : N -> {name : CN ; by : Adv} = \n -> { + name = mkCN n ; + by = SyntaxEst.mkAdv (casePrep adessive) (mkNP n) + } ; + + mkSuperl : A -> Det = \a -> SyntaxEst.mkDet the_Quant (mkOrd a) ; + + far_IAdv = E.IAdvAdv L.far_Adv ; + +-------------------------------------------------- +-- New 30/11/2011 AR +-------------------------------------------------- + + lin + Thai = mkNat (mkPN "thai") (mkPN "Thaimaa") (mkA "thaimaalainen") ; + Baht = mkCN (mkN "baht" "bahteja") ; + + Rice = mkCN (mkN "riisi") ; + Pork = mkCN (mkN "sika") ; + Beef = mkCN (mkN "nauta") ; + Egg = mkCN L.egg_N ; + Noodles = mkCN (mkN "nuudeli" "nuudeleita") ; + Shrimps = mkCN (mkN "katka" (mkN "rapu")) ; + Chili = mkCN (mkN "chili") ; + Garlic = mkCN (mkN "valko" (mkN "sipuli")) ; + Durian = mkCN (mkN "durian" "durianeja") ; + Mango = mkCN (mkN "mango" "mangoja") ; + Pineapple = mkCN (mkN "ananas" "ananaksia") ; + Coke = mkCN (mkN "coca-cola") ; + IceCream = mkCN (mkN "jäätelö" "jäätelöitä") ; + Salad = mkCN (mkN "salaatti") ; + OrangeJuice = mkCN (mkN "appelsiini" (mkN "mehu")) ; + Lemonade = mkCN (mkN "limsa") ; + + Beach = mkPlace (mkN "uima" (mkN "ranta")) lla ; + + ItsRaining = mkCl (mkVP L.rain_V0) ; + ItsCold = mkCl (mkVP L.cold_A) ; + ItsWarm = mkCl (mkVP L.warm_A) ; + ItsWindy = mkCl (mkVP (mkV "tuulla")) ; + SunShine = mkCl (mkNP the_Det L.sun_N) (mkVP (mkV "paistaa")) ; + + Smoke = mkVP (mkV "tupakoida") ; + + ADoctor = mkProfession (mkN "lääkäri" "lääkäreitä") ; + AProfessor = mkProfession (mkN "professori" "professoreita") ; + ALawyer = mkProfession (mkN "laki" L.man_N) ; + AEngineer = mkProfession (mkN "insinööri" "insinöörejä") ; + ATeacher = mkProfession (mkN "opettaja" "opettajia") ; + ACook = mkProfession (mkN "kokki") ; + AStudent = mkProfession (mkN "opiskelija" "opiskelijoita") ; + ABusinessman = mkProfession (mkN "liike" L.man_N) ; + + oper + mkProfession : N -> NPPerson -> Cl = \n,p -> mkCl p.name n ; +-} + +}