politeness and disambiguation in Phrasebook (not visible yet)

This commit is contained in:
aarne
2010-03-24 08:18:54 +00:00
parent ce99935812
commit eab9110f05
8 changed files with 115 additions and 38 deletions

View File

@@ -2,7 +2,6 @@ abstract Greetings = {
cat cat
Greeting ; Greeting ;
Politeness ;
fun fun
GHello : Greeting ; GHello : Greeting ;

View File

@@ -1,7 +1,7 @@
concrete GreetingsEng of Greetings = open Prelude in { concrete GreetingsEng of Greetings = open Roles, Prelude in {
lincat lincat
Greeting, Politeness = SS ; Greeting = SS ;
lin lin
GHello = ss "hello" ; GHello = ss "hello" ;

View File

@@ -1,38 +1,39 @@
concrete GreetingsFre of Greetings = open Prelude in { concrete GreetingsFre of Greetings = open Roles,Prelude in {
flags coding = utf8 ; flags coding = utf8 ;
lincat lincat
Greeting, Politeness = SS ; Greeting = RolePhrase ;
lin lin
GHello = ss "salut" ; GHello = roleNeutral "salut" ;
GThanks = ss "merci" ; GThanks = roleNeutral "merci" ;
GHowAreYou = ss "comment ça va" ; GHowAreYou = roleNeutral "comment ça va" ;
GPleaseGive = ss "s'il vous plaît" ; ---- politeness GPleaseGive = politeDistinct "s'il vous plaît" "s'il te plaît" ;
GExcuse = ss "excusez-moi" ; GExcuse = politeDistinct "excusez-moi" "excuse-moi" ;
GSorry = ss "pardon" ; GSorry = roleNeutral "pardon" ;
GGoodbye = ss "au revoir" ; GGoodbye = roleNeutral "au revoir" ;
GBye = ss "au revoir" ; GBye = roleNeutral "au revoir" ;
GWhatsYourName = ss "comment vous appelez-vous" ; ---- politeness GWhatsYourName =
GNiceToMeetYou = ss "enchanté" ; ---- gender politeDistinct "comment vous appelez-vous" "comment t'appelles-tu" ;
GSeeYouSoon = ss "à bientôt" ; GNiceToMeetYou = speakerDistinct "enchanté" "enchantée" ;
GHelp = ss "au secours" ; GSeeYouSoon = roleNeutral "à bientôt" ;
GLookOut = ss "attention" ; GHelp = roleNeutral "au secours" ;
GGoodMorning = ss "bonjour" ; GLookOut = roleNeutral "attention" ;
GGoodDay = ss "bonjour" ; GGoodMorning = roleNeutral "bonjour" ;
GGoodEvening = ss "bon soir" ; GGoodDay = roleNeutral "bonjour" ;
GGoodNight = ss "bonne nuit" ; GGoodEvening = roleNeutral "bon soir" ;
GImHungry = ss "j'ai faim" ; GGoodNight = roleNeutral "bonne nuit" ;
GImThirsty = ss "j'ai soif" ; GImHungry = roleNeutral "j'ai faim" ;
GImTired = ss "je suis fatigué" ; ---- gender GImThirsty = roleNeutral "j'ai soif" ;
GImScared = ss "j'ai peur" ; GImTired = speakerDistinct "je suis fatigué" "je suis fatiguée" ;
GIdontUnderstand = ss "je ne comprends pas" ; GImScared = roleNeutral "j'ai peur" ;
GWheresTheBathroom = ss "où est la toilette" ; GIdontUnderstand = roleNeutral "je ne comprends pas" ;
GTheCheck = ss "l'addition" ; GWheresTheBathroom = roleNeutral "où est la toilette" ;
GTheCheck = roleNeutral "l'addition" ;
GYes = ss "oui" ; ---- si GYes = roleNeutral "oui" ; ---- si
GNo = ss "non" ; GNo = roleNeutral "non" ;
} }

View File

@@ -7,10 +7,16 @@ flags startcat = Phrase ;
cat cat
Phrase ; Phrase ;
Politeness ; Gender ; -- abstract parameters
fun fun
PNumeral : Numeral -> Phrase ; PNumeral : Numeral -> Phrase ;
PGreeting : Greeting -> Phrase ;
PSentence : Sentence -> Phrase ; PSentence : Sentence -> Phrase ;
PGreeting : Greeting -> Phrase ;
---- PGreeting : Politeness -> Gender -> Gender -> Greeting -> Phrase ;
-- politeness level, speaker, hearer
Polite, Familiar : Politeness ;
Male, Female : Gender ;
} }

View File

@@ -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) ;
}

View File

@@ -3,6 +3,7 @@
concrete PhrasebookEng of Phrasebook = concrete PhrasebookEng of Phrasebook =
GreetingsEng, GreetingsEng,
FoodEng ** open FoodEng ** open
(R = Roles),
SyntaxEng, SyntaxEng,
ResEng, ---- for Num to Utt ResEng, ---- for Num to Utt
Prelude in { Prelude in {
@@ -12,12 +13,18 @@ lincat
lin lin
PNumeral n = PNumeral n =
mkPhrase (ss ((SyntaxEng.mkCard <n : Numeral>).s ! Nom)) ; ---- mkPhrase ((SyntaxEng.mkCard <n : Numeral>).s ! Nom) ; ----
PGreeting g = mkPhrase g ;
PSentence s = s ; 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 oper
mkPhrase : SS -> Utt = \s -> lin Utt s ; mkPhrase : Str -> Utt = \s -> lin Utt (ss s) ;
} }

View File

@@ -4,6 +4,7 @@ concrete PhrasebookFre of Phrasebook =
GreetingsFre, GreetingsFre,
FoodFre FoodFre
** open ** open
(R = Roles),
SyntaxFre, SyntaxFre,
ParadigmsFre, ParadigmsFre,
ResFre, ---- for Num to Utt ResFre, ---- for Num to Utt
@@ -11,13 +12,22 @@ concrete PhrasebookFre of Phrasebook =
lincat lincat
Phrase = Utt ; Phrase = Utt ;
Gender = {s : Str ; g : R.Gender} ;
Politeness = {s : Str ; p : R.Politeness} ;
lin lin
PNumeral n = mkPhrase (ss ((mkCard <n : Numeral>).s ! masculine)) ; ---- PNumeral n = mkPhrase ((mkCard <n : Numeral>).s ! masculine) ; ----
PGreeting g = mkPhrase g ;
PSentence s = s ; 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 oper
mkPhrase : SS -> Utt = \s -> lin Utt s ; mkPhrase : Str -> Utt = \s -> lin Utt (ss s) ;
} }

View File

@@ -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
} ;
}