      elif length == 2:
          return [B2_ENT, L2_ENT]
      elif length == 3:
          return [B3_ENT, I3_ENT, L3_ENT]
      elif length == 4:
          return [B4_ENT, I4_ENT, I4_ENT, L4_ENT]
      elif length == 5:
          return [B5_ENT, I5_ENT, I5_ENT, I5_ENT, L5_ENT]
      elif length == 6:
          return [B6_ENT, I6_ENT, I6_ENT, I6_ENT, I6_ENT, L6_ENT]
      elif length == 7:
          return [B7_ENT, I7_ENT, I7_ENT, I7_ENT, I7_ENT, I7_ENT, L7_ENT]
      elif length == 8:
          return [B8_ENT, I8_ENT, I8_ENT, I8_ENT, I8_ENT, I8_ENT, I8_ENT, L8_ENT]
      elif length == 9:
          return [B9_ENT, I9_ENT, I9_ENT, I9_ENT, I9_ENT, I9_ENT, I9_ENT, I9_ENT,
                  L9_ENT]
      elif length == 10:
          return [B10_ENT, I10_ENT, I10_ENT, I10_ENT, I10_ENT, I10_ENT, I10_ENT,
                  I10_ENT, I10_ENT, L10_ENT]
      else:
          raise ValueError("Max length currently 10 for phrase matching")
  
  
  cdef class PhraseMatcher:
 
</s> remove         raise ValueError("Max length currently 10 for phrase matching")
 </s> add         return [B4_ENT, I4_ENT] + [I4_ENT] * (length-3) + [L4_ENT] </s> remove     if length == 1:
 </s> add     if length == 0:
        raise ValueError("Length must be >= 1")
    elif length == 1: </s> remove 
cdef int get_action(const TokenPatternC* pattern, const TokenC* token) nogil:
    lookahead = &pattern[1]
    for attr in pattern.attrs[:pattern.nr_attr]:
        if get_token_attr(token, attr.attr) != attr.value:
            if pattern.quantifier == ONE:
                return REJECT
            elif pattern.quantifier == ZERO:
                return ACCEPT if lookahead.nr_attr == 0 else ADVANCE
            elif pattern.quantifier in (ZERO_ONE, ZERO_PLUS):
                return ACCEPT_PREV if lookahead.nr_attr == 0 else ADVANCE_ZERO
            else:
                return PANIC
    if pattern.quantifier == ZERO:
        return REJECT
    elif lookahead.nr_attr == 0:
        return ACCEPT
    elif pattern.quantifier in (ONE, ZERO_ONE):
        return ADVANCE
    elif pattern.quantifier == ZERO_PLUS:
        # This is a bandaid over the 'shadowing' problem described here:
        # https://github.com/explosion/spaCy/issues/864
        next_action = get_action(lookahead, token)
        if next_action is REJECT:
            return REPEAT
        else:
            return ADVANCE_ZERO
    else:
        return PANIC


 </s> add  </s> remove def align(cand_words, gold_words):
    cost, edit_path = _min_edit_path(cand_words, gold_words)
    alignment = []
    i_of_gold = 0
    for move in edit_path:
        if move == 'M':
            alignment.append(i_of_gold)
            i_of_gold += 1
        elif move == 'S':
            alignment.append(None)
            i_of_gold += 1
        elif move == 'D':
            alignment.append(None)
        elif move == 'I':
            i_of_gold += 1
        else:
            raise Exception(move)
    return alignment


 </s> add 
      elif length == 2:
          return [B2_ENT, L2_ENT]
      elif length == 3:
          return [B3_ENT, I3_ENT, L3_ENT]
















      else:
          raise ValueError("Max length currently 10 for phrase matching")
  
  
  cdef class PhraseMatcher:
keep keep keep keep replace replace replace replace replace replace replace replace replace replace replace replace replace replace replace replace keep keep keep keep keep
 Revert "Merge branch 'develop' of https://github.com/explosion/spaCy into develop"

This reverts commit c9ba3d3c2dc7067cf8bd55f878cec45a8c6d73d4, reversing
changes made to 92c26a35d425d4e8ca1b805ea776ea10f5ded3df. 
spacy/matcher.pyx