input: Write a function to analyze the sentiment of a given text. The function should use tokenization, stemming, removal of stop words and punctuation, and finally compute the polarity score of the text using the SentimentIntensityAnalyzer from NLTK. The function should return the polarity score as a dictionary. If the input text is empty, the function should return an empty dictionary.
  assert sentiment_analyzer("This is a great day!")== {"neg": 0.0, "neu": 0.542, "pos": 0.458, "compound": 0.6249}
  assert sentiment_analyzer("I am very sad today.")== {"neg": 0.508, "neu": 0.492, "pos": 0.0, "compound": -0.6249}
  assert sentiment_analyzer("")== {}
output: from nltk.sentiment import SentimentIntensityAnalyzer
  from nltk.tokenize import word_tokenize
  from nltk.corpus import stopwords
  from nltk.stem import PorterStemmer
  import string
  
  def sentiment_analyzer(text):
      if not text:
          return {}
      
      sia = SentimentIntensityAnalyzer()
      tokens = word_tokenize(text.lower())
      stop_words = set(stopwords.words('english'))
      stemmer = PorterStemmer()
      
      filtered_tokens = [stemmer.stem(word) for word in tokens if word.isalnum() and word not in stop_words and word not in string.punctuation]
      filtered_text = ' '.join(filtered_tokens)
      
      return sia.polarity_scores(filtered_text)