Skip to content

Commit e62204c

Browse files
committed
relative clauses
1 parent c1bad8a commit e62204c

File tree

3 files changed

+93
-34
lines changed

3 files changed

+93
-34
lines changed

udapi/block/zellig_harris/enhancedeps.py

Lines changed: 28 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -111,6 +111,30 @@ def echildren(node):
111111

112112
return echildren_list
113113

114+
##vincent
115+
# def echildren(node):
116+
# if node.deprel != 'conj':
117+
# target = node
118+
# if node.deprel == 'conj':
119+
# target = node.parent
120+
# immediate_children_list = target.children
121+
# all_children_list = immediate_children_list
122+
# for imchild in immediate_children_list:
123+
# descendants_list = imchild.children
124+
# if imchild == target:
125+
# continue
126+
# descendants_list = imchild.children
127+
# for descendant in descendants_list:
128+
# if descendant.deprel == 'conj':
129+
# all_children_list.append(descendant)
130+
# if len(all_children_list) == 0:
131+
# raise ValueError('No echildren.')
132+
# return all_children_list
133+
#
134+
#
135+
136+
137+
114138

115139
def eschildren(node):
116140
"""
@@ -143,7 +167,7 @@ def en_verb_controller_YN(node):
143167
result = False
144168
verb_echildren_list = echildren(node)
145169
for verb_echild in verb_echildren_list:
146-
if true_deprel(verb_echild) == 'xcomp':
170+
if true_deprel(verb_echild) == 'xcomp' and verb_echild.upos == 'VERB':
147171
result = True
148172
break
149173
return result
@@ -209,9 +233,10 @@ def en_verb_passive_form_YN(node):
209233

210234
if node.feats['Voice'] == 'Pass':
211235
return True
212-
213-
if node.feats['VerbForm'] == 'Part' and node.feats['Tense'] == 'Past':
236+
elif node.feats['VerbForm'] == 'Part' and node.feats['Tense'] == 'Past':
214237
return True
238+
else:
239+
return False
215240

216241

217242

udapi/block/zellig_harris/enverbs.py

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -28,11 +28,13 @@ def process_node(self, node):
2828
if self.verbose:
2929
logging.info('')
3030
logging.info('Processing node %s/%s', node.root.sent_id, node)
31-
logging.info('Processing node %s/%s', node.root.sent_id, node)
31+
# logging.info('Processing node %s/%s', node.root.sent_id, node)
32+
3233

33-
self.apply_query('en_verb_has_dobj_is_relclActive', node)
3434
self.apply_query('en_verb_has_subject_is_relcl', node)
35-
self.apply_query('en_verb_has_iobj_is_relclActive', node)
36-
self.apply_query('en_verb_has_iobj_is_relclActive', node)
37-
self.apply_query('en_verb_has_iobj_is_relclPassive', node)
38-
self.apply_query('en_verb_has_dobj_is_relclPassive', node)
35+
# self.apply_query('en_verb_has_iobj_is_relclActive', node)
36+
# self.apply_query('en_verb_has_iobj_is_relclPassive', node)
37+
# self.apply_query('en_verb_has_dobj_is_relclPassive', node)
38+
# self.apply_query('en_verb_has_dobj_is_relclActive', node)
39+
40+

udapi/block/zellig_harris/queries.py

Lines changed: 57 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -110,15 +110,34 @@ def en_verb_has_subject_is_relcl(node):
110110
raise ValueError('It is not a verb.')
111111
if true_deprel(node) != 'acl:relcl':
112112
raise ValueError('It is not a relative clause.')
113-
ekids_controllees_list = []
113+
ekids_controlleesAct_list = []
114+
ekids_controlleesPass_list = []
115+
ekids_controlleesPass_dobj_list = []
116+
ekids_controlleesPass_iobj_list = []
117+
ekids_01_list = echildren(node)
114118
if en_verb_controller_YN(node):
115-
ekids_01_list = echildren(node)
116-
117119
for ekid_01 in ekids_01_list:
118-
if true_deprel(ekid_01) == 'xcomp' and not (en_verb_passive_form_YN(ekid_01)):
119-
ekids_controllees_list.append(ekid_01)
120-
121-
ekids_list = echildren(node)
120+
# print(true_deprel(ekid_01), ekid_01.lemma)
121+
if true_deprel(ekid_01) == 'xcomp' and ekid_01.upos == 'VERB':
122+
if not (en_verb_passive_form_YN(ekid_01)):
123+
ekids_controlleesAct_list.append(ekid_01)
124+
else:
125+
ekids_controlleesPass_list.append(ekid_01)
126+
127+
for ekid in ekids_controlleesPass_list:
128+
dobj_bool = False
129+
eskids = eschildren(ekid)
130+
for eskid in eskids:
131+
if eskid.deprel in ('dobj', 'ccomp') or (eskid.deprel == 'xcomp' and not (eskid.lemma in ('call', 'consider'))):
132+
dobj_bool = True
133+
ekids_controlleesPass_iobj_list.append(ekid)
134+
continue
135+
if not(dobj_bool):
136+
ekids_controlleesPass_dobj_list.append(ekid)
137+
138+
139+
140+
ekids_list = ekids_01_list
122141
relsubjs_list = []
123142
for ekid in ekids_list:
124143
if true_deprel(ekid) == 'nsubj' and ekid.feats['PronType'] == 'Rel':
@@ -130,8 +149,12 @@ def en_verb_has_subject_is_relcl(node):
130149
for epar in epar_list:
131150
if epar.upos in ('NOUN', 'PROPN'):
132151
triples.append((node, 'nsubj', epar))
133-
for ekid_controllee in ekids_controllees_list:
152+
for ekid_controllee in ekids_controlleesAct_list:
134153
triples.append((ekid_controllee, 'nsubj', epar))
154+
for ekid_controllee in ekids_controlleesPass_dobj_list:
155+
triples.append((ekid_controllee, 'dobj', epar))
156+
for ekid_controllee in ekids_controlleesPass_iobj_list:
157+
triples.append((ekid_controllee, 'iobj', epar))
135158
return triples
136159

137160

@@ -223,10 +246,11 @@ def en_verb_has_dobj_is_relclPassive(node): # does not check controlled werbs
223246
for ekid in ekids_list:
224247
if true_deprel(ekid) == 'nsubjpass' and ekid.feats['PronType'] == 'Rel':
225248
reldobjs_list.append(ekid)
226-
if true_deprel(ekid) in ['dobj','ccomp','xcomp']:
249+
if true_deprel(ekid) in ['dobj','ccomp'] or (true_deprel(ekid) == 'xcomp' and not (ekid.lemma in ('call', 'consider'))):
250+
# todo: funkce - seznam sloves, ktera maji xcomp jako doplnek adj nebo noun
227251
dobjs_list.append(ekid)
228252
if len(reldobjs_list) == 0:
229-
raise ValueError('Relative clause, but not obj relclause.')
253+
raise ValueError('Relative clause, but not obj, probably subject relclause.')
230254
if len(dobjs_list) !=0:
231255
raise ValueError('Is not direct object.')
232256
epar_list = eparents(node)
@@ -247,33 +271,41 @@ def en_verb_has_dobj_is_relclActive(node): # does not check controlled werbs
247271
raise ValueError('It is not a verb.')
248272
if true_deprel(node) != 'acl:relcl':
249273
raise ValueError('It is not a relative clause.')
250-
# ekids_controllees_list = []
251-
# if en_verb_controller_YN(node):
252-
# ekids_01_list = echildren(node)
253-
254-
# for ekid_01 in ekids_01_list:
255-
# if true_deprel(ekid_01) == 'xcomp' and not (en_verb_passive_form_YN(ekid_01)):
256-
# ekids_controllees_list.append(ekid_01)
257274
active=False
258275
ekids_list = echildren(node)
259276
for ekid in ekids_list:
260277
if true_deprel(ekid) == 'nsubj':
261-
active=True;
278+
active=True
262279
if true_deprel(ekid) == 'nsubj' and ekid.feats['PronType'] == 'Rel':
263280
raise ValueError('It is a subject clause.')
264281
if (true_deprel(ekid) == 'dobj' and not(ekid.feats['PronType'] == 'Rel')):
265282
raise ValueError('Is not direct object.')
266-
267283
if not active:
268284
raise ValueError('Verb is not active')
269-
270285
epar_list = eparents(node)
271286
triples = []
272-
for epar in epar_list:
273-
if epar.upos in ('NOUN', 'PROPN'):
274-
triples.append((node, 'dobj', epar))
275-
# for ekid_controllee in ekids_controllees_list:
276-
# triples.append((ekid_controllee, 'nsubj', epar))
287+
if not (en_verb_controller_YN(node)):
288+
for epar in epar_list:
289+
if epar.upos in ('NOUN', 'PROPN'):
290+
triples.append((node, 'dobj', epar))
291+
292+
else:
293+
descends_list = node.descendants
294+
real_controllees = []
295+
for descend in descends_list:
296+
controlee_bool=False
297+
if descend.deprel == 'xcomp' and descend.upos == 'VERB':
298+
desc_kids = echildren(descend)
299+
for desc_kid in desc_kids:
300+
if desc_kid.deprel == 'xcomp' and desc_kid.upos=='VERB':
301+
controllee_bool=True
302+
if not(controlee_bool):
303+
real_controllees.append(descend)
304+
305+
for epar in epar_list:
306+
if epar.upos in ('NOUN', 'PROPN'):
307+
for real_controllee in real_controllees:
308+
triples.append((real_controllee, 'dobj', epar))
277309
return triples
278310

279311

0 commit comments

Comments
 (0)