input: Write a python function to preprocess text by converting to lowercase, removing non-alphanumeric characters, tokenizing, and removing stopwords.
  assert preprocess("Hello World!") == "hello world"
  assert preprocess("Python is fun!!!") == "python fun"
  assert preprocess("This is a test tweet... #testing") == "test tweet"
output: def preprocess(text):
      import re
      from nltk.corpus import stopwords
      from nltk.tokenize import word_tokenize
      
      # Convert to lowercase
      text = text.lower()
      
      # Remove non-alphanumeric characters
      text = re.sub(r'\W+', ' ', text)
      
      # Tokenize
      tokens = word_tokenize(text)
      
      # Remove stopwords
      stop_words = set(stopwords.words('english'))
      filtered_tokens = [word for word in tokens if word not in stop_words]
      
      # Join tokens back into a string
      processed_text = ' '.join(filtered_tokens)
      
      return processed_text