input: Write a function to analyze the sentiment of a given text using the SentimentIntensityAnalyzer from the nltk library. The function should tokenize the text, apply stemming, remove punctuation and stopwords, and return the polarity score of the text.
  assert sentiment_analyzer("I love programming!") == {'neg': 0.0, 'neu': 0.261, 'pos': 0.739, 'compound': 0.8516}
  assert sentiment_analyzer("This project is extremely challenging.") == {'neg': 0.445, 'neu': 0.555, 'pos': 0.0, 'compound': -0.5423}
  assert sentiment_analyzer("The movie was just okay.") == {'neg': 0.0, 'neu': 0.648, 'pos': 0.352, 'compound': 0.3612}
  assert sentiment_analyzer("") == {'neg': 0.0, 'neu': 0.0, 'pos': 0.0, 'compound': 0.0}
  assert sentiment_analyzer("This is a neutral sentence with no strong feelings.") == {'neg': 0.0, 'neu': 1.0, 'pos': 0.0, 'compound': 0.0}
output: from nltk.sentiment 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)