Chunking and other robust translation facilities in plain RGL

This commit is contained in:
aarne
2014-04-02 21:16:03 +00:00
parent d94c7632d4
commit 2ae1392cc1
17 changed files with 437 additions and 38 deletions

67
lib/src/chunk/ChunkBul.gf Normal file
View File

@@ -0,0 +1,67 @@
concrete ChunkBul of Chunk = CatBul, ExtensionsBul [VPS,VPI] **
ChunkFunctor - [
CN_Pl_Chunk, CN_Sg_Chunk, Conj_Chunk, IAdv_Chunk, IP_Chunk, Numeral_Nom_Chunk, SSlash_Chunk, Predet_Chunk,
emptyNP, Prep_Chunk
]
with (Syntax = SyntaxBul), (Extensions = ExtensionsBul) **
open
SyntaxBul, (E = ExtensionsBul), Prelude,
ResBul, MorphoFunsBul, (P = ParadigmsBul) in {
lin CN_Pl_Chunk, CN_Pl_Gen_Chunk = \cn -> {s = cn.s ! (NF Pl allSpecies | NFPlCount)} ;
lin CN_Sg_Chunk, CN_Sg_Gen_Chunk = \cn -> {s = cn.s ! (NF Sg allSpecies | NFSgDefNom)} ;
lin Conj_Chunk c = {s = c.s ++ linCoord ! c.conj};
lin IAdv_Chunk iadv = {s = iadv.s ! allQForm};
lin IP_Chunk ip = {s = ip.s ! (RSubj | RObj allCases | RVoc) ! allQForm};
lin Predet_Chunk predet = {s = predet.s ! allGenNum};
lin Numeral_Nom_Chunk, Numeral_Gen_Chunk = \num -> {s = num.s ! NCard allCardForm};
lin Prep_Chunk prep = prep;
lin NP_Acc_Chunk np = {s = np.s ! RObj allCases};
lin NP_Gen_Chunk np = {s = np.s ! RSubj};
oper
emptyNP : NP = SyntaxBul.mkNP (P.mkPN [] Masc) ;
lin refl_SgP1_Chunk, refl_SgP2_Chunk, refl_SgP3_Chunk, refl_PlP1_Chunk,
refl_PlP2_Chunk, refl_PlP3_Chunk =
{s = reflClitics ! allCases};
lin neg_Chunk = {s = "не"};
lin copula_Chunk = {s = auxBe ! VPres allNumber allPerson};
lin copula_neg_Chunk = {s = "не" ++ auxBe ! VPres allNumber allPerson};
lin copula_inf_Chunk = {s = auxWould ! VPres allNumber allPerson};
lin past_copula_Chunk = {s = auxBe ! VAorist allNumber allPerson};
lin past_copula_neg_Chunk = {s = "не" ++ auxBe ! VAorist allNumber allPerson};
lin future_Chunk = {s = "ще"};
lin future_neg_Chunk = {s = "не ще"};
lin cond_Chunk = {s = auxWould ! VAorist allNumber allPerson} ;
lin cond_neg_Chunk = {s = "не" ++ auxWould ! VAorist allNumber allPerson} ;
lin perfect_Chunk = {s = "*"} ;
lin perfect_neg_Chunk = {s = "не" ++ "*"} ;
lin past_perfect_Chunk = {s = "*"} ;
lin past_perfect_neg_Chunk = {s = "не" ++ "*"} ;
oper
allAForm
= ASg allGender allSpecies
| ASgMascDefNom
| APl allSpecies ;
allGender = Masc | Fem | Neut ;
allSpecies = Indef | Def ;
allCases = Acc | Dat ;
allQForm = QDir | QIndir ;
allAnimacy = Human | NonHuman ;
allCardForm =
CFMasc allSpecies allAnimacy
| CFMascDefNom allAnimacy
| CFFem allSpecies
| CFNeut allSpecies ;
allGenNum = GSg allGender | GPl ;
allNumber = Sg | Pl ;
allPerson = P1 | P2 | P3 ;
}

51
lib/src/chunk/ChunkChi.gf Normal file
View File

@@ -0,0 +1,51 @@
concrete ChunkChi of Chunk = CatChi, ExtensionsChi [VPS,VPI] **
ChunkFunctor - [Numeral_Nom_Chunk, Conj_Chunk, CN_Pl_Chunk, Subj_Chunk, emptyNP, Prep_Chunk, Predet_Chunk]
with (Syntax = SyntaxChi), (Extensions = ExtensionsChi) **
open
SyntaxChi, (E = ExtensionsChi), Prelude,
ResChi, (P = ParadigmsChi) in {
oper
emptyNP : NP = mkNP [] ;
-- exceptions to functor
lin
Conj_Chunk conj = ss (conj.s ! CSent).s2 ;
Numeral_Nom_Chunk num = ss (num.s ++ ge_s) ;
CN_Pl_Chunk cn = cn ;
Subj_Chunk subj = ss (subj.prePart ++ subj.sufPart) ;
Prep_Chunk prep = ss (prep.prepPre ++ prep.prepPost) ;
Predet_Chunk predet = predet ;
lin
NP_Acc_Chunk np = np ;
NP_Gen_Chunk np = ss (np.s ++ de_s) ;
copula_inf_Chunk = ss copula_s ;
refl_SgP1_Chunk = ss reflPron ;
refl_SgP2_Chunk = ss reflPron ;
refl_SgP3_Chunk = ss reflPron ;
refl_PlP1_Chunk = ss reflPron ;
refl_PlP2_Chunk = ss reflPron ;
refl_PlP3_Chunk = ss reflPron ;
neg_Chunk = ss neg_s ;
copula_Chunk = ss copula_s ;
copula_neg_Chunk = ss (neg_s ++ copula_s) ;
past_copula_Chunk = ss "了" ;
past_copula_neg_Chunk = ss (neg_s ++ copula_s ++ "了") ;
future_Chunk = ss copula_s ; ----
future_neg_Chunk = ss (neg_s ++ copula_s) ;
cond_Chunk = ss copula_s ; ----
cond_neg_Chunk = ss (neg_s ++ copula_s) ;
perfect_Chunk = ss "了" ;
perfect_neg_Chunk = ss (neg_s ++ copula_s ++ "了") ;
past_perfect_Chunk = ss "了" ;
past_perfect_neg_Chunk = ss (neg_s ++ copula_s ++ "了") ;
}

View File

@@ -4,6 +4,10 @@ concrete ChunkEng of Chunk = CatEng, ExtensionsEng [VPS,VPI] **
SyntaxEng, (E = ExtensionsEng), Prelude,
(R = ResEng), (P = ParadigmsEng) in {
lin
NP_Acc_Chunk np = ss (np.s ! R.NPAcc) ;
NP_Gen_Chunk np = ss (np.s ! R.NCase R.Gen) | ss (np.s ! R.NPNomPoss) ;
oper
emptyNP = mkNP (P.mkPN []) ;

37
lib/src/chunk/ChunkFin.gf Normal file
View File

@@ -0,0 +1,37 @@
concrete ChunkFin of Chunk = CatFin, ExtensionsFin [VPS,VPI] **
ChunkFunctor with (Syntax = SyntaxFin), (Extensions = ExtensionsFin) **
open
SyntaxFin, (E = ExtensionsFin), Prelude,
ResFin, (P = ParadigmsFin) in {
oper
emptyNP = mkNP (lin PN {s = \\_ => []}) ;
lin
NP_Acc_Chunk np = ss (np.s ! NPAcc) ;
NP_Gen_Chunk np = ss (np.s ! NPCase Gen) ;
lin
copula_inf_Chunk = ss "olla" ;
refl_SgP1_Chunk = ss "itseni" ;
refl_SgP2_Chunk = ss "itsesi" ;
refl_SgP3_Chunk = ss "itse" ;
refl_PlP1_Chunk = ss "itsemme" ;
refl_PlP2_Chunk = ss "itsenne" ;
refl_PlP3_Chunk = ss "itsensä" ;
neg_Chunk = ss "ei" ;
copula_Chunk = ss "on" ;
copula_neg_Chunk = ss "ei ole" ;
past_copula_Chunk = ss "oli" ;
past_copula_neg_Chunk = ss "ei ollut" ;
future_Chunk = ss "tulee" ;
future_neg_Chunk = ss "ei tule" ;
cond_Chunk = ss "olisi" ;
cond_neg_Chunk = ss "ei olisi" ;
perfect_Chunk = ss "on" ;
perfect_neg_Chunk = ss "ei ole" ;
past_perfect_Chunk = ss "oli" ;
past_perfect_neg_Chunk = ss "ei ollut" ;
}

52
lib/src/chunk/ChunkFre.gf Normal file
View File

@@ -0,0 +1,52 @@
concrete ChunkFre of Chunk = CatFre, ExtensionsFre [VPS,VPI] **
ChunkFunctor - [SSlash_Chunk]
with (Syntax = SyntaxFre), (Extensions = ExtensionsFre) **
open
SyntaxFre, (E = ExtensionsFre), Prelude,
ResFre, PhonoFre, CommonRomance, (P = ParadigmsFre) in {
lin
SSlash_Chunk s = mkUtt <lin S {s = s.s ! {g = Masc ; n = Sg}} : S> ;
lin
NP_Acc_Chunk np = ss (np.s ! Acc).ton ;
NP_Gen_Chunk np = ss (np.s ! genitive).comp ;
oper
emptyNP = mkNP (P.mkPN []) ;
lin
copula_inf_Chunk = ss "être" ;
refl_SgP1_Chunk = ss "moi-même" ;
refl_SgP2_Chunk = ss "toi-même" ;
refl_SgP3_Chunk = ss "lui-même" ;
refl_PlP1_Chunk = ss "nous-mêmes" ;
refl_PlP2_Chunk = ss "vous-mêmes" ;
refl_PlP3_Chunk = ss "eux-mêmes" ;
neg_Chunk = ss "non" ;
copula_Chunk = ss "est" ;
copula_neg_Chunk = ss "n'est pas" ;
past_copula_Chunk = ss "était" ;
past_copula_neg_Chunk = ss "n'était pas" ;
future_Chunk = ss "va" ;
future_neg_Chunk = ss "ne va pas" ;
cond_Chunk = ss "ferait" ; ----
cond_neg_Chunk = ss "ne ferait pas" ; ----
perfect_Chunk = ss "a" ;
perfect_neg_Chunk = ss "n'a pas" ;
past_perfect_Chunk = ss "avait" ;
past_perfect_neg_Chunk = ss "n'avait pas" ;
fullstop_Chunk = ss "." ;
exclmark_Chunk = ss "!" ;
questmark_Chunk = ss "?" ;
comma_Chunk = ss "," ;
colon_Chunk = ss ":" ;
semicolon_Chunk = ss ";" ;
quote_Chunk = ss "\"" ;
lpar_Chunk = ss "(" ;
rpar_Chunk = ss ")" ;
dash_Chunk = ss "-" ;
}

37
lib/src/chunk/ChunkGer.gf Normal file
View File

@@ -0,0 +1,37 @@
concrete ChunkGer of Chunk = CatGer, ExtensionsGer [VPS,VPI] **
ChunkFunctor with (Syntax = SyntaxGer), (Extensions = ExtensionsGer) **
open
SyntaxGer, (E = ExtensionsGer), Prelude,
ResGer, (P = ParadigmsGer) in {
oper
emptyNP = mkNP (P.mkPN []) ;
lin
NP_Acc_Chunk np = ss (np.s ! NPC Acc) ;
NP_Gen_Chunk np = ss (np.s ! NPC Gen) ;
lin
copula_inf_Chunk = ss "sein" ;
refl_SgP1_Chunk = ss "mich selbst" ;
refl_SgP2_Chunk = ss "dich selbst" ;
refl_SgP3_Chunk = ss "sich selbst" ;
refl_PlP1_Chunk = ss "uns selbst" ;
refl_PlP2_Chunk = ss "euch selbst" ;
refl_PlP3_Chunk = ss "sich selbst" ;
neg_Chunk = ss "nicht" ;
copula_Chunk = ss "ist" ;
copula_neg_Chunk = ss "ist nicht" ;
past_copula_Chunk = ss "war" ;
past_copula_neg_Chunk = ss "war nicht" ;
future_Chunk = ss "wird" ;
future_neg_Chunk = ss "wird nicht" ;
cond_Chunk = ss "würde" ;
cond_neg_Chunk = ss "würde nicht" ;
perfect_Chunk = ss "hat" ;
perfect_neg_Chunk = ss "hat nicht" ;
past_perfect_Chunk = ss "hatte" ;
past_perfect_neg_Chunk = ss "hatte nicht" ;
}

46
lib/src/chunk/ChunkHin.gf Normal file
View File

@@ -0,0 +1,46 @@
concrete ChunkHin of Chunk = CatHin, ExtensionsHin [VPS,VPI] **
ChunkFunctor - [Adv_Chunk, Prep_Chunk]
with (Syntax = SyntaxHin), (Extensions = ExtensionsHin) **
open
SyntaxHin, (E = ExtensionsHin), Prelude, CommonHindustani,
(R = ResHin), (P = ParadigmsHin) in {
lin
Adv_Chunk adv = mkUtt adv ;
Prep_Chunk prep = pss (prep.s ! Masc) ; ----
oper
emptyNP = mkNP (P.mkPN []) ;
pss = Prelude.ss ;
lin
NP_Acc_Chunk np = mkUtt np ;
NP_Gen_Chunk np = mkUtt (mkAdv possess_Prep np) ;
copula_inf_Chunk = pss " है " ;
refl_SgP1_Chunk,
refl_SgP2_Chunk,
refl_SgP3_Chunk,
refl_PlP1_Chunk,
refl_PlP2_Chunk,
refl_PlP3_Chunk = pss " आप " ; ----
neg_Chunk = pss " नहीं " ;
copula_Chunk = pss " है " ;
copula_neg_Chunk = pss " नहीं है " ;
past_copula_Chunk = pss " था " ;
past_copula_neg_Chunk = pss " नहीं था " ;
future_Chunk = pss " हीं होगा " ;
future_neg_Chunk = pss " नहीं होगा " ;
cond_Chunk = pss " हीं होगा " ; ---- same as future
cond_neg_Chunk = pss " नहीं होगा " ;
perfect_Chunk = pss " है " ;
perfect_neg_Chunk = pss " नहीं " ;
past_perfect_Chunk = pss " था " ;
past_perfect_neg_Chunk = pss " नहीं " ;
}

52
lib/src/chunk/ChunkIta.gf Normal file
View File

@@ -0,0 +1,52 @@
concrete ChunkIta of Chunk = CatIta, ExtensionsIta [VPS,VPI] **
ChunkFunctor - [SSlash_Chunk]
with (Syntax = SyntaxIta), (Extensions = ExtensionsIta) **
open
SyntaxIta, (E = ExtensionsIta), Prelude,
ResIta, CommonRomance, (P = ParadigmsIta) in {
lin
SSlash_Chunk s = mkUtt <lin S {s = s.s ! {g = Masc ; n = Sg}} : S> ;
lin
NP_Acc_Chunk np = ss (np.s ! Acc).ton ;
NP_Gen_Chunk np = ss (np.s ! genitive).comp ;
oper
emptyNP = mkNP (P.mkPN []) ;
copula_inf_Chunk = ss "essere" ;
refl_SgP1_Chunk = ss "me stesso" ;
refl_SgP2_Chunk = ss "te stesso" ;
refl_SgP3_Chunk = ss "lui stesso" ;
refl_PlP1_Chunk = ss "noi stessi" ;
refl_PlP2_Chunk = ss "voi stessi" ;
refl_PlP3_Chunk = ss "loro stessi" ;
neg_Chunk = ss "non" ;
copula_Chunk = ss "è" ;
copula_neg_Chunk = ss "non è" ;
past_copula_Chunk = ss "era" ;
past_copula_neg_Chunk = ss "non era" ;
future_Chunk = ss "vuole" ; ----
future_neg_Chunk = ss "non vuole" ; ----
cond_Chunk = ss "vorrebbe" ; ----
cond_neg_Chunk = ss "non vorrebbe" ; ----
perfect_Chunk = ss "ha" ;
perfect_neg_Chunk = ss "non ha" ;
past_perfect_Chunk = ss "aveva" ;
past_perfect_neg_Chunk = ss "non aveva" ;
fullstop_Chunk = ss "." ;
exclmark_Chunk = ss "!" ;
questmark_Chunk = ss "?" ;
comma_Chunk = ss "," ;
colon_Chunk = ss ":" ;
semicolon_Chunk = ss ";" ;
quote_Chunk = ss "\"" ;
lpar_Chunk = ss "(" ;
rpar_Chunk = ss ")" ;
dash_Chunk = ss "-" ;
}

52
lib/src/chunk/ChunkSpa.gf Normal file
View File

@@ -0,0 +1,52 @@
concrete ChunkSpa of Chunk = CatSpa, ExtensionsSpa [VPS,VPI] **
ChunkFunctor - [SSlash_Chunk]
with (Syntax = SyntaxSpa), (Extensions = ExtensionsSpa) **
open
SyntaxSpa, (E = ExtensionsSpa), Prelude,
ResSpa, CommonRomance, (P = ParadigmsSpa) in {
lin
SSlash_Chunk s = mkUtt <lin S {s = s.s ! {g = Masc ; n = Sg}} : S> ;
lin
NP_Acc_Chunk np = ss (np.s ! Acc).ton ;
NP_Gen_Chunk np = ss (np.s ! genitive).comp ;
oper
emptyNP = mkNP (P.mkPN []) ;
lin
copula_inf_Chunk = ss "ser" ;
refl_SgP1_Chunk = ss "yo mismo" ;
refl_SgP2_Chunk = ss "tu mismo" ;
refl_SgP3_Chunk = ss "ello mismo" ;
refl_PlP1_Chunk = ss "nosotros mismos" ;
refl_PlP2_Chunk = ss "vosotros mismos" ;
refl_PlP3_Chunk = ss "ellos mismos" ;
neg_Chunk = ss "no" ;
copula_Chunk = ss "es" ;
copula_neg_Chunk = ss "no es" ;
past_copula_Chunk = ss "era" ;
past_copula_neg_Chunk = ss "no era" ;
future_Chunk = ss "va" ; ----
future_neg_Chunk = ss "no va" ; ----
cond_Chunk = ss "iría" ; ----
cond_neg_Chunk = ss "no iría" ; ----
perfect_Chunk = ss "ha" ;
perfect_neg_Chunk = ss "no ha" ;
past_perfect_Chunk = ss "había" ;
past_perfect_neg_Chunk = ss "no había" ;
fullstop_Chunk = ss "." ;
exclmark_Chunk = ss "!" ;
questmark_Chunk = ss "?" ;
comma_Chunk = ss "," ;
colon_Chunk = ss ":" ;
semicolon_Chunk = ss ";" ;
quote_Chunk = ss "\"" ;
lpar_Chunk = ss "(" ;
rpar_Chunk = ss ")" ;
dash_Chunk = ss "-" ;
}

View File

@@ -2,7 +2,11 @@ concrete ChunkSwe of Chunk = CatSwe, ExtensionsSwe [VPS,VPI] **
ChunkFunctor with (Syntax = SyntaxSwe), (Extensions = ExtensionsSwe) **
open
SyntaxSwe, (E = ExtensionsSwe), Prelude,
(R = ResSwe), (P = ParadigmsSwe) in {
(C=CommonScand), (R=ResSwe), (P = ParadigmsSwe) in {
lin
NP_Acc_Chunk np = ss (np.s ! C.NPAcc) ;
NP_Gen_Chunk np = ss (np.s ! C.NPPoss (C.GSg C.Utr) C.Nom) ;
oper
emptyNP = mkNP (P.mkPN []) ;