input: Write a function to analyze the sentiment of a given text using natural language processing techniques. The function should tokenize the text, remove stopwords, stem the remaining words, and then use the VADER sentiment analysis tool to determine the polarity scores of the text. If the text is empty, the function should return an empty dictionary.
  assert sentiment_analyzer("I love this product!") == {'neg': 0.0, 'neu': 0.229, 'pos': 0.771, 'compound': 0.7845}
  assert sentiment_analyzer("This is a terrible experience.") == {'neg': 0.51, 'neu': 0.49, 'pos': 0.0, 'compound': -0.5423}
  assert sentiment_analyzer("") == {}
output: from nltk.tokenize import word_tokenize
  from nltk.corpus import stopwords
  from nltk.stem import PorterStemmer
  from nltk.sentiment.vader import SentimentIntensityAnalyzer
  
  def sentiment_analyzer(text):
      if not text:
          return {}
      
      tokens = word_tokenize(text.lower())
      stop_words = set(stopwords.words('english'))
      filtered_tokens = [word for word in tokens if word.isalnum() and word not in stop_words]
      
      stemmer = PorterStemmer()
      stemmed_tokens = [stemmer.stem(word) for word in filtered_tokens]
      
      analyzer = SentimentIntensityAnalyzer()
      sentiment_scores = analyzer.polarity_scores(' '.join(stemmed_tokens))
      
      return sentiment_scores