Skip to content

Commit fdbfe58

Browse files
committed
The phrase Writer module remodeled as an abstract block, providing methods to inherit.
1 parent c52c3df commit fdbfe58

1 file changed

Lines changed: 76 additions & 0 deletions

File tree

udapi/block/mwe/msfphrase.py

Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
"""
2+
Morphosyntactic features (UniDive):
3+
An abstract block as a base for derivation of blocks that discover periphrastic
4+
verb forms and save them as Phrase features in MISC. This block provides the
5+
methods that save the features in MISC. It is based on the Writer module by
6+
Lenka Krippnerová.
7+
"""
8+
from udapi.core.block import Block
9+
import logging
10+
11+
class MsfPhrase(Block):
12+
13+
def process_node(self, node):
14+
"""
15+
Override this in a derived class!
16+
"""
17+
logging.fatal('process_node() not implemented.')
18+
19+
dictionary = {
20+
'person': 'PhrasePerson',
21+
'number': 'PhraseNumber',
22+
'mood': 'PhraseMood',
23+
'tense': 'PhraseTense',
24+
'voice': 'PhraseVoice',
25+
'aspect':'PhraseAspect',
26+
'form': 'PhraseForm',
27+
'reflex': 'PhraseReflex',
28+
'polarity': 'PhrasePolarity',
29+
'gender':'PhraseGender',
30+
'animacy':'PhraseAnimacy',
31+
'ords':'Phrase'
32+
}
33+
34+
def write_node_info(self, node,
35+
tense = None,
36+
person = None,
37+
number = None,
38+
mood = None,
39+
voice = None,
40+
form = None,
41+
reflex = None,
42+
polarity = None,
43+
ords = None,
44+
gender = None,
45+
animacy = None,
46+
aspect = None):
47+
arguments = locals()
48+
del arguments['self'] # delete self and node from arguments,
49+
del arguments['node'] # we want only grammatical categories
50+
for key,val in arguments.items():
51+
if val != None:
52+
node.misc[self.dictionary[key]] = val
53+
54+
def get_polarity(self, node, neg):
55+
if node.feats['Polarity'] != "":
56+
return node.feats['Polarity']
57+
if len(neg) == 0:
58+
return None
59+
return 'Neg'
60+
61+
def get_is_reflex(self,node,refl):
62+
if len(refl) == 0:
63+
return node.feats['Reflex']
64+
return 'Yes'
65+
66+
def is_expl_pass(self,refl):
67+
if len(refl) == 0:
68+
return False
69+
return refl[0].deprel == 'expl:pass'
70+
71+
def get_voice(self,node,refl):
72+
voice = node.feats['Voice']
73+
if self.is_expl_pass(refl):
74+
return 'Pass'
75+
return voice
76+

0 commit comments

Comments
 (0)