input: def sentiment_analyzer(text: str) -> dict:
      """Analyze the sentiment of the given text by tokenizing, stemming, cleaning, removing stopwords, and calculating polarity scores.
      
      Example:
      >>> sentiment_analyzer("I love this movie so much!")
      {'neg': 0.0, 'neu': 0.295, 'pos': 0.705, 'compound': 0.8316}
      
      >>> sentiment_analyzer("I really hate this product and it's terrible!")
      {'neg': 0.646, 'neu': 0.354, 'pos': 0.0, 'compound': -0.7717}
      """
output:     from nltk.tokenize import word_tokenize
      from nltk.stem import PorterStemmer
      from nltk.corpus import stopwords
      from nltk.sentiment import SentimentIntensityAnalyzer
      import re
  
      # Tokenize the text
      tokens = word_tokenize(text.lower())
  
      # Remove non-alphabetic characters and stopwords
      cleaned_tokens = [re.sub(r'[^a-zA-Z]', '', token) for token in tokens if token.isalpha() and token not in stopwords.words('english')]
  
      # Stem the tokens
      stemmer = PorterStemmer()
      stemmed_tokens = [stemmer.stem(token) for token in cleaned_tokens]
  
      # Join the tokens back into a single string
      cleaned_text = ' '.join(stemmed_tokens)
  
      # Calculate sentiment scores
      sia = SentimentIntensityAnalyzer()
      sentiment_scores = sia.polarity_scores(cleaned_text)
  
      return sentiment_scores