Форум сайта python.su
Я бы закодировал текст в ритм, используя базу соответствий “слог-единица ритма”, а дальше бы пользовался алгоритмами распознавания образов/обработки сигналов. Так можно выделить и стихотворные строки и связанные словосочетания, хотя для последних более подошли бы алгоритмы на н-граммах.
Отредактировано Shaman (Июнь 10, 2014 11:08:20)
Офлайн
Shaman
Я бы закодировал текст в ритм, используя базу соответствий “слог-единица ритма”, а дальше бы пользовался алгоритмами распознавания образов/обработки сигналов. Так можно выделить и стихотворные строки и связанные словосочетания, хотя для последних более подошли бы алгоритмы на н-граммах.
Отредактировано BlackRabbit (Июнь 10, 2014 12:30:26)
Офлайн
BlackRabbit
Хорошо, абстрагируемся от конкретного текста и представим, что они есть, тем более в былинах повторы слов могут быть вполне. Меня интересует сам принцип, понимаете.
Как по морю, морю по синему
Бегут-побегут тридцать кораблей,
Тридцать кораблей — един Сокол-корабль
Самого Садка, гостя богатого.
А все корабли что соколы летят,
Сокол-корабль на море стоит.
Офлайн
Окей. В начальном скрипте уже имеется алгоритм, который устанавливает условный “рейтинг” наиболее повторяемых (ключевых) слов. Только он их ищет по всему тексту.
Мне нужно чтобы скрипт на входе разбивал текст на стихотворные строки и делал такой рейтинг для слов внутри отдельных строк. Может, задание выглядит несколько бессмысленным, но, пожалуйста, помогите разобраться с кодом.
А в примере будут повторяться внутри отдельной строки слова:
Как по морю, морю по синему
Бегут-побегут тридцать кораблей,
Тридцать кораблей — един Сокол-корабль
Самого Садка, гостя богатого.
А все корабли что соколы летят,
Сокол-корабль на море стоит.
Следовательно, у них “рейтинг” будет выше.
Спасибо.
Офлайн
BlackRabbitТам ещё слово “по” повторяется.
А в примере будут повторяться внутри отдельной строки слова:
BlackRabbitВо-первых, он не очень грамотно написан.
В начальном скрипте уже имеется алгоритм, который устанавливает условный “рейтинг” наиболее повторяемых (ключевых) слов.
Как по морю, морю по синему
Офлайн
Окей. Попробую объяснить. Идея просто в том, что когда считаем пары слов, нужно чтобы программа считывала только те пары, которые встречаются внутри одной строки. Например, если у нас есть строки
Я вас любил, любовь еще, быть может,
В моей душе угасла не совсем.
Нужно считать: “я вас, вас любил … быть может, в моей, моей душе …”, пропуская «может в», и то же самое с общим количеством пар: 6 пар для первой строки, 5 пар для второй строки и т.п. Надо просто разбить текст на строки и по очереди запускать алгоритм подсчета пар для каждой строки.
Отредактировано BlackRabbit (Июнь 12, 2014 11:41:45)
Офлайн
может здесь найдете полезное?
Офлайн
Да, возможно, а как же будет выглядеть код? Можно вариант?
Отредактировано BlackRabbit (Июнь 12, 2014 20:42:34)
Офлайн
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Это выбирается после разбиения.
пропуская «может в»
Отредактировано py.user.next (Июнь 12, 2014 22:04:16)
Офлайн
О, спасибо за вариант! Но у меня не срабатывает. Выдает пустоту. А как мне сделать, чтобы это все проделывалось с открываемым текстом из файла
with open('c:\Texts\File1', 'r', encoding = 'utf-8') as inp:
Отредактировано BlackRabbit (Июнь 12, 2014 23:24:20)
Офлайн