@@ -110,15 +110,34 @@ def en_verb_has_subject_is_relcl(node):
110
110
raise ValueError ('It is not a verb.' )
111
111
if true_deprel (node ) != 'acl:relcl' :
112
112
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 )
114
118
if en_verb_controller_YN (node ):
115
- ekids_01_list = echildren (node )
116
-
117
119
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
122
141
relsubjs_list = []
123
142
for ekid in ekids_list :
124
143
if true_deprel (ekid ) == 'nsubj' and ekid .feats ['PronType' ] == 'Rel' :
@@ -130,8 +149,12 @@ def en_verb_has_subject_is_relcl(node):
130
149
for epar in epar_list :
131
150
if epar .upos in ('NOUN' , 'PROPN' ):
132
151
triples .append ((node , 'nsubj' , epar ))
133
- for ekid_controllee in ekids_controllees_list :
152
+ for ekid_controllee in ekids_controlleesAct_list :
134
153
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 ))
135
158
return triples
136
159
137
160
@@ -223,10 +246,11 @@ def en_verb_has_dobj_is_relclPassive(node): # does not check controlled werbs
223
246
for ekid in ekids_list :
224
247
if true_deprel (ekid ) == 'nsubjpass' and ekid .feats ['PronType' ] == 'Rel' :
225
248
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
227
251
dobjs_list .append (ekid )
228
252
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.' )
230
254
if len (dobjs_list ) != 0 :
231
255
raise ValueError ('Is not direct object.' )
232
256
epar_list = eparents (node )
@@ -247,33 +271,41 @@ def en_verb_has_dobj_is_relclActive(node): # does not check controlled werbs
247
271
raise ValueError ('It is not a verb.' )
248
272
if true_deprel (node ) != 'acl:relcl' :
249
273
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)
257
274
active = False
258
275
ekids_list = echildren (node )
259
276
for ekid in ekids_list :
260
277
if true_deprel (ekid ) == 'nsubj' :
261
- active = True ;
278
+ active = True
262
279
if true_deprel (ekid ) == 'nsubj' and ekid .feats ['PronType' ] == 'Rel' :
263
280
raise ValueError ('It is a subject clause.' )
264
281
if (true_deprel (ekid ) == 'dobj' and not (ekid .feats ['PronType' ] == 'Rel' )):
265
282
raise ValueError ('Is not direct object.' )
266
-
267
283
if not active :
268
284
raise ValueError ('Verb is not active' )
269
-
270
285
epar_list = eparents (node )
271
286
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 ))
277
309
return triples
278
310
279
311
0 commit comments