input: Write a function to analyze the sentiment of a given text by tokenizing it, stemming each token, removing punctuation and stopwords, and finally calculating the polarity score using the VADER SentimentIntensityAnalyzer. The function should return the polarity score.
  assert sentiment_analyzer("I love this product!")== {'neg': 0.0, 'neu': 0.286, 'pos': 0.714, 'compound': 0.6114}
  assert sentiment_analyzer("This is a bad experience.")== {'neg': 0.663, 'neu': 0.337, 'pos': 0.0, 'compound': -0.6124}
  assert sentiment_analyzer("The weather is neutral today.")== {'neg': 0.0, 'neu': 0.801, 'pos': 0.199, 'compound': 0.4019}
  assert sentiment_analyzer("Absolutely fantastic!")== {'neg': 0.0, 'neu': 0.296, 'pos': 0.704, 'compound': 0.6705}
  assert sentiment_analyzer("")== {'neg': 0.0, 'neu': 0.0, 'pos': 0.0, 'compound': 0.0}
output: from nltk.tokenize import word_tokenize
  from nltk.stem import PorterStemmer
  from nltk.corpus import stopwords
  from string import punctuation
  from nltk.sentiment.vader import SentimentIntensityAnalyzer
  
  def sentiment_analyzer(text):
      stemmer = PorterStemmer()
      stop_words = set(stopwords.words('english'))
      analyzer = SentimentIntensityAnalyzer()
      
      tokens = word_tokenize(text.lower())
      filtered_tokens = [stemmer.stem(word) for word in tokens if word.isalnum() and word not in stop_words and word not in punctuation]
      filtered_text = ' '.join(filtered_tokens)
      
      return analyzer.polarity_scores(filtered_text)