docstr: Basic text preprocessing
  :param text:
  :return:
docstr_tok: ["Basic","text","preprocessing",":","param","text",":",":","return",":"]
code: def tokenize(self, text: str) -> List[str]:
      """
      Basic text preprocessing
      :param text:
      :return:
      """
  
      text = text.lower()
      text = re.sub(r"([.,!?])", r" \1 ", text)
      text = re.sub(r"[^a-zA-Z.,!?]+", r" ", text)
      tokens = text.split(" ")
      if not tokens[-1]:
          tokens = tokens[:-1]
  
      return tokens
  
file_path: transfer-nlp/transfer_nlp/common/tokenizers.py
imports: import logging
  import re
  from typing import List
label_desc: Use image node_id 2 for calling the CustomTokenizer obj's underlying member method code with example usage: obj.tokenize(text) and returns: tokens