Повторные фразы в тексте Python _ Follow up

Другой пользователь уже открыл дискуссию о том, как найти повторяющиеся фразы в Python, но сосредоточился только на фразах из трех слов.

Ответ Роберта Россни был полным и рабочим (это здесь повторяющиеся фразы в тексте Python), но могу ли я попросить метод, который просто находит повторяющиеся фразы, несмотря на их длину? Я думаю, что можно уточнить метод, уже разработанный в предыдущем обсуждении, но я не совсем уверен, как это сделать.

Я думаю, что это функция, которая может быть изменена для возврата кортежей разной длины:

def phrases(words):
    phrase = []
    for word in words:
        phrase.append(word)
        if len(phrase) > 3:
            phrase.remove(phrase[0])
        if len(phrase) == 3:
            yield tuple(phrase)

1 ответ

Одна простая модификация - передать длину слова phrases метод, а затем вызвать метод с различной длиной слова.

def phrases(words, wlen):
  phrase = []
  for word in words:
    phrase.append(word)
    if len(phrase) > wlen:
        phrase.remove(phrase[0])
    if len(phrase) == wlen:
        yield tuple(phrase)

А затем определить all_phrases как

def all_phrases(words):
   for l in range(1, len(words)):
      yield phrases(words, l)

И тогда один из способов его использования

for w in all_phrases(words):
   for g in w:
     print g

За words = ['oer', 'the', 'bright', 'blue', 'sea'], он производит:

('oer',)
('the',)
('bright',)
('blue',)
('sea',)
('oer', 'the')
('the', 'bright')
('bright', 'blue')
('blue', 'sea')
('oer', 'the', 'bright')
('the', 'bright', 'blue')
('bright', 'blue', 'sea')
('oer', 'the', 'bright', 'blue')
('the', 'bright', 'blue', 'sea')
Другие вопросы по тегам