input: Write a function to read in a tweet and remove all punctuation, special characters and stopwords. The function should return a list of cleaned tokens. If the tweet is empty, the function should return an empty list.
  import re
  from nltk.corpus import stopwords
  
  assert clean_tweet("I'm so excited to be going to the #MuseumTour! #BigDay #travel") == ['excited', 'going', 'MuseumTour', 'BigDay', 'travel']
  assert clean_tweet("") == []
  assert clean_tweet("This is a test.") == ['test']
  assert clean_tweet("!!!Hello, world!!!") == ['Hello', 'world']
  assert clean_tweet("Nothing to remove.") == ['Nothing', 'remove']
output: def clean_tweet(tweet):
      if not tweet:
          return []
      tweet = re.sub(r'[^\w\s]', '', tweet)
      tokens = tweet.split()
      stop_words = set(stopwords.words('english'))
      cleaned_tokens = [word for word in tokens if word.lower() not in stop_words]
      return cleaned_tokens