Повторные фразы в тексте 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')