mirror of
https://github.com/explosion/spaCy.git
synced 2025-01-26 17:24:41 +03:00
* Fix Issue #251: Incorrect right edge calculation on left-clobber low in the tree
This commit is contained in:
parent
860fd11e98
commit
1b83cb9dfa
|
@ -240,10 +240,22 @@ cdef cppclass StateC:
|
||||||
void del_arc(int h_i, int c_i) nogil:
|
void del_arc(int h_i, int c_i) nogil:
|
||||||
cdef int dist = h_i - c_i
|
cdef int dist = h_i - c_i
|
||||||
cdef TokenC* h = &this._sent[h_i]
|
cdef TokenC* h = &this._sent[h_i]
|
||||||
|
cdef int i = 0
|
||||||
if c_i > h_i:
|
if c_i > h_i:
|
||||||
|
# this.R_(h_i, 2) returns the second-rightmost child token of h_i
|
||||||
|
# If we have more than 2 rightmost children, our 2nd rightmost child's
|
||||||
|
# rightmost edge is going to be our new rightmost edge.
|
||||||
h.r_edge = this.R_(h_i, 2).r_edge if h.r_kids >= 2 else h_i
|
h.r_edge = this.R_(h_i, 2).r_edge if h.r_kids >= 2 else h_i
|
||||||
h.r_kids -= 1
|
h.r_kids -= 1
|
||||||
|
new_edge = h.r_edge
|
||||||
|
# Correct upwards in the tree --- see Issue #251
|
||||||
|
while h.head < 0 and i < this.length: # Guard infinite loop
|
||||||
|
h += h.head
|
||||||
|
h.r_edge = new_edge
|
||||||
|
i += 1
|
||||||
else:
|
else:
|
||||||
|
# Same logic applies for left edge, but we don't need to walk up
|
||||||
|
# the tree, as the head is off the stack.
|
||||||
h.l_edge = this.L_(h_i, 2).l_edge if h.l_kids >= 2 else h_i
|
h.l_edge = this.L_(h_i, 2).l_edge if h.l_kids >= 2 else h_i
|
||||||
h.l_kids -= 1
|
h.l_kids -= 1
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user