input: Write a function to analyze the sentiment of a given text by tokenizing it, stemming each token, removing punctuation and stopwords, and finally determining the sentiment polarity using a SentimentIntensityAnalyzer. The function should return the polarity score of the text.
  assert sentiment_analyzer("I love programming!")=={"neg": 0.0, "neu": 0.254, "pos": 0.746, "compound": 0.8316}
  assert sentiment_analyzer("I hate bugs.")=={"neg": 0.649, "neu": 0.351, "pos": 0.0, "compound": -0.4767}
  assert sentiment_analyzer("The weather is neutral today.")=={"neg": 0.0, "neu": 0.827, "pos": 0.173, "compound": 0.3818}
  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 nltk.sentiment import SentimentIntensityAnalyzer
  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.isalnum() and word not in stop_words]
      filtered_text = ' '.join(filtered_tokens)
      
      return sia.polarity_scores(filtered_text)