input: Write a function to tokenize sentences using NLTK and lemmatization.
  assert tokenize('What is the time now?') == ['what', 'is', 'the', 'time', 'now', '?']
  assert tokenize('I am learning Python programming!') == ['i', 'am', 'learning', 'python', 'programming', '!']
  assert tokenize('This is a test sentence.') == ['this', 'is', 'a', 'test', 'sentence', '.']
output: def tokenize(sentence):
      import nltk
      from nltk.tokenize import word_tokenize
      from nltk.stem import WordNetLemmatizer
      from nltk.corpus import wordnet
      import string
  
      nltk.download('punkt')
      nltk.download('wordnet')
      nltk.download('omw-1.4')
  
      lemmatizer = WordNetLemmatizer()
  
      def get_wordnet_pos(word):
          """Map POS tag to first character lemmatize() accepts"""
          tag = nltk.pos_tag([word])[0][1][0].upper()
          tag_dict = {"J": wordnet.ADJ,
                      "N": wordnet.NOUN,
                      "V": wordnet.VERB,
                      "R": wordnet.ADV}
  
          return tag_dict.get(tag, wordnet.NOUN)
  
      tokens = word_tokenize(sentence)
      lemmatized_tokens = [lemmatizer.lemmatize(token.lower(), get_wordnet_pos(token)) for token in tokens]
      return lemmatized_tokens