code: def get_between_ngrams(c, attrib="words", n_min=1, n_max=1, lower=True):
      
      if len(c) != 2:
          raise ValueError("Only applicable to binary Candidates")
      span0 = _to_span(c[0])
      span1 = _to_span(c[1])
      if span0.sentence != span1.sentence:
          raise ValueError(
              "Only applicable to Candidates where both spans are \
                            from the same immediate Context."
          )
      distance = abs(span0.get_word_start_index() - span1.get_word_start_index())
      if span0.get_word_start_index() < span1.get_word_start_index():
          for ngram in get_right_ngrams(
              span0,
              window=distance - 1,
              attrib=attrib,
              n_min=n_min,
              n_max=n_max,
              lower=lower,
          ):
              yield ngram
      else:  # span0.get_word_start_index() > span1.get_word_start_index()
          for ngram in get_right_ngrams(
              span1,
              window=distance - 1,
              attrib=attrib,
              n_min=n_min,
              n_max=n_max,
              lower=lower,
          ):
              yield ngram
docs: Return the ngrams *between* two unary Mentions of a binary-Mention Candidate.
  
      Get the ngrams *between* two unary Mentions of a binary-Mention Candidate,
      where both share the same sentence Context.
  
      :param c: The binary-Mention Candidate to evaluate.
      :param attrib: The token attribute type (e.g. words, lemmas, poses)
      :param n_min: The minimum n of the ngrams that should be returned
      :param n_max: The maximum n of the ngrams that should be returned
      :param lower: If 'True', all ngrams will be returned in lower case
      :rtype: a *generator* of ngrams