input: Write a python function to process text by normalizing, tokenizing, and lemmatizing it.
  assert LemNormalize("Hello, how are you?") == ['hello', 'how', 'are', 'you']
  assert LemNormalize("Running, jumped, and swimming!") == ['running', 'jumped', 'and', 'swimming']
  assert LemNormalize("Cats, dogs, and birds.") == ['cat', 'dog', 'and', 'bird']
output: def LemNormalize(text):
      import nltk
      from nltk.tokenize import word_tokenize
      from nltk.corpus import wordnet
      from nltk.stem import WordNetLemmatizer
      import string
  
      # Download necessary NLTK data
      nltk.download('punkt', quiet=True)
      nltk.download('wordnet', quiet=True)
      nltk.download('omw-1.4', quiet=True)
  
      # Initialize the lemmatizer
      lemmatizer = WordNetLemmatizer()
  
      # Normalize the text by converting it to lowercase and removing punctuation
      text = text.lower()
      text = text.translate(str.maketrans('', '', string.punctuation))
  
      # Tokenize the text
      tokens = word_tokenize(text)
  
      # Lemmatize each token
      lemmatized_tokens = [lemmatizer.lemmatize(token) for token in tokens]
  
      return lemmatized_tokens