Skip to content

Commit 180f6f1

Browse files
Add detection of French gérondif
1 parent 21649d7 commit 180f6f1

File tree

1 file changed

+22
-5
lines changed

1 file changed

+22
-5
lines changed

udapi/block/msf/romance/romance.py

Lines changed: 22 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ def process_node(self, node):
3939
cop = [x for x in node.children if x.udeprel == 'cop']
4040

4141
# only expl or expl:pv, no expl:impers or expl:pass
42-
refl = [x for x in node.children if x.lemma == 'se' and x.upos == 'PRON' and x.udeprel == 'expl' and x.deprel != 'expl:impers' and x.deprel != 'expl:pass']
42+
refl = [x for x in node.children if (x.lemma == 'se' or x.lemma == 'soi') and x.upos == 'PRON' and x.udeprel == 'expl' and x.deprel != 'expl:impers' and x.deprel != 'expl:pass']
4343

4444
if refl:
4545
expl='Pv'
@@ -265,6 +265,7 @@ def process_simple_verb_forms(self, node, expl, polarity, phrase_ords, head_node
265265

266266
aspect = ''
267267
tense = node.feats['Tense']
268+
form = node.feats['VerbForm']
268269

269270
if node.feats['Mood'] == 'Ind':
270271

@@ -336,13 +337,19 @@ def process_simple_verb_forms(self, node, expl, polarity, phrase_ords, head_node
336337
aspect=''
337338
tense=Tense.PRES.value
338339

340+
adp_en = [x for x in head_node.children if x.upos == 'ADP' and x.lemma == 'en' and x.udeprel == 'mark']
341+
if node.feats['VerbForm'] == 'Part' and adp_en:
342+
phrase_ords.append(adp_en[0].ord)
343+
phrase_ords.sort()
344+
form = 'Ger'
345+
339346

340347
self.write_node_info(head_node,
341348
person=node.feats['Person'],
342349
aspect=aspect,
343350
number=node.feats['Number'],
344351
mood=node.feats['Mood'],
345-
form=node.feats['VerbForm'],
352+
form=form,
346353
tense=tense,
347354
gender=head_node.feats['Gender'],
348355
voice=head_node.feats['Voice'],
@@ -499,13 +506,23 @@ def process_periphrastic_verb_forms(self, node, auxes, expl, polarity, phrase_or
499506
# Futuro anteriore -> PhraseTense=Fut, PhraseAspect=Perf
500507
aspect=Aspect.PERF.value
501508
tense=auxes[0].feats['Tense']
509+
form='Fin'
510+
511+
adp_en = [x for x in node.children if x.lemma == 'en' and x.upos == 'ADP' and x.udeprel == 'mark']
512+
if auxes[0].feats['VerbForm'] == 'Part' and adp_en:
513+
tense=Tense.PAST.value
514+
aspect=''
515+
phrase_ords.append(adp_en[0].ord)
516+
phrase_ords.sort()
517+
form='Ger'
518+
502519

503520
# Spanish
504521
# Pretérito perfecto compuesto ante presente -> PhraseTense=Past, PhraseAspect=Perf
505522

506523
# Italian
507524
# Passato prossimo (aux avere/essere) -> PhraseTense=Past, PhraseAspect=Perf
508-
if auxes[0].feats['Tense'] == 'Pres':
525+
elif auxes[0].feats['Tense'] == 'Pres':
509526

510527
# Portuguese
511528
# pretérito perfeito composto (aux ter) -> PhraseTense=PastPres, PhraseAspect=Perf
@@ -533,7 +550,7 @@ def process_periphrastic_verb_forms(self, node, auxes, expl, polarity, phrase_or
533550

534551
# Italian
535552
# trapassato remoto -> PhraseTense=Past, PhraseAspect=Ant
536-
553+
537554
# French
538555
# passé antérieur -> PhraseTense=Past, PhraseAspect=Ant
539556
elif auxes[0].feats['Tense'] == 'Past':
@@ -546,7 +563,7 @@ def process_periphrastic_verb_forms(self, node, auxes, expl, polarity, phrase_or
546563
person=auxes[0].feats['Person'],
547564
mood=auxes[0].feats['Mood'],
548565
aspect=aspect,
549-
form='Fin',
566+
form=form,
550567
voice=head_node.feats['Voice'],
551568
expl=expl,
552569
polarity=polarity,

0 commit comments

Comments
 (0)