Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # -*- coding: cp1251 -*-
- from random import randint
- def parse_parenthetic(text):
- ''' Парсинг скобок любой вложенности из строки '''
- stack = []
- for i, c in enumerate(text):
- if c == '{':
- stack.append(i)
- elif c == '}' and stack:
- start = stack.pop()
- # на выходе массив - уровень, текст внутри скобок, позиция_начала, позиция_окончания
- yield (len(stack), text[start+1:i], start, i+1)
- def compile_text(text):
- ''' Формирование текста путем раскрытия скобочек '''
- blocks = list(parse_parenthetic(text))
- while blocks:
- levels = {}
- # разбиваем найденые блоки по уровням
- for i, block in enumerate(blocks):
- level = block[0]
- levels[level] = i
- # берем самый вложенный блок
- maxl = max(levels.keys())
- level, block_text, start, end = blocks[levels[maxl]]
- words = block_text.split('|')
- random_word = words[randint(0, len(words)-1)]
- text = text[:start] + random_word + text[end:]
- blocks = list(parse_parenthetic(text))
- return text
- def main():
- text = u"{Пожалуйста|Просто} сделайте так, чтобы это {удивительное|крутое|простое} тестовое предложение {изменялось {быстро|мгновенно} случайным образом|менялось каждый раз}."
- print "Original: %s\n" % (text)
- print "Finish: %s\n" % (compile_text(text))
- if __name__ == "__main__":
- main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement