input: from typing import Dict
  
  def sentiment_analyzer(text: str) -> Dict[str, float]:
      """ Analyze the sentiment of a given text by tokenizing it, stemming, cleaning,
      and then generating a polarity score using SentimentIntensityAnalyzer.
      >>> sentiment_analyzer("I am happy because I love Python programming.")
      {'neg': 0.0, 'neu': 0.362, 'pos': 0.638, 'compound': 0.6114}
      >>> sentiment_analyzer("The weather was very bad today.")
      {'neg': 0.571, 'neu': 0.429, 'pos': 0.0, 'compound': -0.5275}
      """
output:     from nltk.sentiment.vader import SentimentIntensityAnalyzer
      from nltk.tokenize import word_tokenize
      from nltk.stem import PorterStemmer
      from nltk.corpus import stopwords
      import string
  
      # Tokenize the text
      tokens = word_tokenize(text.lower())
  
      # Remove stopwords and punctuation
      stop_words = set(stopwords.words('english'))
      tokens = [word for word in tokens if word not in stop_words and word not in string.punctuation]
  
      # Stem the tokens
      stemmer = PorterStemmer()
      tokens = [stemmer.stem(word) for word in tokens]
  
      # Join the tokens back into a single string
      cleaned_text = ' '.join(tokens)
  
      # Analyze sentiment
      analyzer = SentimentIntensityAnalyzer()
      sentiment_scores = analyzer.polarity_scores(cleaned_text)
  
      return sentiment_scores