def break_down(text):
    words = text.split()
ns = list(range(1, len(words)))
for n in ns:
    for idxs in itertools.combinations(ns, n):
        yield [' '.join(words[i:j]) for i, j in zip((0,) + idxs, idxs + (
            None,))]
Разбить строку на все возможные упорядоченные фразы