input: def sentiment_analyzer(text: str) -> dict:
      """Analyzes the sentiment of a given text by tokenizing the words, removing stopwords and punctuation,
      stemming the words, and then calculating the polarity score using the VADER sentiment analysis tool.
      >>> sentiment_analyzer("I am very happy today!")
      {'neg': 0.0, 'neu': 0.417, 'pos': 0.583, 'compound': 0.8439}
      >>> sentiment_analyzer("I am feeling sad and disappointed.")
      {'neg': 0.6, 'neu': 0.4, 'pos': 0.0, 'compound': -0.6249}
      """
output:     from nltk.tokenize import word_tokenize
      from nltk.corpus import stopwords
      from nltk.stem import PorterStemmer
      from nltk.sentiment.vader import SentimentIntensityAnalyzer
      import string
  
      # Tokenize the text
      words = word_tokenize(text.lower())
  
      # Remove stopwords and punctuation
      stop_words = set(stopwords.words('english'))
      words = [word for word in words if word.isalnum() and word not in stop_words]
  
      # Stem the words
      stemmer = PorterStemmer()
      words = [stemmer.stem(word) for word in words]
  
      # Calculate sentiment scores
      sia = SentimentIntensityAnalyzer()
      sentiment_scores = sia.polarity_scores(' '.join(words))
  
      return sentiment_scores