Generate unigram, bigram, trigram ... and the max-gram,
    different from powerset(), this function will not generate skipped combinations such as (1,3)

def power_ngram(iter_tokens):
    """
    Generate unigram, bigram, trigram ... and the max-gram,
    different from powerset(), this function will not generate skipped combinations such as (1,3)
    """
    return chain.from_iterable(ngram(j, iter_tokens) for j in range(1, len(iter_tokens) + 1))