input: Write a function to analyze the sentiment of a given text using the VADER sentiment analysis tool from the NLTK library. The function should tokenize the text, perform stemming, remove punctuation and stopwords, and then return the polarity score of the processed text. If the input text is empty, the function should return a polarity score of 0.0, 0.0, 0.0, 0.0.
  
  assert sentiment_analyzer("I love this product! It's amazing.")=={'neg': 0.0, 'neu': 0.246, 'pos': 0.754, 'compound': 0.8439}
  assert sentiment_analyzer("This is the worst experience I've ever had.")=={'neg': 0.542, 'neu': 0.458, 'pos': 0.0, 'compound': -0.6249}
  assert sentiment_analyzer("")=={'neg': 0.0, 'neu': 0.0, 'pos': 0.0, 'compound': 0.0}
output: def sentiment_analyzer(text):
      from nltk.sentiment.vader import SentimentIntensityAnalyzer
      from nltk.tokenize import word_tokenize
      from nltk.stem import PorterStemmer
      from nltk.corpus import stopwords
      import string
  
      if not text:
          return {'neg': 0.0, 'neu': 0.0, 'pos': 0.0, 'compound': 0.0}
  
      sia = SentimentIntensityAnalyzer()
      tokens = word_tokenize(text.lower())
      stemmer = PorterStemmer()
      stop_words = set(stopwords.words('english'))
      filtered_tokens = [stemmer.stem(word) for word in tokens if word.isalnum() and word not in stop_words]
      processed_text = ' '.join(filtered_tokens)
      sentiment_scores = sia.polarity_scores(processed_text)
      return sentiment_scores