code: def _word_ngrams(vec, tokens, stop_words=None):
      if stop_words is not None:
          tokens = [(s, w) for s, w in tokens if w not in stop_words]
      min_n, max_n = vec.ngram_range
      if max_n == 1:
          tokens = [([s], w) for s, w in tokens]
      else:
          original_tokens = tokens
          tokens = []
          n_original_tokens = len(original_tokens)
          for n in xrange(min_n, min(max_n + 1, n_original_tokens + 1)):
              for i in xrange(n_original_tokens - n + 1):
                  ngram_tokens = original_tokens[i : i + n]
                  tokens.append(
                      (
                          [s for s, _ in ngram_tokens],
                          " ".join(t for _, t in ngram_tokens),
                      )
                  )
      return tokens
  
file_path: eli5/eli5/sklearn/_span_analyzers.py
imports: from __future__ import absolute_import
  import re
  from six.moves import xrange
label_desc: Use image node_id 3 for calling a global function with example usage: _word_ngrams(vec, tokens, stop_words) and returns: tokens