docs: def _split_refextract_authors_str(authors_str):
      """Extract author names out of refextract authors output."""
      author_seq = (x.strip() for x in RE_SPLIT_AUTH.split(authors_str) if x)
      res = []
  
      current = ''
      for author in author_seq:
          if not isinstance(author, six.text_type):
              author = six.text_type(author.decode('utf8', 'ignore'))
  
          # First clean the token.
          author = re.sub(r'\(|\)', '', author, re.U)
          # Names usually start with characters.
          author = re.sub(r'^[\W\d]+', '', author, re.U)
          # Names should end with characters or dot.
          author = re.sub(r'[^.\w]+$', '', author, re.U)
  
          # If we have initials join them with the previous token.
          if RE_INITIALS_ONLY.match(author):
              current += ', ' + author.strip().replace('. ', '.')
          else:
              if current:
                  res.append(current)
              current = author
  
      # Add last element.
      if current:
          res.append(current)
  
      # Manual filterings that we don't want to add in regular expressions since
      # it would make them more complex.
      #  * ed might sneak in
      #  * many legacy refs look like 'X. and Somebody E.'
      #  * might miss lowercase initials
      filters = [
          lambda a: a == 'ed',
          lambda a: a.startswith(','),
          lambda a: len(a) == 1
      ]
      res = [r for r in res if all(not f(r) for f in filters)]
      return res