code: def read_semiotic_classes(path: str) -> Dict[str, int]:
      """Return semiotic classes map read from the given path."""
      with open(path, "r") as f:
          semiotic_classes = {}
          empty_line_encountered = False
          for tag in f:
              tag = tag.strip()
              if tag:
                  semiotic_classes[tag] = len(semiotic_classes)
              else:
                  if empty_line_encountered:
                      raise ValueError(
                          "There should be no empty lines in the middle of the label map "
                          "file."
                      )
                  empty_line_encountered = True
          return semiotic_classes
  
file_path: NeMo/nemo/collections/nlp/data/text_normalization_as_tagging/utils.py
imports: import re
  from itertools import groupby
  from typing import Dict, List, Tuple
  import numpy
label_desc: Use image node_id 4 for calling a global function with example usage: read_semiotic_classes(path) and returns: semiotic_classes