input: from typing import List
  
  
  def sentiment_analysis(reviews: List[str]) -> str:
      """
      Perform sentiment analysis on a list of product reviews using natural language processing techniques.
      The function tokenizes each review, removes stopwords, normalizes words, and generates features using
      the CountVectorizer. A classification model (Multinomial Naive Bayes) is then trained on these features
      to predict the sentiment of the test reviews.
      
      >>> sentiment_analysis(['This product is amazing!', 'It is not worth the money.'])
      '              precision    recall  f1-score   support\n\n  negative       0.00      0.00      0.00         1\n  positive       0.50      1.00      0.67         1\n\n    accuracy                           0.50         2\n   macro avg       0.25      0.50      0.33         2\nweighted avg       0.25      0.50      0.33         2\n'
      """
output:     from sklearn.feature_extraction.text import CountVectorizer
      from sklearn.naive_bayes import MultinomialNB
      from sklearn.pipeline import make_pipeline
      from sklearn.metrics import classification_report
      from nltk.corpus import stopwords
      from nltk.tokenize import word_tokenize
      from nltk.stem import WordNetLemmatizer
      import string
  
      def preprocess(text):
          tokens = word_tokenize(text.lower())
          tokens = [word for word in tokens if word.isalpha()]
          tokens = [word for word in tokens if word not in stopwords.words('english')]
          lemmatizer = WordNetLemmatizer()
          tokens = [lemmatizer.lemmatize(word) for word in tokens]
          return ' '.join(tokens)
  
      processed_reviews = [preprocess(review) for review in reviews]
  
      vectorizer = CountVectorizer()
      X = vectorizer.fit_transform(processed_reviews)
  
      y = ['positive' if 'amazing' in review else 'negative' for review in reviews]
  
      model = make_pipeline(CountVectorizer(), MultinomialNB())
      model.fit(processed_reviews, y)
  
      y_pred = model.predict(processed_reviews)
  
      return classification_report(y, y_pred)