input: def sentiment_analyzer(text: str) -> dict:
      """ Analyzes the sentiment of a given text by tokenizing, stemming, cleaning, and scoring the sentiment.
      >>> sentiment_analyzer("I love this product!")
      {'neg': 0.0, 'neu': 0.295, 'pos': 0.705, 'compound': 0.6369}
      >>> sentiment_analyzer("This is a terrible experience.")
      {'neg': 0.625, 'neu': 0.375, 'pos': 0.0, 'compound': -0.6486}
      """
output:     from nltk.sentiment.vader import SentimentIntensityAnalyzer
      from nltk.tokenize import word_tokenize
      from nltk.stem import PorterStemmer
      import re
  
      def clean_text(text):
          text = re.sub(r'[^\w\s]', '', text)
          return text.lower()
  
      def tokenize_and_stem(text):
          tokens = word_tokenize(text)
          stemmer = PorterStemmer()
          stemmed_tokens = [stemmer.stem(token) for token in tokens]
          return stemmed_tokens
  
      cleaned_text = clean_text(text)
      stemmed_tokens = tokenize_and_stem(cleaned_text)
      analyzer = SentimentIntensityAnalyzer()
      sentiment_scores = analyzer.polarity_scores(' '.join(stemmed_tokens))
      return sentiment_scores