input: from typing import List
  
  def perform_sentiment_analysis(reviews: List[str], sentiments: List[str]) -> str:
      """Given a list of product reviews and corresponding sentiments, performs sentiment analysis using natural language processing techniques like tokenization, removal of stopwords, lemmatization, and n-gram feature extraction. It then trains a Naive Bayes classifier on the processed data and evaluates it using a classification report.
      >>> perform_sentiment_analysis(["I love this product!", "Terrible experience."], ["positive", "negative"])
      '              precision    recall  f1-score   support\n\n    negative       1.00      1.00      1.00         1\n    positive       1.00      1.00      1.00         1\n\navg / total       1.00      1.00      1.00         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
  
      # Preprocessing
      vectorizer = CountVectorizer(stop_words='english', ngram_range=(1, 2))
      X = vectorizer.fit_transform(reviews)
      y = sentiments
  
      # Model Training
      model = make_pipeline(vectorizer, MultinomialNB())
      model.fit(reviews, y)
  
      # Evaluation
      y_pred = model.predict(reviews)
      report = classification_report(y, y_pred)
  
      return report