input: Write a function named sentiment_analyzer that takes a text input and returns a polarity score dictionary. The function should tokenize the text, stem each token, remove punctuation and stopwords, and then use the SentimentIntensityAnalyzer to get the sentiment score.
  
  assert sentiment_analyzer("I love this product!")=={'neg': 0.0, 'neu': 0.275, 'pos': 0.725, 'compound': 0.8516}
  assert sentiment_analyzer("This is terrible.")=={'neg': 0.585, 'neu': 0.415, 'pos': 0.0, 'compound': -0.416}
  assert sentiment_analyzer("")=={'neg': 0.0, 'neu': 0.0, 'pos': 0.0, 'compound': 0.0}
output: from nltk.sentiment.vader import SentimentIntensityAnalyzer
  from nltk.tokenize import word_tokenize
  from nltk.stem import PorterStemmer
  from nltk.corpus import stopwords
  import string
  
  def sentiment_analyzer(text):
      sia = SentimentIntensityAnalyzer()
      stemmer = PorterStemmer()
      stop_words = set(stopwords.words('english'))
      tokens = word_tokenize(text.lower())
      filtered_tokens = [stemmer.stem(word) for word in tokens if word.isalpha() and word not in stop_words]
      filtered_text = ' '.join(filtered_tokens)
      return sia.polarity_scores(filtered_text)