Shaman
Я бы закодировал текст в ритм, используя базу соответствий “слог-единица ритма”, а дальше бы пользовался алгоритмами распознавания образов/обработки сигналов. Так можно выделить и стихотворные строки и связанные словосочетания, хотя для последних более подошли бы алгоритмы на н-граммах.
BlackRabbit
Хорошо, абстрагируемся от конкретного текста и представим, что они есть, тем более в былинах повторы слов могут быть вполне. Меня интересует сам принцип, понимаете.
Как по морю, морю по синему
Бегут-побегут тридцать кораблей,
Тридцать кораблей — един Сокол-корабль
Самого Садка, гостя богатого.
А все корабли что соколы летят,
Сокол-корабль на море стоит.
BlackRabbitТам ещё слово “по” повторяется.
А в примере будут повторяться внутри отдельной строки слова:
BlackRabbitВо-первых, он не очень грамотно написан.
В начальном скрипте уже имеется алгоритм, который устанавливает условный “рейтинг” наиболее повторяемых (ключевых) слов.
Как по морю, морю по синему
import re import itertools text = """ Как по морю, морю по синему Бегут-побегут тридцать кораблей, Тридцать кораблей — един Сокол-корабль Самого Садка, гостя богатого. А все корабли что соколы летят, Сокол-корабль на море стоит. """ def convert_to_pairs(text): out = [] for line in text.splitlines(): words = re.findall(r'\w+', line) if words: pairs = list(pairwise(words)) out.append(pairs) return out def pairwise(seq): a, b = itertools.tee(seq, 2) next(b) return zip(a, b) out = convert_to_pairs(text) out
>>> out [[('Как', 'по'), ('по', 'морю'), ('морю', 'морю'), ('морю', 'по'), ('по', 'синему')], [('Бегут', 'побегут'), ('побегут', 'тридцать'), ('тридцать', 'кораблей')], [('Тридцать', 'кораблей'), ('кораблей', 'един'), ('един', 'Сокол'), ('Сокол', 'корабль')], [('Самого', 'Садка'), ('Садка', 'гостя'), ('гостя', 'богатого')], [('А', 'все'), ('все', 'корабли'), ('корабли', 'что'), ('что', 'соколы'), ('соколы', 'летят')], [('Сокол', 'корабль'), ('корабль', 'на'), ('на', 'море'), ('море', 'стоит')]] >>>
BlackRabbitЭто выбирается после разбиения.
пропуская «может в»
with open('c:\Texts\File1', 'r', encoding = 'utf-8') as inp: