input: from typing import List, Tuple
  
  def sentiment_analysis(reviews: List[str], sentiments: List[str]) -> Tuple[float, float, float]:
      """ Perform sentiment analysis on given product reviews. 
      The program uses natural language processing techniques like tokenization and n-grams 
      to generate features for sentiment analysis. It then uses a classification model to 
      assign sentiments to the reviews.
      The function returns a tuple with precision, recall, and f1-score of the sentiment analysis model.
  
      >>> sentiment_analysis(['I love this product!'], ['positive'])
      (1.0, 1.0, 1.0)
      >>> sentiment_analysis(['Terrible product!', 'Great product!'], ['negative', 'positive'])
      (1.0, 1.0, 1.0)
      """
output:     from sklearn.feature_extraction.text import CountVectorizer
      from sklearn.naive_bayes import MultinomialNB
      from sklearn.metrics import precision_score, recall_score, f1_score
  
      vectorizer = CountVectorizer()
      X = vectorizer.fit_transform(reviews)
      y = sentiments
  
      model = MultinomialNB()
      model.fit(X, y)
  
      y_pred = model.predict(X)
  
      precision = precision_score(y, y_pred, average='weighted')
      recall = recall_score(y, y_pred, average='weighted')
      f1 = f1_score(y, y_pred, average='weighted')
  
      return precision, recall, f1