Найти в Дзене

Ну и третий эксперимент: случайная перестановка слов с сохранением структуры предложений

Ну и третий эксперимент: случайная перестановка слов с сохранением структуры предложений. Пример результата: девицы окном Три под поздно вечерком Пряли. «царица была я Кабы, — девица одна Говорит, — весь мир на крещеный То Приготовила пир я б». Код: import random import re # Вставь сюда полный текст поэмы text = """Три девицы под окном Пряли поздно вечерком. «Кабы я была царица, — Говорит одна девица, — То на весь крещеный мир Приготовила б я пир».""" # Разбиваем текст на предложения sentences = re.split(r'(?<=[.!?…])\s+|(?<=\n)', text) # Функция для случайной перестановки слов в пределах одного предложения def shuffle_sentence(sentence): # Сохраняем знаки препинания при разбиении words = re.findall(r'\w+|[^\w\s]', sentence, re.UNICODE) words_only = [w for w in words if re.match(r'\w+', w)] punct = [w for w in words if not re.match(r'\w+', w)] shuffled_words = words_only[:] random.shuffle(shuffled_words) # Восстанавливаем предложение, вставляя пунктуацию на прежние позиции shuf

Ну и третий эксперимент: случайная перестановка слов с сохранением структуры предложений.

Пример результата:

девицы окном Три под

поздно вечерком Пряли.

«царица была я Кабы, —

девица одна Говорит, —

весь мир на крещеный То

Приготовила пир я б».

Код:

import random

import re

# Вставь сюда полный текст поэмы

text = """Три девицы под окном

Пряли поздно вечерком.

«Кабы я была царица, —

Говорит одна девица, —

То на весь крещеный мир

Приготовила б я пир»."""

# Разбиваем текст на предложения

sentences = re.split(r'(?<=[.!?…])\s+|(?<=\n)', text)

# Функция для случайной перестановки слов в пределах одного предложения

def shuffle_sentence(sentence):

# Сохраняем знаки препинания при разбиении

words = re.findall(r'\w+|[^\w\s]', sentence, re.UNICODE)

words_only = [w for w in words if re.match(r'\w+', w)]

punct = [w for w in words if not re.match(r'\w+', w)]

shuffled_words = words_only[:]

random.shuffle(shuffled_words)

# Восстанавливаем предложение, вставляя пунктуацию на прежние позиции

shuffled = []

idx = 0

for token in words:

if re.match(r'\w+', token):

shuffled.append(shuffled_words[idx])

idx += 1

else:

shuffled.append(token)

return ' '.join(shuffled)

# Применяем к каждому предложению

shuffled_sentences = [shuffle_sentence(s.strip()) for s in sentences if s.strip()]

# Собираем текст обратно

shuffled_text = '\n'.join(shuffled_sentences)

print(shuffled_text)