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)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy