Уведомления

Группа в Telegram: @pythonsu

#1 Июнь 10, 2014 11:06:09

Shaman
Зарегистрирован: 2013-03-15
Сообщения: 1369
Репутация: +  88  -
Профиль   Отправить e-mail  

Как Python научить читать стихи? Есть задачка

Я бы закодировал текст в ритм, используя базу соответствий “слог-единица ритма”, а дальше бы пользовался алгоритмами распознавания образов/обработки сигналов. Так можно выделить и стихотворные строки и связанные словосочетания, хотя для последних более подошли бы алгоритмы на н-граммах.

Отредактировано Shaman (Июнь 10, 2014 11:08:20)

Офлайн

#2 Июнь 10, 2014 12:26:47

BlackRabbit
Зарегистрирован: 2013-12-03
Сообщения: 51
Репутация: +  0  -
Профиль   Отправить e-mail  

Как Python научить читать стихи? Есть задачка

Shaman
Я бы закодировал текст в ритм, используя базу соответствий “слог-единица ритма”, а дальше бы пользовался алгоритмами распознавания образов/обработки сигналов. Так можно выделить и стихотворные строки и связанные словосочетания, хотя для последних более подошли бы алгоритмы на н-граммах.

К сожалению, не понял ни слова…
Нет, от меня требуется только подправить имеющийся код, нацелив Python на поиск внутри отдельных строк. Принципиально менять метод не нужно. Мне казалось, нужно 1) в блок, где начинается чтение файла, вписать дополнительные параметры, разбить текст на строки (например, введя соотвествующую переменную), 2) ограничить поиск отдельными строками.

Отредактировано BlackRabbit (Июнь 10, 2014 12:30:26)

Офлайн

#3 Июнь 10, 2014 21:57:23

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9885
Репутация: +  853  -
Профиль   Отправить e-mail  

Как Python научить читать стихи? Есть задачка

BlackRabbit
Хорошо, абстрагируемся от конкретного текста и представим, что они есть, тем более в былинах повторы слов могут быть вполне. Меня интересует сам принцип, понимаете.

В этом тексте работай для выявления алгоритма.

Вот этот фрагмент.
Как по морю, морю по синему
Бегут-побегут тридцать кораблей,
Тридцать кораблей — един Сокол-корабль
Самого Садка, гостя богатого.
А все корабли что соколы летят,
Сокол-корабль на море стоит.

Что ты пытаешься из него выделить?



Офлайн

#4 Июнь 11, 2014 22:50:58

BlackRabbit
Зарегистрирован: 2013-12-03
Сообщения: 51
Репутация: +  0  -
Профиль   Отправить e-mail  

Как Python научить читать стихи? Есть задачка

Окей. В начальном скрипте уже имеется алгоритм, который устанавливает условный “рейтинг” наиболее повторяемых (ключевых) слов. Только он их ищет по всему тексту.
Мне нужно чтобы скрипт на входе разбивал текст на стихотворные строки и делал такой рейтинг для слов внутри отдельных строк. Может, задание выглядит несколько бессмысленным, но, пожалуйста, помогите разобраться с кодом.

А в примере будут повторяться внутри отдельной строки слова:

Как по морю, морю по синему
Бегут-побегут тридцать кораблей,
Тридцать кораблей — един Сокол-корабль
Самого Садка, гостя богатого.
А все корабли что соколы летят,
Сокол-корабль на море стоит.


Следовательно, у них “рейтинг” будет выше.

Спасибо.

Офлайн

#5 Июнь 11, 2014 23:42:09

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9885
Репутация: +  853  -
Профиль   Отправить e-mail  

Как Python научить читать стихи? Есть задачка

BlackRabbit
А в примере будут повторяться внутри отдельной строки слова:
Там ещё слово “по” повторяется.

BlackRabbit
В начальном скрипте уже имеется алгоритм, который устанавливает условный “рейтинг” наиболее повторяемых (ключевых) слов.
Во-первых, он не очень грамотно написан.
Во-вторых, то, что ты описываешь, с тем скриптом не сходится.
В-третьих, сначала придумывается алгоритм, а затем он записывается на подходящем языке, а не наоборот.

Из твоего описания понятно, что ты не знаешь, что ты хочешь получить из текста. Ты точно не знаешь, поэтому точно не можешь объяснить.
Ты не знаешь, что именно ты хочешь получить из одной строки.
Ты не знаешь, что именно ты хочешь получить из всех строк.

Вот входная строка.
Как по морю, морю по синему

Запиши результат, который должен получиться после её обработки.



Офлайн

#6 Июнь 12, 2014 11:40:08

BlackRabbit
Зарегистрирован: 2013-12-03
Сообщения: 51
Репутация: +  0  -
Профиль   Отправить e-mail  

Как Python научить читать стихи? Есть задачка

Окей. Попробую объяснить. Идея просто в том, что когда считаем пары слов, нужно чтобы программа считывала только те пары, которые встречаются внутри одной строки. Например, если у нас есть строки

Я вас любил, любовь еще, быть может,
В моей душе угасла не совсем.


Нужно считать: “я вас, вас любил … быть может, в моей, моей душе …”, пропуская «может в», и то же самое с общим количеством пар: 6 пар для первой строки, 5 пар для второй строки и т.п. Надо просто разбить текст на строки и по очереди запускать алгоритм подсчета пар для каждой строки.

Отредактировано BlackRabbit (Июнь 12, 2014 11:41:45)

Офлайн

#7 Июнь 12, 2014 16:17:23

TroSer
От: Харьков
Зарегистрирован: 2013-11-13
Сообщения: 65
Репутация: +  3  -
Профиль   Отправить e-mail  

Как Python научить читать стихи? Есть задачка

может здесь найдете полезное?

Офлайн

#8 Июнь 12, 2014 20:06:09

BlackRabbit
Зарегистрирован: 2013-12-03
Сообщения: 51
Репутация: +  0  -
Профиль   Отправить e-mail  

Как Python научить читать стихи? Есть задачка

Да, возможно, а как же будет выглядеть код? Можно вариант?

Отредактировано BlackRabbit (Июнь 12, 2014 20:42:34)

Офлайн

#9 Июнь 12, 2014 21:59:41

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9885
Репутация: +  853  -
Профиль   Отправить e-mail  

Как Python научить читать стихи? Есть задачка

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)

Офлайн

#10 Июнь 12, 2014 23:01:57

BlackRabbit
Зарегистрирован: 2013-12-03
Сообщения: 51
Репутация: +  0  -
Профиль   Отправить e-mail  

Как Python научить читать стихи? Есть задачка

О, спасибо за вариант! Но у меня не срабатывает. Выдает пустоту. А как мне сделать, чтобы это все проделывалось с открываемым текстом из файла

with open('c:\Texts\File1', 'r', encoding = 'utf-8') as inp:
? Мне кажется, нужно просто изменить немного начальный код.

Отредактировано BlackRabbit (Июнь 12, 2014 23:24:20)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version