Python

Как можно реализовать такой алгоритм размножения текста?

Например на вход дается строка:

"1-2 {комнатные|к.|ком.|Комн.} квартиры в {центре|центре города}. {Хороший|Отличный} ремонт. Все {необходимые документы|документы}. В {этой|данной} квартире {очень|достаточно} комфортно. {В шаговой доступности|Рядом|Рядом с домом} 2 стоянки для {авто|автомобилей}."

вывод должен быть что-то типа:

  1. 1-2 Комн. квартиры в центре города. Хороший ремонт. Все необходимые документы. В данной квартире очень комфортно. Рядом с домом 2 стоянки для автомобилей
  2. 1-2 к. квартиры в центре. Отличный ремонт. Все документы. В этой квартире достаточно комфортно. Рядом 2 стоянки для авто
  3. 1-2 комнатные квартиры в центре. Хороший ремонт. Все необходимые документы. В данной квартире очень комфортно. В шаговой доступности 2 стоянки для автомобилей.
и тд.
 def generate(t, l):
return l and sum([generate(t.replace('@', v, 1), l[1:]) for v in l[0]], []) or [t]

print(*generate(
'1-2 @ квартиры в @. @ ремонт. Все @. В @ квартире @ комфортно. @ 2 стоянки для @.',
[
['комнатные', 'к.', 'ком.', 'Комн.'],
['центре', 'центре города'],
['Хороший', 'Отличный'],
['необходимые документы', 'документы'],
['этой', 'данной'],
['очень', 'достаточно'],
['В шаговой доступности', 'Рядом', 'Рядом с домом'],
['авто', 'автомобилей'],
]), sep='\n')
Последовательный вывод всех возможных вариантов.
Dimonchik
Dimonchik
56 258
Лучший ответ
Сергей Михайловский Где oдинoкий пapeнь мoжет пoзнaкoмитьcя с yмными дeвyшкaми?
Анализируешь текст на теги, составляешь дерево вариантов, далее перебором по дереву.
Гудимов Денис
Гудимов Денис
88 740
Для реализации данного алгоритма можно использовать модуль random для выбора случайного варианта из списка вариантов в фигурных скобках и модуль re для поиска всех подстрок, заключенных в фигурные скобки. Вот пример кода:
 import re 
import random

def expand_text(text):
pattern = r'\{([^{}]+)\}'
matches = re.findall(pattern, text)
for match in matches:
options = match.split('|')
replacement = random.choice(options)
text = re.sub(r'\{'+match+r'\}', replacement, text, count=1)
return text
Эта функция принимает на вход строку text и заменяет все фрагменты, заключенные в фигурные скобки, на случайный вариант из списка вариантов, разделенных символом |. Функция возвращает строку с замененными фрагментами.

Пример использования:
 text = '1-2 {комнатные|к.|ком.|Комн.} квартиры в {центре|центре города}. {Хороший|Отличный} ремонт. Все {необходимые документы|документы}. В {этой|данной} квартире {очень|достаточно} комфортно. {В шаговой доступности|Рядом|Рядом с домом} 2 стоянки для {авто|автомобилей}.' 
for i in range(3):
print(expand_text(text))
Этот код напечатает три разных варианта текста с замененными фрагментами.