Skip to content

Commit e8a1d91

Browse files
Extend Romance block to support Italian
1 parent 203df64 commit e8a1d91

File tree

1 file changed

+47
-12
lines changed

1 file changed

+47
-12
lines changed

udapi/block/msf/romance/romance.py

Lines changed: 47 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,8 @@
22
import udapi.block.msf.phrase
33
from enum import Enum
44

5-
AUXES_HAVE = ['ter', 'haber']
6-
AUXES_BE = ['estar']
5+
AUXES_HAVE = ['ter', 'haber', 'avere']
6+
AUXES_BE = ['estar', 'essere']
77

88
class Aspect(str, Enum):
99
IMP = 'Imp'
@@ -44,7 +44,7 @@ def process_node(self, node):
4444
self.process_copulas(node,cop,auxes,refl,expl)
4545
return
4646

47-
if node.upos == 'VERB': #TODO maybe add 'or node.feats['VerbForm'] == 'Part'?
47+
if node.upos == 'VERB': #TODO maybe add "or node.feats['VerbForm'] == 'Part'"?
4848
auxes = [x for x in node.children if x.udeprel == 'aux']
4949
aux_pass = [x for x in node.children if x.deprel == 'aux:pass']
5050
auxes_without_pass = [x for x in node.children if x.udeprel == 'aux' and x.deprel != 'aux:pass']
@@ -76,6 +76,11 @@ def process_node(self, node):
7676
# Spanish
7777
# presente -> PhraseTense=Pres, PhraseAspect=''
7878
# futuro simple -> PhraseTense=Fut, PhraseAspect=''
79+
80+
# Italian
81+
# presente -> PhraseTense=Pres, PhraseAspect=''
82+
# futuro semplice -> PhraseTense=Fut, PhraseAspect=''
83+
7984
aspect = ''
8085
tense = node.feats['Tense']
8186

@@ -86,6 +91,9 @@ def process_node(self, node):
8691

8792
# Spanish
8893
# pretérito imperfecto -> PhraseTense=Past, PhraseAspect=Imp
94+
95+
# Italian
96+
# imperfetto -> PhraseTense=Past, PhraseAspect=Imp
8997
if node.feats['Tense'] == 'Imp':
9098
tense=Tense.PAST.value
9199
aspect=Aspect.IMP.value
@@ -95,6 +103,9 @@ def process_node(self, node):
95103

96104
# Spanish
97105
# pretérito perfecto -> PhraseTense=Past, PhraseAspect=Perf
106+
107+
# Italian
108+
# pass remoto -> PhraseTense=Past, PhraseAspect=Perf
98109
if node.feats['Tense'] == 'Past':
99110
aspect=Aspect.PERF.value
100111

@@ -111,12 +122,22 @@ def process_node(self, node):
111122
# Spanish
112123
# subjunctive presente -> PhraseTense=Pres, PhraseAspect=''
113124
# subjunctive futuro -> PhraseTense=Fut, PhraseAspect='' TODO not annotated in treebanks?
125+
126+
# Italian
127+
# Congiuntivo presente -> PhraseTense=Pres, PhraseAspect=''
114128
if node.feats['Mood'] == 'Sub':
115129

116130
if node.feats['Tense'] == 'Past':
117131
aspect=Aspect.IMP.value
118132

133+
# Portuguese
119134
# subjunctive pretérito imperfeito -> PhraseTense=Past, PhraseAspect=Imp
135+
136+
# Spanish
137+
# Pretérito imperfecto -> PhraseTense=Past, PhraseAspect=Imp
138+
139+
# Italian
140+
# Congiuntivo imperfetto -> PhraseTense=Past, PhraseAspect=Imp
120141
if node.feats['Tense'] == 'Imp':
121142
tense=Tense.PAST.value
122143
aspect=Aspect.IMP.value
@@ -126,6 +147,9 @@ def process_node(self, node):
126147

127148
# Spanish
128149
# pospretérito (cnd) -> PhraseTense=Pres, PhraseAspect='', PhraseMood=Cnd
150+
151+
# Italian
152+
# Condizionale presente -> PhraseTense=Pres, PhraseAspect='', PhraseMood=Cnd
129153
if node.feats['Mood'] == 'Cnd':
130154
aspect=''
131155
tense=Tense.PRES.value
@@ -206,6 +230,9 @@ def process_periphrastic_verb_forms(self, node, auxes, refl, all_auxes, head_nod
206230

207231
# Spanish
208232
# Antepospretérito -> PhraseTense=Past, PhraseAspect='', PhraseMood=Cnd
233+
234+
# Italian
235+
# Condizionale passato -> PhraseTense=Past, PhraseAspect='', PhraseMood=Cnd
209236
else:
210237
tense=Tense.PAST.value
211238
aspect=''
@@ -329,7 +356,7 @@ def process_periphrastic_verb_forms(self, node, auxes, refl, all_auxes, head_nod
329356

330357
return
331358

332-
# Auxiliary 'ter' / 'haber' followed by a participle
359+
# Auxiliary 'ter' / 'haber' / 'avere' / 'essere' followed by a participle
333360
if node.feats['VerbForm'] == 'Part':
334361
phrase_ords = [head_node.ord] + [x.ord for x in all_auxes] + [r.ord for r in refl]
335362
phrase_ords.sort()
@@ -339,28 +366,36 @@ def process_periphrastic_verb_forms(self, node, auxes, refl, all_auxes, head_nod
339366

340367
# Spanish
341368
# Futuro compuesto antefuturo -> PhraseTense=Fut, PhraseAspect=Perf
369+
370+
# Italian
371+
# Futuro anteriore -> PhraseTense=Fut, PhraseAspect=Perf
342372
aspect=Aspect.PERF.value
343373
tense=auxes[0].feats['Tense']
344374

345-
# Portuguese
346-
# pretérito perfeito composto (aux ter) -> PhraseTense=PastPres, PhraseAspect=Perf
347-
# subjonctive pretérito perfeito composto (aux ter) -> PhraseTense=PastPres, PhraseAspect=Perf, PhraseMood=Sub
375+
# Spanish
376+
# Pretérito perfecto compuesto ante presente -> PhraseTense=Past, PhraseAspect=Perf
348377

378+
# Italian
379+
# Passato prossimo (aux avere/essere) -> PhraseTense=Past, PhraseAspect=Perf
349380
if auxes[0].feats['Tense'] == 'Pres':
350381

351-
# Spanish
352-
# Pretérito perfecto compuesto ante presente -> PhraseTense=Past, PhraseAspect=Perf
353-
if auxes[0].lemma == 'haber' and auxes[0].feats['Mood'] != 'Sub':
354-
tense = Tense.PAST.value
382+
# Portuguese
383+
# pretérito perfeito composto (aux ter) -> PhraseTense=PastPres, PhraseAspect=Perf
384+
# subjonctive pretérito perfeito composto (aux ter) -> PhraseTense=PastPres, PhraseAspect=Perf, PhraseMood=Sub
385+
if auxes[0].lemma == 'ter' or auxes[0].feats['Mood'] == 'Sub':
386+
tense = Tense.PASTPRES.value
355387
else:
356-
tense=Tense.PASTPRES.value
388+
tense=Tense.PAST.value
357389

358390
# Portuguese
359391
# pretérito mais que perfeito composto (aux ter) -> PhraseTense=Past, PhraseAspect=Pqp
360392
# subjonctive pretérito mais-que-perfeito composto (aux ter) -> PhraseTense=Past, PhraseAspect=Pqp, PhraseMood=Sub
361393

362394
# Spanish
363395
# pretérito pluscuamperfecto -> PhraseTense=Past, PhraseAspect=Pqp
396+
397+
# Italian
398+
# Trapassato prossimo -> PhraseTense=Past, PhraseAspect=Pqp
364399
elif auxes[0].feats['Tense'] in ['Imp', 'Past']: # TODO prej neni v Past, jenom Imp
365400
tense=Tense.PAST.value
366401
aspect=Aspect.PQP.value

0 commit comments

Comments
 (0)