code: def _get_sane_normalizers(
      force_english_keyboard=False,
      force_lowercase=False,
      strip_accents=False,
      whitespace_escape=False,
      sanity=False,
  ):
      """original rules as in XLNET with optional modifications. force_english_keyboard is actually an ascii normalization."""
      if sanity:
          return normalizers.BertNormalizer(lowercase=force_lowercase)
      normalize_ops = []
      normalize_ops.append(normalizers.Replace("``", '"'))
      normalize_ops.append(normalizers.Replace("''", '"'))
      normalize_ops.append(
          normalizers.NFD() if strip_accents else normalizers.NFKC()
      )
      if force_lowercase:
          normalize_ops.append(normalizers.Lowercase())
      if strip_accents:
          normalize_ops.append(normalizers.StripAccents())
      normalize_ops.append(normalizers.Replace(Regex(" {2,}"), " "))
      if force_english_keyboard:
          normalize_ops.append(
              normalizers.Replace(Regex(r"[^\x00-\x7F]+"), "")
          )  # start from 00 instead of 1F to include tab
      if whitespace_escape:
          normalize_ops.append(
              normalizers.Replace(Regex(" "), "一")
          )  # ▁ this might kill some of the tokenization schemes...
          # using yi in the in the previous regex because huggingface does not split on yi, but would split on bigunderscore
      return normalizers.Sequence(normalize_ops)
  
file_path: bert-ultrafast/training/cramming/data/tokenizer_preparation.py
imports: from transformers import AutoTokenizer, PreTrainedTokenizerFast
  from tokenizers import Tokenizer, models, normalizers, pre_tokenizers, decoders, trainers, Regex, processors
label_desc: Use image node_id 5 for calling a global function with example usage: _get_sane_normalizers(force_english_keyboard, force_lowercase, strip_accents, whitespace_escape, sanity) and returns: normalizers, normalizers