          )
          # We need to deduplicate, because we could otherwise arrive at the same
          # match through two paths, e.g. .?.? matching 'a'. Are we matching the
          # first .?, or the second .? -- it doesn't matter, it's just one match.
          if match not in seen:
              output.append(match)
              seen.add(match)
      return output
  
  
 
</s> remove             self.attr = self.vocab.strings[attr]
 </s> add             self.attr = IDS.get(attr) </s> remove         if self[-1].whitespace_:
 </s> add         if len(self) > 0 and self[-1].whitespace_:
        # Skip 0-length matches. (TODO: fix algorithm)
        if match not in seen and matches[i].length > 0:
          )
          # We need to deduplicate, because we could otherwise arrive at the same
          # match through two paths, e.g. .?.? matching 'a'. Are we matching the
          # first .?, or the second .? -- it doesn't matter, it's just one match.
        # Skip 0-length matches. (TODO: fix algorithm)
        if match not in seen and matches[i].length > 0:
              output.append(match)
              seen.add(match)
      return output
  
  
keep keep keep keep replace keep keep keep keep keep
 Update develop from master for v3.0.0rc5 (#6811)

* Fix `spacy.util.minibatch` when the size iterator is finished (#6745)

* Skip 0-length matches (#6759)

Add hack to prevent matcher from returning 0-length matches.

* support IS_SENT_START in PhraseMatcher (#6771)

* support IS_SENT_START in PhraseMatcher

* add unit test and friendlier error

* use IDS.get instead

* ensure span.text works for an empty span (#6772)

* Remove unicode_literals

Co-authored-by: Santiago Castro <bryant@montevideo.com.uy>
Co-authored-by: Sofie Van Landeghem <svlandeg@users.noreply.github.com> 
spacy/matcher/matcher.pyx