@@ -72,13 +72,34 @@ def print_pattern(self, adp, el, que, verb):
72
72
def fix_pattern (self , adp , el , que , verb ):
73
73
if adp :
74
74
if adp .parent == que or adp .parent == verb :
75
- adp .parent = el
76
- adp .deprel = 'case'
77
- if len (adp .deps ) == 1 :
78
- adp .deps [0 ]['parent' ] = el
79
- adp .deps [0 ]['deprel' ] = 'case'
75
+ attach (adp , el , 'case' )
80
76
if el .parent == que :
81
77
###!!! Just a temporary change. In the end it will be attached elsewhere.
78
+ attach (el , verb )
82
79
el .parent = verb
83
80
if len (el .deps ) == 1 :
84
81
el .deps [0 ]['parent' ] = verb
82
+ if verb .parent != adp and verb .parent != el and verb .parent != que :
83
+ if re .match (r'^[nc]subj$' , verb .udeprel ):
84
+ attach (el , verb .parent , 'nsubj' )
85
+ attach (verb , el , 'acl:relcl' )
86
+ # If anything before 'el' depends on the verb ('cc', 'mark', 'punct' etc.),
87
+ # re-attach it to 'el'.
88
+ for c in verb .children :
89
+ if c .ord < el .ord and re .match (r'^(cc|mark|case|punct)$' , c .udeprel ):
90
+ attach (c , el )
91
+
92
+ def attach (node , parent , deprel = None ):
93
+ """
94
+ Attach a node to a new parent with a new deprel in the basic tree. In
95
+ addition, if there are enhanced dependencies and there is just one incoming
96
+ enhanced relation (this is the case in AnCora), this relation will be
97
+ modified accordingly.
98
+ """
99
+ node .parent = parent
100
+ if deprel :
101
+ node .deprel = deprel
102
+ if len (node .deps ) == 1 :
103
+ node .deps [0 ]['parent' ] = parent
104
+ if deprel :
105
+ node .deps [0 ]['deprel' ] = deprel
0 commit comments