code: def process_file(fp):
      """Reading the raw data from a file of NeMo format and preprocesses it. Write is out to the output directory.
      For more info about the data format, refer to the
      `text_normalization doc <https://github.com/NVIDIA/NeMo/blob/main/docs/source/nlp/text_normalization.rst>`.
  
      Args:
          fp: file path
      """
      file_name = fp.split("/")[-1]
      output_path = f"{args.output_dir}/{file_name}"
      logging.info(f"-----input_file--------\n{fp}")
      logging.info(f"-----output_file--------\n{output_path}")
  
      insts, w_words, s_words, classes = [], [], [], []
      delete_sentence = False
      with open(fp, "r", encoding="utf-8") as f:
          for line in tqdm(f):
              es = [e.strip() for e in line.strip().split("\t")]
              if es[0] == "<eos>":
                  if not delete_sentence:
                      inst = (classes, w_words, s_words)
                      insts.append(inst)
                  # Reset
                  w_words, s_words, classes = [], [], []
                  delete_sentence = False
              else:
                  # convert data sample
                  convert(es)
                  # decide if this data sample's spoken form should be same as written form
                  ignore(es)
  
                  characters_ignore = "¿¡ºª" + "".join(
                      EN_GREEK_TO_SPOKEN.keys()
                  )
                  # delete sentence with greek symbols, etc.
                  if (
                      re.search(rf"[{characters_ignore}]", es[1])
                      is not None
                  ):
                      delete_sentence = True
                  # delete characters from chinese, japanese, korean
                  if re.search(r"[\u4e00-\u9fff]+", es[1]) is not None:
                      delete_sentence = True
  
                  if es[0] == "MONEY" and re.search("\s?DM$", es[1]):
                      delete_sentence = True
  
                  if es[0] == "MEASURE" and re.search("\s?Da$", es[1]):
                      delete_sentence = True
  
                  classes.append(es[0])
                  w_words.append(es[1])
                  s_words.append(es[2])
  
          inst = (classes, w_words, s_words)
          insts.append(inst)
  
      output_f = open(output_path, "w+", encoding="utf-8")
      for _, inst in enumerate(insts):
          cur_classes, cur_tokens, cur_outputs = inst
          for c, t, o in zip(cur_classes, cur_tokens, cur_outputs):
              output_f.write(f"{c}\t{t}\t{o}\n")
  
          output_f.write(f"<eos>\t<eos>\n")
  
file_path: NeMo/examples/nlp/duplex_text_normalization/data/en/data_preprocessing.py
imports: import os
  from argparse import ArgumentParser
  import inflect
  import regex
  from tqdm import tqdm
  from nemo.collections.common.tokenizers.moses_tokenizers import MosesProcessor
  from nemo.collections.nlp.data.text_normalization.constants import EN_GREEK_TO_SPOKEN
  from nemo.collections.nlp.data.text_normalization.utils import add_space_around_dash, convert_fraction, convert_superscript
  from nemo.utils import logging
label_desc: Use image node_id 5 for calling a global function with example usage: process_file(fp) without return types