input: Write a function to analyze the sentiment of a given text. The function should tokenize the text, stem each token, remove punctuation and stopwords, and then provide a polarity score using a SentimentIntensityAnalyzer. If the text is empty, return an empty dictionary.
  assert sentiment_analyzer("I love this movie!") == {'neg': 0.0, 'neu': 0.391, 'pos': 0.609, 'compound': 0.6369}
  assert sentiment_analyzer("This is a very bad experience.") == {'neg': 0.518, 'neu': 0.482, 'pos': 0.0, 'compound': -0.5423}
  assert sentiment_analyzer("") == {}
output: from nltk.tokenize import word_tokenize
  from nltk.stem import PorterStemmer
  from nltk.corpus import stopwords
  from nltk.sentiment import SentimentIntensityAnalyzer
  import string
  
  def sentiment_analyzer(text):
      if not text:
          return {}
      
      tokens = word_tokenize(text.lower())
      stemmer = PorterStemmer()
      stop_words = set(stopwords.words('english'))
      filtered_tokens = [stemmer.stem(token) for token in tokens if token.isalpha() and token not in stop_words]
      
      sia = SentimentIntensityAnalyzer()
      sentiment_scores = sia.polarity_scores(' '.join(filtered_tokens))
      
      return sentiment_scores