docs: def nltk_download(name, ignore_errors=True):
      r"""Like nltk.download, but be quiet about it, and get a room (separate python process)
  
      Does some simple whitespace normalization on `name`, but doesn't yet do fuzzy matching
      Caches the normalized names of packages already attempted, so they aren't re-tried
  
      >>> nltk_download('nonexistent dataset name', ignore_errors=True)
      False
      >>> nltk_download('WordNet', ignore_errors=True)
      True
      >>> nltk_download('wordnet', ignore_errors=True)
      True
      """
      name = re.sub(r"[-\s=+']+", '_', name.lower())
      if name in nltk_download.done:
          return nltk_download.done[name]
      proc = subprocess.Popen(["python", "-c", "import nltk; nltk.download('{}')".format(name)], stdout=subprocess.PIPE)
      msgs = [s for s in proc.communicate() if s is not None]
      if any(re.match(r'^\[nltk_data\]\s+Error', msg, flags=re.IGNORECASE) for msg in msgs):
          nltk_download.done[name] = False
          if ignore_errors:
              return nltk_download.done[name]
          raise ValueError('Unable to download the requested NLTK dataset: {}'.format('\n'.join(msgs)))
      nltk_download.done[name] = True
      return nltk_download.done[name]