docs: def MP(candidate, references, n):
      """
      calculate modified precision
      """
      counts = Counter(ngrams(candidate, n))
      if not counts:
          return 0
  
      max_counts = {}
      for reference in references:
          reference_counts = Counter(ngrams(reference, n))
          for ngram in counts:
              max_counts[ngram] = max(max_counts.get(ngram, 0), reference_counts[ngram])
  
      clipped_counts = dict((ngram, min(count, max_counts[ngram])) for ngram, count in counts.items())
  
      return sum(clipped_counts.values()) / sum(counts.values())