Tony Wright Computational Linguistics I Grammar Engineering Project April 26, 2007
Romanian Grammar Fragment
This project implements a small fragment of Romanian in a Combinatory Categorial Grammar using OpenCCG. The grammar handles basic syntactic structures of Romanian including simple intransitives and transitives, ditransitive constructions, and subject and object relative NPs.
1. Romanian
Romanian is an Eastern Romance language spoken in primarily in Romania and Moldova. It is unique among modern romance languages in preserving the three genders (masculine, feminine and neuter) of Latin. Romanian has undergone intensive contact influence from neighboring Slavic languages and from Turkish (Cojocaru, 1999).
2. Syntactic structures
2.1 Intransitives
Intransitives in Romanian are of the form Subj Verb. The category s\ n was used for verbs like a lucra (to work) and a somna (to sleep):
(1) Baiatul lucreaza.
The boy works.
Baiatul lucreaza.
-------- ----------
n s\n
-----------------------------------------------<
s
2.2 Transitives
Romanian transitives are predominantly SVO. The category (s\ n)/ n was used for verbs like a vede (to see):
(2) Fata vede baiatul.
The girl sees the boy.
Fata vede baiatul.
------- ------ -------
n (s\n)/n n
----------------------->
s\n
--------------------------------<
s
2.3 Ditransitives
Ditransitives in Romanian are of the form Subject Indirect Object Direct Object. The indirect object must be in the genitive/dative case. The category ((s \ n)/ n)/ n[gen_dat] was used for verbs like a da (to give):
(3) Fata da baiatului floarea.
The girl gives the boy a flower.
Fata da baiatului floarea.
----- --- ---------- --------
n ((s \ n)/ n)/ n[gen_dat] n[gen_dat] n
------------------------------------------------->
(s \ n)/ n
--------------------------------------------->
s\n
---------------------------------------------------------<
2.4 Subject relative NPs
Subject relative NPs use the relativizer care. The category (n\ n) / s \ n[PERS NUM] was used for care:
(3) Baiatul care vede fata The boy who saw the girl
Baiatul care vede fata ——— —————————— —– ——
n (n\ n) / s \ n[PERS NUM] (s\n)/n n
------------------>
s\n
------------------------------------------------>
n\n
——————————————–<
n
2.5 Object relative NPs
Object relative NPs use the relativizer pe care. The category n\ n/ (s / n) was used for pe care:
(4) Baiatul pe care fata vede.
The boy whom the girl saw.
Baiatul pe_care fata vede
-------- --------- ----- -----
n n\ n/ (s/n) n (s\n)/n
--->T
s/(s\n)
------------------------>B
s/n
------------------------------>
n\n
-------------------------------<
n
References:
Cojocaru, D. (1999) Romanian Grammar. Durham, N.C: Duke University Slavic and East European Language Center.
Seiver, G. (1953). Introduction to Romanian. New York: Hafner.
Appendix: romanian_grammar.ccg
##### romanian grammar ####
##
## Tony Wright
## Computational Linguistics I
## April 25, 2007
## features ##
feature {
CASE<2>: nom_acc gen_dat;
NUM<2>: sg pl;
PERS<2>: 1st 2nd 3rd;
GEN<2>: masc fem neut;
TENSE<E>: past pres;
SEM-NUM<X:NUM>: sg-X pl-X;
ontology: sem-obj {
phys-obj {
animate-being {
person
}
thing
}
situation {
change {
action
}
state
}
};
}
#####words#######
word care:RelSubj;
word pe_care: RelObj;
## morph ##
## The nominative and accusative cases, and the genetive and dative cases,
## respectively, are morphologically identical; hence, I classify each
## as one case: nom_acc and gen_dat.
def noun(Sing_Nom_Acc, Sing_Gen_Dat, Plur_Nom_Acc, Plur_Gen_Dat, Pred) {
word Sing:N (pred=Pred){
Sing_Nom_Acc: sg nom_acc 3rd sg-X; Sing_Gen_Dat: sg gen_dat 3rd sg-X;
Plur_Nom_Acc: pl nom_acc 3rd pl-X;
Plur_Gen_Dat: pl gen_dat 3rd pl-X;
}
}
noun(baiatul, baiatului, baietii, baietilor, boy)
noun(fata, fetei, fetele, fetelor, girl)
noun(lupul, lupului, lupii, lupilor, wolf)
noun(floarea, floarei, floarele, floarelor, flower)
noun(dejunul, dejunului, dejunele, dejunelor, lunch)
def irr-verb(Family,Stem,Pred,FirstSg,SecSg,ThirdSg,FirstPl,SecPl,ThirdPl){
word Stem:Family (pred=Pred){
FirstSg: 1st sg pres;
SecSg: 2nd sg pres;
ThirdSg: 3rd sg pres;
FirstPl: 1st pl pres;
SecPl: 2nd pl pres;
ThirdPl: 3rd pl pres;
}
}
irr-verb(DitransV, da, give, dau, dai, da, dam, dati, dau)
irr-verb(TransV, vede, see, ved, vedi, vede, vedem, vedeti, vede)
def a-verb(Stem,Pred) {
word Stem:IntransV (pred=Pred) {
Stem . ez: 1st sg pres;
Stem . ezi: 2nd sg pres;
Stem . eaza: 3rd sg pres;
Stem . am: 1st pl pres;
Stem . ati: 2nd pl pres;
Stem . eaza: 3rd pl pres;
}
}
a-verb(lucr, work)
a-verb(somn, sleep)
## lexicon ##
family N {
entry : n<2> [X]: X:sem-obj(*);
}
family IntransV(V) {
entry: s<1> [E]\ n<2> [X nom_acc]: E:action(* <Actor>X:animate-being);
}
family TransV(V) {
entry: s<1>[E] \ n<2>[X PERS NUM nom_acc] / n<3>[Y nom_acc]:
E:action(* <Actor>X:animate-being <Patient>Y:sem-obj);
}
family DitransV(V) {
entry: s<1>[E] \ n<2>[X PERS NUM nom_acc] / n<3>[Y nom_acc] / n<4>[Z gen_dat]:
E:action(* <Actor>X:animate-being <Patient>Y:sem-obj <Recipient>Z:sem-obj);
}
family RelSubj(Rel) {
entry: (n<2> \ n<2>) / (s \ n<2>[PERS NUM]);
}
family RelObj(Rel) {
entry: n<2> \ n<2> / (s / n<2>);
}
## rules ##
## testbed ##
testbed {
baiatul lucreaza: 1;
fata somneaza: 1;
fata somneaza baiatul: 0;
fata vede baiatul: 1;
baiatul da fetei floarea: 1;
fata da baiatului floarea: 1;
fata da baiatul floarea: 0;
baiatul care vede fata: 1;
baiatul pe_care fata vede: 1;
}