mirror of
https://github.com/GrammaticalFramework/gf-rgl.git
synced 2026-05-27 17:08:54 -06:00
Merge branch 'master' of github.com:GrammaticalFramework/gf-rgl
This commit is contained in:
@@ -4,7 +4,7 @@ language: c
|
|||||||
os:
|
os:
|
||||||
- linux
|
- linux
|
||||||
- osx
|
- osx
|
||||||
- windows
|
# - windows
|
||||||
|
|
||||||
addons:
|
addons:
|
||||||
apt:
|
apt:
|
||||||
|
|||||||
@@ -193,6 +193,9 @@ abstract Extend = Cat ** {
|
|||||||
Cons_nr_RNP : NP -> RNPList -> RNPList ; -- John, my family, myself
|
Cons_nr_RNP : NP -> RNPList -> RNPList ; -- John, my family, myself
|
||||||
---- Cons_rn_RNP : RNP -> ListNP -> RNPList ; -- myself, John, Mary
|
---- Cons_rn_RNP : RNP -> ListNP -> RNPList ; -- myself, John, Mary
|
||||||
|
|
||||||
|
-- reflexive possessive on its own right, like in Swedish, Czech, Slovak
|
||||||
|
|
||||||
|
ReflPossPron : Quant ; -- Swe sin,sitt,sina
|
||||||
|
|
||||||
--- from Extensions
|
--- from Extensions
|
||||||
|
|
||||||
|
|||||||
@@ -79,6 +79,7 @@ lin
|
|||||||
Base_rn_RNP = variants {} ; -- RNP -> NP -> RNPList ; -- myself, John
|
Base_rn_RNP = variants {} ; -- RNP -> NP -> RNPList ; -- myself, John
|
||||||
Cons_rr_RNP = variants {} ; -- RNP -> RNPList -> RNPList ; -- my family, myself, John
|
Cons_rr_RNP = variants {} ; -- RNP -> RNPList -> RNPList ; -- my family, myself, John
|
||||||
Cons_nr_RNP = variants {} ; -- NP -> RNPList -> RNPList ; -- John, my family, myself
|
Cons_nr_RNP = variants {} ; -- NP -> RNPList -> RNPList ; -- John, my family, myself
|
||||||
|
ReflPossPron = PossPron he_Pron ; -- : Quant ; -- Swe sin,sitt,sina
|
||||||
ComplGenVV = variants {} ; -- VV -> Ant -> Pol -> VP -> VP ; -- want not to have slept
|
ComplGenVV = variants {} ; -- VV -> Ant -> Pol -> VP -> VP ; -- want not to have slept
|
||||||
ComplSlashPartLast = ComplSlash ;
|
ComplSlashPartLast = ComplSlash ;
|
||||||
--SlashV2V = variants {} ; -- V2V -> Ant -> Pol -> VPS -> VPSlash ; -- force (her) not to have slept
|
--SlashV2V = variants {} ; -- V2V -> Ant -> Pol -> VPS -> VPSlash ; -- force (her) not to have slept
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
--# -path=.:../abstract:../common:../api
|
--# -path=.:../abstract:../common:../api
|
||||||
|
|
||||||
concrete AllCze of AllCzeAbs =
|
concrete AllCze of AllCzeAbs =
|
||||||
LangCze
|
LangCze,
|
||||||
|
ExtendCze
|
||||||
;
|
;
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
--# -path=.:../abstract:../common:prelude
|
--# -path=.:../abstract:../common:prelude
|
||||||
|
|
||||||
abstract AllCzeAbs =
|
abstract AllCzeAbs =
|
||||||
Lang
|
Lang,
|
||||||
|
Extend
|
||||||
;
|
;
|
||||||
|
|
||||||
|
|||||||
@@ -24,6 +24,7 @@ concrete CatCze of Cat =
|
|||||||
VPSlash = {verb : VerbForms ; clit,compl : Agr => Str ; c : ComplementCase} ; ----
|
VPSlash = {verb : VerbForms ; clit,compl : Agr => Str ; c : ComplementCase} ; ----
|
||||||
V = ResCze.VerbForms ;
|
V = ResCze.VerbForms ;
|
||||||
V2 = ResCze.VerbForms ** {c : ComplementCase} ;
|
V2 = ResCze.VerbForms ** {c : ComplementCase} ;
|
||||||
|
VS,VQ = ResCze.VerbForms ;
|
||||||
|
|
||||||
A = ResCze.AdjForms ;
|
A = ResCze.AdjForms ;
|
||||||
AP = ResCze.Adjective ** {isPost : Bool} ; -- {s : Gender => Number => Case => Str}
|
AP = ResCze.Adjective ** {isPost : Bool} ; -- {s : Gender => Number => Case => Str}
|
||||||
|
|||||||
38
src/czech/ExtendCze.gf
Normal file
38
src/czech/ExtendCze.gf
Normal file
@@ -0,0 +1,38 @@
|
|||||||
|
concrete ExtendCze of Extend = CatCze **
|
||||||
|
ExtendFunctor - [
|
||||||
|
ReflPossPron
|
||||||
|
---- constant not found (yet)
|
||||||
|
,youPolFem_Pron
|
||||||
|
,UttVPShort
|
||||||
|
,UttAccIP
|
||||||
|
,UttDatIP
|
||||||
|
,SubjRelNP
|
||||||
|
,StrandRelSlash
|
||||||
|
,StrandQuestSlash
|
||||||
|
,SlashBareV2S
|
||||||
|
,PredIAdvVP
|
||||||
|
,PredAPVP
|
||||||
|
,ExistsNP
|
||||||
|
,ExistS
|
||||||
|
,ExistPluralCN
|
||||||
|
,ExistNPQS
|
||||||
|
,ExistMassCN
|
||||||
|
,ExistIPQS
|
||||||
|
,ExistCN
|
||||||
|
,EmptyRelSlash
|
||||||
|
,DetNPMasc
|
||||||
|
,DetNPFem
|
||||||
|
,ComplBareVS
|
||||||
|
,CompIQuant
|
||||||
|
,CompBareCN
|
||||||
|
]
|
||||||
|
with (Grammar = GrammarCze)
|
||||||
|
**
|
||||||
|
open
|
||||||
|
ResCze
|
||||||
|
in {
|
||||||
|
|
||||||
|
lin ReflPossPron = justDemPronFormsAdjective reflPossessivePron ;
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
@@ -632,8 +632,6 @@ adjFormsAdjective : AdjForms -> Adjective = \afs -> {
|
|||||||
a : Agr
|
a : Agr
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
---- TODO: possessives
|
|
||||||
|
|
||||||
personalPron : Agr -> PronForms = \a ->
|
personalPron : Agr -> PronForms = \a ->
|
||||||
{a = a ; cnom = []} **
|
{a = a ; cnom = []} **
|
||||||
case a of {
|
case a of {
|
||||||
@@ -753,6 +751,7 @@ adjFormsAdjective : AdjForms -> Adjective = \afs -> {
|
|||||||
|
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
|
reflPossessivePron : DemPronForms = mladyAdjForms "svy" ** {msnom = "svůj" ; pdat = "svým"} ;
|
||||||
|
|
||||||
mkPron : Agr -> PronForms ** {poss : DemPronForms} = \a ->
|
mkPron : Agr -> PronForms ** {poss : DemPronForms} = \a ->
|
||||||
personalPron a ** {poss = possessivePron a} ;
|
personalPron a ** {poss = possessivePron a} ;
|
||||||
|
|||||||
@@ -23,6 +23,7 @@ lin
|
|||||||
youSg_Pron = mkPron (Ag (Masc Anim) Sg P2) ;
|
youSg_Pron = mkPron (Ag (Masc Anim) Sg P2) ;
|
||||||
he_Pron = mkPron (Ag (Masc Anim) Sg P3) ;
|
he_Pron = mkPron (Ag (Masc Anim) Sg P3) ;
|
||||||
she_Pron = mkPron (Ag Fem Sg P3) ;
|
she_Pron = mkPron (Ag Fem Sg P3) ;
|
||||||
|
it_Pron = mkPron (Ag Neutr Sg P3) ;
|
||||||
we_Pron = mkPron (Ag (Masc Anim) Pl P1) ;
|
we_Pron = mkPron (Ag (Masc Anim) Pl P1) ;
|
||||||
youPl_Pron = mkPron (Ag (Masc Anim) Pl P2) ;
|
youPl_Pron = mkPron (Ag (Masc Anim) Pl P2) ;
|
||||||
they_Pron = mkPron (Ag (Masc Anim) Pl P3) ;
|
they_Pron = mkPron (Ag (Masc Anim) Pl P3) ;
|
||||||
|
|||||||
@@ -99,14 +99,13 @@ concrete NounHun of Noun = CatHun ** open
|
|||||||
quant ** num ** {
|
quant ** num ** {
|
||||||
s = \\c => case <isNum num,isIndefArt quant> of {
|
s = \\c => case <isNum num,isIndefArt quant> of {
|
||||||
<True,True> => [] ; -- don't output "a 2 cars"
|
<True,True> => [] ; -- don't output "a 2 cars"
|
||||||
_ => quant.s ! n ! c }
|
_ => quant.s ! n ! c } -- az/azok a …
|
||||||
++ num.s ! Attrib ; -- TODO: add inflection table in numbers
|
++ num.s ! Attrib ; -- TODO: add inflection table in numbers
|
||||||
sp = \\c => case <isNum num,isIndefArt quant> of {
|
sp = \\c => case <isNum num,isIndefArt quant> of {
|
||||||
<True,True> => [] ;
|
<True,True> => [] ;
|
||||||
_ => quant.sp ! n ! c }
|
_ => quant.sp ! n ! c } -- az/azok …
|
||||||
++ num.s ! Indep ;
|
++ num.s ! Indep ;
|
||||||
n = n ;
|
n = n ;
|
||||||
dt = qt2dt quant.qt ;
|
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
-- : Quant -> Num -> Ord -> Det ; -- these five best
|
-- : Quant -> Num -> Ord -> Det ; -- these five best
|
||||||
@@ -170,20 +169,20 @@ concrete NounHun of Noun = CatHun ** open
|
|||||||
DefArt = mkQuant "a" "a" ** {
|
DefArt = mkQuant "a" "a" ** {
|
||||||
s,
|
s,
|
||||||
sp = \\_,_ => pre {"a" ; "az" / v } ;
|
sp = \\_,_ => pre {"a" ; "az" / v } ;
|
||||||
qt = DefQuant ;
|
dt = DefDet ;
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
-- : Quant
|
-- : Quant
|
||||||
IndefArt = mkQuant "egy" [] ** {
|
IndefArt = mkQuant "egy" [] ** {
|
||||||
s = \\n,_ => case n of {Sg => "egy" ; Pl => []} ;
|
s = \\n,_ => case n of {Sg => "egy" ; Pl => []} ;
|
||||||
sp = \\n,_ => case n of {Sg => "egy" ; Pl => "sok"} ;
|
sp = \\n,_ => case n of {Sg => "egy" ; Pl => "sok"} ;
|
||||||
qt = IndefArticle ;
|
dt = IndefDet ;
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
-- : Pron -> Quant
|
-- : Pron -> Quant
|
||||||
PossPron pron = pron ** {
|
PossPron pron = pron ** {
|
||||||
s,sp = \\_ => pron.s ;
|
s,sp = \\_ => pron.s ;
|
||||||
qt = QuantPoss (agr2pstem pron.agr) ;
|
dt = DetPoss (agr2pstem pron.agr) ;
|
||||||
caseagr = False ;
|
caseagr = False ;
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
|
|||||||
@@ -17,17 +17,11 @@ oper
|
|||||||
-- Quant
|
-- Quant
|
||||||
|
|
||||||
param
|
param
|
||||||
QuantType =
|
|
||||||
IndefArticle -- Needed to prevent "a 2 cars"
|
|
||||||
| IndefQuant -- Not IndefArt, not poss, not def
|
|
||||||
| DefQuant
|
|
||||||
| QuantPoss PossStem -- Which possessive stem it takes
|
|
||||||
;
|
|
||||||
|
|
||||||
DetType =
|
DetType =
|
||||||
DefDet -- distinction between Article and Other no longer needed
|
DefDet
|
||||||
| IndefDet -- still need def or indef
|
| IndefDet -- Def or Indef relevant for verb agreement
|
||||||
| DetPoss PossStem -- Sill need to know which stem it takes if Poss
|
| DetPoss PossStem -- Which possessive stem it takes
|
||||||
;
|
;
|
||||||
|
|
||||||
-- Singular stems. Plural is always same, no need to add here.
|
-- Singular stems. Plural is always same, no need to add here.
|
||||||
@@ -35,10 +29,10 @@ param
|
|||||||
|
|
||||||
oper
|
oper
|
||||||
-- standard trick to prevent "a one car"
|
-- standard trick to prevent "a one car"
|
||||||
isIndefArt : {qt : QuantType} -> Bool = \quant ->
|
isIndefArt : {dt : DetType} -> Bool = \quant ->
|
||||||
case quant.qt of {
|
case quant.dt of {
|
||||||
IndefArticle => True ;
|
IndefDet => True ;
|
||||||
_ => False
|
_ => False
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
dt2objdef : DetType -> ObjDef = \dt -> case dt of {
|
dt2objdef : DetType -> ObjDef = \dt -> case dt of {
|
||||||
@@ -51,12 +45,6 @@ oper
|
|||||||
Indef => IndefDet
|
Indef => IndefDet
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
qt2dt : QuantType -> DetType = \qt -> case qt of {
|
|
||||||
QuantPoss x => DetPoss x ;
|
|
||||||
DefQuant => DefDet ;
|
|
||||||
_ => IndefDet
|
|
||||||
} ;
|
|
||||||
|
|
||||||
agr2pstem : Person*Number -> PossStem = \pn ->
|
agr2pstem : Person*Number -> PossStem = \pn ->
|
||||||
case <pn.p1,pn.p2> of {
|
case <pn.p1,pn.p2> of {
|
||||||
<P1,Pl> => dSg_rPl1 ;
|
<P1,Pl> => dSg_rPl1 ;
|
||||||
|
|||||||
@@ -203,13 +203,13 @@ oper
|
|||||||
Quant : Type = BaseQuant ** {
|
Quant : Type = BaseQuant ** {
|
||||||
s, -- form that comes before noun: "{this} car"
|
s, -- form that comes before noun: "{this} car"
|
||||||
sp : Number => Case => Str ; -- independent form, "I like {this}" (DetNP)
|
sp : Number => Case => Str ; -- independent form, "I like {this}" (DetNP)
|
||||||
qt : QuantType ;
|
dt : DetType ;
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
mkQuant : (s,sp : Str) -> Quant = \s,sp -> {
|
mkQuant : (s,sp : Str) -> Quant = \s,sp -> {
|
||||||
s = mkCaseNoun s ;
|
s = mkCaseNoun s ;
|
||||||
sp = mkCaseNoun sp ;
|
sp = mkCaseNoun sp ;
|
||||||
qt = DefQuant ;
|
dt = DefDet ;
|
||||||
caseagr = True ;
|
caseagr = True ;
|
||||||
poss = harm1 [] ;
|
poss = harm1 [] ;
|
||||||
} ;
|
} ;
|
||||||
|
|||||||
@@ -160,7 +160,9 @@ oper
|
|||||||
-- case (masc and fem singular, masc plural, adverbial), given that
|
-- case (masc and fem singular, masc plural, adverbial), given that
|
||||||
-- comparison is formed by "più".
|
-- comparison is formed by "più".
|
||||||
|
|
||||||
mkA : (solo,sola,soli,sole,solamente : Str) -> A ; -- irregular adjective
|
mkA : (solo,sola,soli,sole : Str) -> A ; -- possibly irregular adjective
|
||||||
|
|
||||||
|
mkA : (solo,sola,soli,sole,solamente : Str) -> A ; -- irregular adjective, with adverb
|
||||||
|
|
||||||
-- With irregular comparison, there are as it were two adjectives:
|
-- With irregular comparison, there are as it were two adjectives:
|
||||||
-- the positive ("buono") and the comparative ("migliore").
|
-- the positive ("buono") and the comparative ("migliore").
|
||||||
@@ -391,13 +393,16 @@ oper
|
|||||||
|
|
||||||
regV x =
|
regV x =
|
||||||
let
|
let
|
||||||
are = Predef.dp 3 x ;
|
---- are = Predef.dp 3 x ;
|
||||||
ci = Predef.dp 2 (Predef.tk 3 x) ;
|
ci = Predef.dp 2 (Predef.tk 3 x) ;
|
||||||
i = last ci ;
|
i = last ci ;
|
||||||
verb = case are of {
|
verb : {s : VForm => Str} = case x of {
|
||||||
"ire" => finire_100 x ;
|
_ + "ire" => finire_100 x ;
|
||||||
"ere" => temere_20 x ;
|
_ + "ere" => temere_20 x ;
|
||||||
"are" => case i of {
|
_ + "durre" => condurre_36 x ;
|
||||||
|
_ + "trarre" => trarre_91 x ;
|
||||||
|
_ + "rre" => porre_68 x ; --- all other verbs in -rre?
|
||||||
|
_ + "are" => case i of {
|
||||||
"c" => cercare_7 x ;
|
"c" => cercare_7 x ;
|
||||||
"g" => legare_8 x ;
|
"g" => legare_8 x ;
|
||||||
_ => case ci of {
|
_ => case ci of {
|
||||||
@@ -512,6 +517,7 @@ oper
|
|||||||
|
|
||||||
mkA = overload {
|
mkA = overload {
|
||||||
mkA : (bianco : Str) -> A = regA ;
|
mkA : (bianco : Str) -> A = regA ;
|
||||||
|
mkA : (solo,sola,soli,sole : Str) -> A = \solo,sola,soli,sole -> mk5A solo sola soli sole (sola + "mente") ;
|
||||||
mkA : (solo,sola,soli,sole, solamente : Str) -> A = mk5A ;
|
mkA : (solo,sola,soli,sole, solamente : Str) -> A = mk5A ;
|
||||||
mkA : A -> A -> A = mkADeg ;
|
mkA : A -> A -> A = mkADeg ;
|
||||||
mkA : A -> CopulaType -> A = adjCopula ;
|
mkA : A -> CopulaType -> A = adjCopula ;
|
||||||
|
|||||||
5
src/morphodict/Makefile
Normal file
5
src/morphodict/Makefile
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
ita:
|
||||||
|
cp -p MorphoDictItaAbs.header MorphoDictItaAbs.gf
|
||||||
|
cp -p MorphoDictIta.header MorphoDictIta.gf
|
||||||
|
python3 get_dict.py Ita tmp/IrregItaAbs.gf tmp/entries | grep -v "lin " >>MorphoDictItaAbs.gf
|
||||||
|
python3 get_dict.py Ita tmp/IrregItaAbs.gf tmp/entries | grep -v "fun " >>MorphoDictIta.gf
|
||||||
40036
src/morphodict/MorphoDictIta.gf
Normal file
40036
src/morphodict/MorphoDictIta.gf
Normal file
File diff suppressed because it is too large
Load Diff
15
src/morphodict/MorphoDictIta.header
Normal file
15
src/morphodict/MorphoDictIta.header
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
concrete MorphoDictIta of MorphoDictItaAbs =
|
||||||
|
CatIta [N,A,V,Adv,Prep] **
|
||||||
|
open
|
||||||
|
ParadigmsIta, IrregIta
|
||||||
|
in
|
||||||
|
{
|
||||||
|
|
||||||
|
-- converted from https://github.com/TALP-UPC/FreeLing/tree/master/data/it/dictionary/entries
|
||||||
|
-- inheriting its license https://creativecommons.org/licenses/by-sa/3.0/
|
||||||
|
|
||||||
|
lincat NSg,NPl = N ;
|
||||||
|
oper mkNSg : Str -> Gender -> N = \s,g -> mkN s g ;
|
||||||
|
oper mkNPl : Str -> Gender -> N = \s,g -> mkN s s g ;
|
||||||
|
|
||||||
|
|
||||||
40030
src/morphodict/MorphoDictItaAbs.gf
Normal file
40030
src/morphodict/MorphoDictItaAbs.gf
Normal file
File diff suppressed because it is too large
Load Diff
9
src/morphodict/MorphoDictItaAbs.header
Normal file
9
src/morphodict/MorphoDictItaAbs.header
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
abstract MorphoDictItaAbs =
|
||||||
|
Cat [N,A,V,Adv,Prep] **
|
||||||
|
{
|
||||||
|
|
||||||
|
-- converted from https://github.com/TALP-UPC/FreeLing/tree/master/data/it/dictionary/entries
|
||||||
|
-- inheriting its license https://creativecommons.org/licenses/by-sa/3.0/
|
||||||
|
|
||||||
|
cat NSg ; NPl ;
|
||||||
|
|
||||||
176
src/morphodict/get_dict.py
Normal file
176
src/morphodict/get_dict.py
Normal file
@@ -0,0 +1,176 @@
|
|||||||
|
import sys
|
||||||
|
|
||||||
|
"""
|
||||||
|
Converting a form-lemma-description lexicon to a GF lexicon.
|
||||||
|
|
||||||
|
Example: Romance resources from http://nlp.lsi.upc.edu/freeling/index.php/node/12
|
||||||
|
|
||||||
|
$ python3 get_dict.py Ita tmp/IrregItaAbs.gf tmp/entries
|
||||||
|
|
||||||
|
where entries is obtained by
|
||||||
|
|
||||||
|
$ cat adjs adv noun verb other | sort -u >entries
|
||||||
|
|
||||||
|
in FreeLing/data/it/dictionary/entries/
|
||||||
|
In this file, each line has three words, e.g.
|
||||||
|
|
||||||
|
abbondanze abbondanza NCFP000
|
||||||
|
|
||||||
|
from which the script produces two lines,
|
||||||
|
|
||||||
|
fun abbondanza_N : N ;
|
||||||
|
lin abbondanza_N = mkN "abbondanza" "abbondanze" feminine ;
|
||||||
|
|
||||||
|
These can be directed to an abstract and concrete module by using grep, as shown in Makefile.
|
||||||
|
|
||||||
|
Adaptation to a new language requires extending lang_args() with a new language code and the functions for that language.
|
||||||
|
|
||||||
|
"""
|
||||||
|
# an auxiliary
|
||||||
|
|
||||||
|
def quoted(s):
|
||||||
|
return '"' + s + '"'
|
||||||
|
|
||||||
|
######################
|
||||||
|
## language-specific code
|
||||||
|
######################
|
||||||
|
|
||||||
|
## Ita = Italian
|
||||||
|
|
||||||
|
# how each argument is obtained from the set of descriptions
|
||||||
|
def ita_noun_args(irregs,entry):
|
||||||
|
arg1 = entry.get('NCFS000', entry.get('NCMS000',entry.get('NCFN000',entry.get('NCMN000','NONE'))))
|
||||||
|
arg2 = entry.get('NCFP000', entry.get('NCMP000','NONE'))
|
||||||
|
if 'NCFS000' in entry.keys():
|
||||||
|
arg3 = 'feminine'
|
||||||
|
else:
|
||||||
|
arg3 = 'masculine'
|
||||||
|
if arg2 == 'NONE':
|
||||||
|
return ['NSg', arg1, 'mkNSg', quoted(arg1), arg3] # nouns that occur in singular only
|
||||||
|
elif arg1 == 'NONE':
|
||||||
|
return ['NPl', arg2, 'mkNPl', quoted(arg2), arg3] # nouns that occur in pular only
|
||||||
|
else:
|
||||||
|
return ['N', arg1, 'mkN', quoted(arg1), quoted(arg2),arg3]
|
||||||
|
|
||||||
|
|
||||||
|
def ita_adj_args(irregs,entry):
|
||||||
|
arg1 = entry.get('AQ0MS00', entry.get('AQ0CS00',entry.get('AQ0CN00','NONE')))
|
||||||
|
arg2 = entry.get('AQ0FS00', entry.get('AQ0CS00',entry.get('AQ0CN00','NONE')))
|
||||||
|
arg3 = entry.get('AQ0MP00', entry.get('AQ0CP00',entry.get('AQ0CN00','NONE')))
|
||||||
|
arg4 = entry.get('AQ0FP00', entry.get('AQ0CS00',entry.get('AQ0CN00','NONE_' + str(entry))))
|
||||||
|
return ['A', arg1, 'mkA', quoted(arg1), quoted(arg2),quoted(arg3),quoted(arg4)]
|
||||||
|
|
||||||
|
|
||||||
|
def ita_verb_args(irregs,entry):
|
||||||
|
arg1 = entry.get('VMN0000', 'NONE_' + str(entry))
|
||||||
|
if (arg1 + '_V') in irregs:
|
||||||
|
return ['V', arg1, '', 'IrregIta.' + arg1 + '_V']
|
||||||
|
else:
|
||||||
|
return ['V', arg1, 'mkV', quoted(arg1)]
|
||||||
|
|
||||||
|
|
||||||
|
def ita_adv_args(irregs,entry):
|
||||||
|
arg1 = entry.get('RG', 'NONE_' + str(entry))
|
||||||
|
return ['Adv', arg1, 'mkAdv', quoted(arg1)]
|
||||||
|
|
||||||
|
|
||||||
|
def ita_prep_args(irregs,entry):
|
||||||
|
arg1 = entry.get('SPS00', 'NONE_' + str(entry)) ## includes di,in,... but not their contractions
|
||||||
|
return ['Prep', arg1, 'mkPrep', quoted(arg1)]
|
||||||
|
|
||||||
|
def ignore_args(irregs,entry):
|
||||||
|
arg1 = 'NONE_' + str(entry)
|
||||||
|
return ['IGNORED', list(entry.values())[0], '', quoted(arg1)]
|
||||||
|
|
||||||
|
|
||||||
|
def ita_args(key):
|
||||||
|
if key[0] == 'A':
|
||||||
|
return ita_adj_args
|
||||||
|
elif key[0] == 'N':
|
||||||
|
return ita_noun_args
|
||||||
|
elif key[0] == 'V':
|
||||||
|
return ita_verb_args
|
||||||
|
elif key[0] == 'R':
|
||||||
|
return ita_adv_args
|
||||||
|
elif key[0] == 'S':
|
||||||
|
return ita_prep_args
|
||||||
|
else:
|
||||||
|
return ignore_args
|
||||||
|
|
||||||
|
def lang_args(lang,key):
|
||||||
|
if lang == 'Ita':
|
||||||
|
return ita_args(key)
|
||||||
|
else:
|
||||||
|
print("unknown language", lang)
|
||||||
|
|
||||||
|
##########################################################
|
||||||
|
## from this point, the code is generic for all languages
|
||||||
|
##########################################################
|
||||||
|
|
||||||
|
|
||||||
|
def get_irregs(ifile):
|
||||||
|
file = open(ifile)
|
||||||
|
irregs = []
|
||||||
|
for line in file:
|
||||||
|
ws = line.split()
|
||||||
|
if ws and ws[0] == 'fun':
|
||||||
|
irregs.append(ws[1])
|
||||||
|
file.close()
|
||||||
|
return irregs
|
||||||
|
|
||||||
|
|
||||||
|
def get_dict(filename):
|
||||||
|
file = open(filename)
|
||||||
|
dict = {}
|
||||||
|
for line in file:
|
||||||
|
words = line.split()
|
||||||
|
if len(words) == 3:
|
||||||
|
cat = words[2][0] # N,A,V,R,S ...
|
||||||
|
key = cat + '_' + words[1]
|
||||||
|
dict[key] = dict.get(key,{})
|
||||||
|
dict[key][words[2]] = words[0]
|
||||||
|
return dict
|
||||||
|
|
||||||
|
def clean_fun(lemma,cat):
|
||||||
|
if lemma.isalpha():
|
||||||
|
return lemma + '_' + cat
|
||||||
|
else:
|
||||||
|
fun = ''
|
||||||
|
for c in lemma:
|
||||||
|
if c=="'":
|
||||||
|
fun += "\\'"
|
||||||
|
else:
|
||||||
|
fun += c
|
||||||
|
return "'" + fun + '_' + cat + "'"
|
||||||
|
|
||||||
|
def print_entry(irregs,mapping,entry):
|
||||||
|
args = mapping(irregs,entry)
|
||||||
|
fun = clean_fun(args[1],args[0])
|
||||||
|
comment = min(1,str(args).count('NONE')) * '-- '
|
||||||
|
rule = [comment + "fun", fun, ":", args[0], ";"]
|
||||||
|
print(' '.join(rule))
|
||||||
|
rule = [comment + "lin", fun, "=", args[2]]
|
||||||
|
for arg in args[3:]:
|
||||||
|
rule.append(arg)
|
||||||
|
rule.append(';')
|
||||||
|
print(' '.join(rule))
|
||||||
|
|
||||||
|
|
||||||
|
def main():
|
||||||
|
if len(sys.argv) != 4:
|
||||||
|
print("usage: python3 get_dict <lang> <irregsfile> <dictfile>")
|
||||||
|
return 1
|
||||||
|
lang = sys.argv[1]
|
||||||
|
irregsfile = sys.argv[2]
|
||||||
|
dictfile = sys.argv[3]
|
||||||
|
irregs = get_irregs(irregsfile)
|
||||||
|
dict = get_dict(dictfile)
|
||||||
|
for key,entry in dict.items():
|
||||||
|
print_entry(irregs,lang_args(lang,key),entry)
|
||||||
|
print("}")
|
||||||
|
return 0
|
||||||
|
|
||||||
|
|
||||||
|
main()
|
||||||
|
|
||||||
|
|
||||||
@@ -1,6 +1,7 @@
|
|||||||
--# -path=.:../abstract:../common:../api
|
--# -path=.:../abstract:../common:../api
|
||||||
|
|
||||||
concrete AllSlo of AllSloAbs =
|
concrete AllSlo of AllSloAbs =
|
||||||
LangSlo
|
LangSlo,
|
||||||
|
ExtendSlo
|
||||||
;
|
;
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
--# -path=.:../abstract:../common:prelude
|
--# -path=.:../abstract:../common:prelude
|
||||||
|
|
||||||
abstract AllSloAbs =
|
abstract AllSloAbs =
|
||||||
Lang
|
Lang,
|
||||||
|
Extend
|
||||||
;
|
;
|
||||||
|
|
||||||
|
|||||||
@@ -24,6 +24,7 @@ concrete CatSlo of Cat =
|
|||||||
VPSlash = {verb : VerbForms ; clit,compl : Agr => Str ; c : ComplementCase} ; ----
|
VPSlash = {verb : VerbForms ; clit,compl : Agr => Str ; c : ComplementCase} ; ----
|
||||||
V = ResSlo.VerbForms ;
|
V = ResSlo.VerbForms ;
|
||||||
V2 = ResSlo.VerbForms ** {c : ComplementCase} ;
|
V2 = ResSlo.VerbForms ** {c : ComplementCase} ;
|
||||||
|
VS,VQ = ResSlo.VerbForms ;
|
||||||
|
|
||||||
A = ResSlo.AdjForms ;
|
A = ResSlo.AdjForms ;
|
||||||
AP = ResSlo.Adjective ** {isPost : Bool} ; -- {s : Gender => Number => Case => Str}
|
AP = ResSlo.Adjective ** {isPost : Bool} ; -- {s : Gender => Number => Case => Str}
|
||||||
|
|||||||
38
src/slovak/ExtendSlo.gf
Normal file
38
src/slovak/ExtendSlo.gf
Normal file
@@ -0,0 +1,38 @@
|
|||||||
|
concrete ExtendSlo of Extend = CatSlo **
|
||||||
|
ExtendFunctor - [
|
||||||
|
ReflPossPron
|
||||||
|
---- constant not found (yet)
|
||||||
|
,youPolFem_Pron
|
||||||
|
,UttVPShort
|
||||||
|
,UttAccIP
|
||||||
|
,UttDatIP
|
||||||
|
,SubjRelNP
|
||||||
|
,StrandRelSlash
|
||||||
|
,StrandQuestSlash
|
||||||
|
,SlashBareV2S
|
||||||
|
,PredIAdvVP
|
||||||
|
,PredAPVP
|
||||||
|
,ExistsNP
|
||||||
|
,ExistS
|
||||||
|
,ExistPluralCN
|
||||||
|
,ExistNPQS
|
||||||
|
,ExistMassCN
|
||||||
|
,ExistIPQS
|
||||||
|
,ExistCN
|
||||||
|
,EmptyRelSlash
|
||||||
|
,DetNPMasc
|
||||||
|
,DetNPFem
|
||||||
|
,ComplBareVS
|
||||||
|
,CompIQuant
|
||||||
|
,CompBareCN
|
||||||
|
]
|
||||||
|
with (Grammar = GrammarSlo)
|
||||||
|
**
|
||||||
|
open
|
||||||
|
ResSlo
|
||||||
|
in {
|
||||||
|
|
||||||
|
lin ReflPossPron = justDemPronFormsAdjective reflPossessivePron ;
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
@@ -869,6 +869,15 @@ adjFormsAdjective : AdjForms -> Adjective = \afs -> {
|
|||||||
|
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
|
reflPossessivePron : DemPronForms = otcovA "svoj" ** {
|
||||||
|
msnom = "svoj" ; msgen = "svojho" ; msdat = "svojmu" ;
|
||||||
|
msins = "svojím" ;
|
||||||
|
ampnom = "svoji" ;
|
||||||
|
nsnom, fpnom = "svoje" ;
|
||||||
|
pgen = "svojich" ;
|
||||||
|
pdat = "svojim" ;
|
||||||
|
pins = "svojimi" ;
|
||||||
|
} ;
|
||||||
|
|
||||||
mkPron : Agr -> PronForms ** {poss : DemPronForms} = \a ->
|
mkPron : Agr -> PronForms ** {poss : DemPronForms} = \a ->
|
||||||
personalPron a ** {poss = possessivePron a} ;
|
personalPron a ** {poss = possessivePron a} ;
|
||||||
|
|||||||
@@ -24,6 +24,7 @@ lin
|
|||||||
youSg_Pron = mkPron (Ag (Masc Anim) Sg P2) ;
|
youSg_Pron = mkPron (Ag (Masc Anim) Sg P2) ;
|
||||||
he_Pron = mkPron (Ag (Masc Anim) Sg P3) ;
|
he_Pron = mkPron (Ag (Masc Anim) Sg P3) ;
|
||||||
she_Pron = mkPron (Ag Fem Sg P3) ;
|
she_Pron = mkPron (Ag Fem Sg P3) ;
|
||||||
|
it_Pron = mkPron (Ag Neutr Sg P3) ;
|
||||||
we_Pron = mkPron (Ag (Masc Anim) Pl P1) ;
|
we_Pron = mkPron (Ag (Masc Anim) Pl P1) ;
|
||||||
youPl_Pron = mkPron (Ag (Masc Anim) Pl P2) ;
|
youPl_Pron = mkPron (Ag (Masc Anim) Pl P2) ;
|
||||||
they_Pron = mkPron (Ag (Masc Anim) Pl P3) ;
|
they_Pron = mkPron (Ag (Masc Anim) Pl P3) ;
|
||||||
|
|||||||
@@ -12,14 +12,16 @@ concrete ExtendSwe of Extend = CatSwe **
|
|||||||
ICompAP,ProDrop,EmbedSSlash,
|
ICompAP,ProDrop,EmbedSSlash,
|
||||||
AdAdV, PositAdVAdj, GerundCN, GerundNP, GerundAdv, PresPartAP, PastPartAP, PastPartAgentAP,
|
AdAdV, PositAdVAdj, GerundCN, GerundNP, GerundAdv, PresPartAP, PastPartAP, PastPartAgentAP,
|
||||||
RNP, RNPList, ReflRNP, ReflPron, ReflPoss, PredetRNP, ConjRNP,
|
RNP, RNPList, ReflRNP, ReflPron, ReflPoss, PredetRNP, ConjRNP,
|
||||||
Base_rr_RNP, Base_nr_RNP, Base_rn_RNP, Cons_rr_RNP, Cons_nr_RNP,
|
Base_rr_RNP, Base_nr_RNP, Base_rn_RNP, Cons_rr_RNP, Cons_nr_RNP, ReflPossPron,
|
||||||
CompoundN, CompoundAP, AdvIsNP,
|
CompoundN, CompoundAP, AdvIsNP,
|
||||||
UttAccNP
|
UttAccNP
|
||||||
]
|
]
|
||||||
with (Grammar = GrammarSwe)
|
with (Grammar = GrammarSwe)
|
||||||
**
|
**
|
||||||
open CommonScand, ResSwe, ParamX, VerbSwe, Prelude, DiffSwe, StructuralSwe, MorphoSwe,
|
open CommonScand, ResSwe, ParamX, VerbSwe, Prelude, DiffSwe, StructuralSwe, MorphoSwe,
|
||||||
NounSwe, Coordination, AdjectiveSwe, SentenceSwe, AdverbSwe, RelativeSwe, (P = ParadigmsSwe) in {
|
NounSwe, Coordination, AdjectiveSwe, SentenceSwe, AdverbSwe, RelativeSwe, (P = ParadigmsSwe),
|
||||||
|
(M = MakeStructuralSwe)
|
||||||
|
in {
|
||||||
|
|
||||||
flags coding=utf8 ;
|
flags coding=utf8 ;
|
||||||
|
|
||||||
@@ -207,6 +209,8 @@ concrete ExtendSwe of Extend = CatSwe **
|
|||||||
Cons_rr_RNP x xs = consrTable Agr comma x xs ;
|
Cons_rr_RNP x xs = consrTable Agr comma x xs ;
|
||||||
Cons_nr_RNP x xs = consrTable Agr comma {s = \\a => x.s ! NPAcc} xs ;
|
Cons_nr_RNP x xs = consrTable Agr comma {s = \\a => x.s ! NPAcc} xs ;
|
||||||
|
|
||||||
|
ReflPossPron = M.mkQuant "sin" "sitt" "sina" ;
|
||||||
|
|
||||||
lin
|
lin
|
||||||
ApposNP np1 np2 = {s = \\nform => np1.s ! nform ++ comma ++ np2.s ! nform; a = np1.a; isPron = False} ;
|
ApposNP np1 np2 = {s = \\nform => np1.s ! nform ++ comma ++ np2.s ! nform; a = np1.a; isPron = False} ;
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user