def METHOD_NAME(self, summary, apply_language_penalty=True):
    """Score a summary relative to our current view of the dataset."""
    if not self._nltk_installed:
        # Without NLTK, there's no need to evaluate the score.
        return 1
    if isinstance(summary, bytes):
        summary = summary.decode("utf8")
    if summary in self.scores:
        return self.scores[summary]
    METHOD_NAME = 1
    blob = self.blobs[summary]
    top_noun_phrases_used = len(
        [p for p in self.top_noun_phrases if p in blob.noun_phrases])
    METHOD_NAME = 1 * (top_noun_phrases_used/self.noun_phrases_to_consider)
    try:
        sentences = len(blob.sentences)
    except Exception as e:
        # Can't parse into sentences for whatever reason.
        # Make a really bad guess.
        sentences = summary.count(". ") + 1
    off_from_optimal = abs(sentences-self.optimal_number_of_sentences)
    if off_from_optimal == 1:
        off_from_optimal = 1.5
    if off_from_optimal:
        # This summary is too long or too short.
        METHOD_NAME /= (off_from_optimal ** 1.5)
    bad_phrases = 0
    l = summary.lower()
    for i in self.bad_phrases:
        if i in l:
            bad_phrases += 1
    for i in self.bad_res:
        if i.search(summary):
            bad_phrases += 1
    if l.count(" -- ") > 3:
        bad_phrases += (l.count(" -- ") - 3)
    METHOD_NAME *= (0.5 ** bad_phrases)
    if apply_language_penalty:
        language_difference = english_bigrams.difference_from(
            Bigrams.from_string(summary))
        if language_difference > 1:
            METHOD_NAME *= (0.5 ** (language_difference-1))
    return METHOD_NAME