From 3ff870dcd652b793f359a661112f4af3ccd0bedd Mon Sep 17 00:00:00 2001 From: aarne Date: Wed, 24 Mar 2010 08:18:54 +0000 Subject: [PATCH] politeness and disambiguation in Phrasebook (not visible yet) --- examples/phrasebook/Greetings.gf | 1 - examples/phrasebook/GreetingsEng.gf | 4 +- examples/phrasebook/GreetingsFre.gf | 57 +++++++++++----------- examples/phrasebook/Phrasebook.gf | 8 ++- examples/phrasebook/PhrasebookDisambEng.gf | 20 ++++++++ examples/phrasebook/PhrasebookEng.gf | 13 +++-- examples/phrasebook/PhrasebookFre.gf | 16 ++++-- examples/phrasebook/Roles.gf | 34 +++++++++++++ 8 files changed, 115 insertions(+), 38 deletions(-) create mode 100644 examples/phrasebook/PhrasebookDisambEng.gf create mode 100644 examples/phrasebook/Roles.gf diff --git a/examples/phrasebook/Greetings.gf b/examples/phrasebook/Greetings.gf index de7c6f064..11d0f9cc1 100644 --- a/examples/phrasebook/Greetings.gf +++ b/examples/phrasebook/Greetings.gf @@ -2,7 +2,6 @@ abstract Greetings = { cat Greeting ; - Politeness ; fun GHello : Greeting ; diff --git a/examples/phrasebook/GreetingsEng.gf b/examples/phrasebook/GreetingsEng.gf index 6ed3ff947..5f3cc23e7 100644 --- a/examples/phrasebook/GreetingsEng.gf +++ b/examples/phrasebook/GreetingsEng.gf @@ -1,7 +1,7 @@ -concrete GreetingsEng of Greetings = open Prelude in { +concrete GreetingsEng of Greetings = open Roles, Prelude in { lincat - Greeting, Politeness = SS ; + Greeting = SS ; lin GHello = ss "hello" ; diff --git a/examples/phrasebook/GreetingsFre.gf b/examples/phrasebook/GreetingsFre.gf index 1db9f6080..32f422f3c 100644 --- a/examples/phrasebook/GreetingsFre.gf +++ b/examples/phrasebook/GreetingsFre.gf @@ -1,38 +1,39 @@ -concrete GreetingsFre of Greetings = open Prelude in { +concrete GreetingsFre of Greetings = open Roles,Prelude in { flags coding = utf8 ; lincat - Greeting, Politeness = SS ; + Greeting = RolePhrase ; lin - GHello = ss "salut" ; - GThanks = ss "merci" ; - GHowAreYou = ss "comment ça va" ; - GPleaseGive = ss "s'il vous plaît" ; ---- politeness - GExcuse = ss "excusez-moi" ; - GSorry = ss "pardon" ; - GGoodbye = ss "au revoir" ; - GBye = ss "au revoir" ; - GWhatsYourName = ss "comment vous appelez-vous" ; ---- politeness - GNiceToMeetYou = ss "enchanté" ; ---- gender - GSeeYouSoon = ss "à bientôt" ; - GHelp = ss "au secours" ; - GLookOut = ss "attention" ; - GGoodMorning = ss "bonjour" ; - GGoodDay = ss "bonjour" ; - GGoodEvening = ss "bon soir" ; - GGoodNight = ss "bonne nuit" ; - GImHungry = ss "j'ai faim" ; - GImThirsty = ss "j'ai soif" ; - GImTired = ss "je suis fatigué" ; ---- gender - GImScared = ss "j'ai peur" ; - GIdontUnderstand = ss "je ne comprends pas" ; - GWheresTheBathroom = ss "où est la toilette" ; - GTheCheck = ss "l'addition" ; + GHello = roleNeutral "salut" ; + GThanks = roleNeutral "merci" ; + GHowAreYou = roleNeutral "comment ça va" ; + GPleaseGive = politeDistinct "s'il vous plaît" "s'il te plaît" ; + GExcuse = politeDistinct "excusez-moi" "excuse-moi" ; + GSorry = roleNeutral "pardon" ; + GGoodbye = roleNeutral "au revoir" ; + GBye = roleNeutral "au revoir" ; + GWhatsYourName = + politeDistinct "comment vous appelez-vous" "comment t'appelles-tu" ; + GNiceToMeetYou = speakerDistinct "enchanté" "enchantée" ; + GSeeYouSoon = roleNeutral "à bientôt" ; + GHelp = roleNeutral "au secours" ; + GLookOut = roleNeutral "attention" ; + GGoodMorning = roleNeutral "bonjour" ; + GGoodDay = roleNeutral "bonjour" ; + GGoodEvening = roleNeutral "bon soir" ; + GGoodNight = roleNeutral "bonne nuit" ; + GImHungry = roleNeutral "j'ai faim" ; + GImThirsty = roleNeutral "j'ai soif" ; + GImTired = speakerDistinct "je suis fatigué" "je suis fatiguée" ; + GImScared = roleNeutral "j'ai peur" ; + GIdontUnderstand = roleNeutral "je ne comprends pas" ; + GWheresTheBathroom = roleNeutral "où est la toilette" ; + GTheCheck = roleNeutral "l'addition" ; - GYes = ss "oui" ; ---- si - GNo = ss "non" ; + GYes = roleNeutral "oui" ; ---- si + GNo = roleNeutral "non" ; } diff --git a/examples/phrasebook/Phrasebook.gf b/examples/phrasebook/Phrasebook.gf index 05b777954..f5f5a4663 100644 --- a/examples/phrasebook/Phrasebook.gf +++ b/examples/phrasebook/Phrasebook.gf @@ -7,10 +7,16 @@ flags startcat = Phrase ; cat Phrase ; + Politeness ; Gender ; -- abstract parameters fun PNumeral : Numeral -> Phrase ; - PGreeting : Greeting -> Phrase ; PSentence : Sentence -> Phrase ; + PGreeting : Greeting -> Phrase ; +---- PGreeting : Politeness -> Gender -> Gender -> Greeting -> Phrase ; + -- politeness level, speaker, hearer + + Polite, Familiar : Politeness ; + Male, Female : Gender ; } diff --git a/examples/phrasebook/PhrasebookDisambEng.gf b/examples/phrasebook/PhrasebookDisambEng.gf new file mode 100644 index 000000000..17212ae6f --- /dev/null +++ b/examples/phrasebook/PhrasebookDisambEng.gf @@ -0,0 +1,20 @@ +--# -path=.:present + +concrete PhrasebookDisambEng of Phrasebook = + PhrasebookEng - [PGreeting, Polite, Familiar, Male, Female] ** open + (R = Roles), + Prelude in { + +lin + PGreeting p s h g = mkPhrase + (g.s ++ p.s ++ "(by" ++ s.s ++ ")" ++ "(to" ++ h.s ++ ")") ; + + Male = {s = "a man" ; g = R.Male} ; + Female = {s = "a woman" ; g = R.Female} ; + Polite = {s = "(polite)" ; p = R.Polite} ; + Familiar = {s = "(familiar)" ; p = R.Familiar} ; + +--oper +-- mkPhrase : Str -> Utt = \s -> lin Utt (ss s) ; + +} diff --git a/examples/phrasebook/PhrasebookEng.gf b/examples/phrasebook/PhrasebookEng.gf index ee919d285..4d4b26781 100644 --- a/examples/phrasebook/PhrasebookEng.gf +++ b/examples/phrasebook/PhrasebookEng.gf @@ -3,6 +3,7 @@ concrete PhrasebookEng of Phrasebook = GreetingsEng, FoodEng ** open + (R = Roles), SyntaxEng, ResEng, ---- for Num to Utt Prelude in { @@ -12,12 +13,18 @@ lincat lin PNumeral n = - mkPhrase (ss ((SyntaxEng.mkCard ).s ! Nom)) ; ---- - PGreeting g = mkPhrase g ; + mkPhrase ((SyntaxEng.mkCard ).s ! Nom) ; ---- PSentence s = s ; + PGreeting g = mkPhrase g.s ; +---- PGreeting p s h g = mkPhrase (g.s ++ p.s ++ s.s ++ h.s) ; + + Male = {s = [] ; g = R.Male} ; + Female = {s = [] ; g = R.Female} ; + Polite = {s = [] ; p = R.Polite} ; + Familiar = {s = [] ; p = R.Familiar} ; oper - mkPhrase : SS -> Utt = \s -> lin Utt s ; + mkPhrase : Str -> Utt = \s -> lin Utt (ss s) ; } diff --git a/examples/phrasebook/PhrasebookFre.gf b/examples/phrasebook/PhrasebookFre.gf index 662f5aade..7cf812466 100644 --- a/examples/phrasebook/PhrasebookFre.gf +++ b/examples/phrasebook/PhrasebookFre.gf @@ -4,6 +4,7 @@ concrete PhrasebookFre of Phrasebook = GreetingsFre, FoodFre ** open + (R = Roles), SyntaxFre, ParadigmsFre, ResFre, ---- for Num to Utt @@ -11,13 +12,22 @@ concrete PhrasebookFre of Phrasebook = lincat Phrase = Utt ; + Gender = {s : Str ; g : R.Gender} ; + Politeness = {s : Str ; p : R.Politeness} ; lin - PNumeral n = mkPhrase (ss ((mkCard ).s ! masculine)) ; ---- - PGreeting g = mkPhrase g ; + PNumeral n = mkPhrase ((mkCard ).s ! masculine) ; ---- PSentence s = s ; + PGreeting g = mkPhrase (g.s ! R.Polite ! R.Male ! R.Male) ; +---- PGreeting p s h g = mkPhrase (g.s ! p.p ! s.g ! h.g ++ p.s ++ s.s ++ h.s) ; + + Male = {s = [] ; g = R.Male} ; + Female = {s = [] ; g = R.Female} ; + Polite = {s = [] ; p = R.Polite} ; + Familiar = {s = [] ; p = R.Familiar} ; + oper - mkPhrase : SS -> Utt = \s -> lin Utt s ; + mkPhrase : Str -> Utt = \s -> lin Utt (ss s) ; } diff --git a/examples/phrasebook/Roles.gf b/examples/phrasebook/Roles.gf new file mode 100644 index 000000000..f8f9c4aea --- /dev/null +++ b/examples/phrasebook/Roles.gf @@ -0,0 +1,34 @@ +resource Roles = { + +param + Gender = Male | Female ; + Politeness = Polite | Familiar ; + +oper + RolePhrase : Type = {s : Politeness => Gender => Gender => Str} ; + + politeDistinct : (_,_ : Str) -> RolePhrase = \pol,fam -> { + s = table { + Polite => \\_,_ => pol ; + Familiar => \\_,_ => fam + } + } ; + + speakerDistinct : (_,_ : Str) -> RolePhrase = \mal,fem -> { + s = \\p,s,h => case s of { + Male => mal ; + Female => fem + } + } ; + + hearerDistinct : (_,_ : Str) -> RolePhrase = \mal,fem -> { + s = \\p,s,h => case h of { + Male => mal ; + Female => fem + } + } ; + + roleNeutral : Str -> RolePhrase = \s -> { + s = \\_,_,_ => s + } ; +}