input: Write a function to analyze the sentiment of a text and return the polarity score. The function should tokenize the text, remove stopwords, stem the remaining words, and then calculate the sentiment polarity score using a sentiment analysis tool. If the input text is empty, the function should return an empty dictionary.
  assert sentiment_analyzer("I love Python programming!")=={'neg': 0.0, 'neu': 0.313, 'pos': 0.687, 'compound': 0.6369}
  assert sentiment_analyzer("This is a very bad day.")=={'neg': 0.529, 'neu': 0.471, 'pos': 0.0, 'compound': -0.4767}
  assert sentiment_analyzer("")=={}
output: def sentiment_analyzer(text):
      if not text:
          return {}
      from nltk.corpus import stopwords
      from nltk.tokenize import word_tokenize
      from nltk.stem import PorterStemmer
      from vaderSentiment.vaderSentiment import SentimentIntensityAnalyzer
      
      stop_words = set(stopwords.words('english'))
      stemmer = PorterStemmer()
      analyzer = SentimentIntensityAnalyzer()
      
      tokens = word_tokenize(text)
      filtered_tokens = [stemmer.stem(word) for word in tokens if word.lower() not in stop_words]
      filtered_text = ' '.join(filtered_tokens)
      
      sentiment_scores = analyzer.polarity_scores(filtered_text)
      return sentiment_scores