input: Write a function to analyze the sentiment of a given text using tokenization, stemming, stopword removal, and polarity score calculation. Return the polarity score. If the text is empty, return an empty dictionary.
  assert sentiment_analyzer("I love this product!")=={'neg': 0.0, 'neu': 0.246, 'pos': 0.754, 'compound': 0.8439}
  assert sentiment_analyzer("This is the worst experience ever.")=={'neg': 0.625, 'neu': 0.375, 'pos': 0.0, 'compound': -0.7717}
  assert sentiment_analyzer("")=={}
output: def sentiment_analyzer(text):
      if not text:
          return {}
      
      from nltk.sentiment.vader import SentimentIntensityAnalyzer
      from nltk.tokenize import word_tokenize
      from nltk.stem import PorterStemmer
      from nltk.corpus import stopwords
      
      sia = SentimentIntensityAnalyzer()
      tokens = word_tokenize(text)
      stemmer = PorterStemmer()
      stop_words = set(stopwords.words('english'))
      
      filtered_tokens = [stemmer.stem(word) for word in tokens if word.lower() not in stop_words]
      filtered_text = ' '.join(filtered_tokens)
      
      polarity_scores = sia.polarity_scores(filtered_text)
      return polarity_scores