from random import randrange, random 
import re


TEXT = 'Елена Ваенга срочно госпитализирована в Минске В стране и мире►Шоу-бизнесНа днях Елена Ваенга принимала участие в большом концерте "Шансон года", где выходила на сцену и получила свою награду.Сразу после концерта певице надо было ехать в Минск. Уже сидя в купе поезда, Елена пожаловалась на плохое самочувствие и ее срочно госпитализировали.Уже позже в блоге Ваенги появилась фотография, сделанная с больничной койки. На ней видно, что певице поставили капельницу. Под снимком Елена написала для подписчиков: "Писать, что мне лучше, я не буду. Вранье. Мне чуть - чуть хуже.... но мы с врачами боремся......)))))) белорусские врачи очень хорошие..... и все обо мне заботятся и лечат..... так вышло... так получилось...... я должна отболеть свои грехи в пост.... всякое бывает..... да мне жаль себя.... и да.... я не отменю концерты....... некуда перенести.(((((((( если хуже не станет...... надеюсь........ главное, чтобы не пропал голос..... это главное......когда НЕЧЕМ петь тогда каюк..... а пока....... боремся и лечимся ...... все. целую....'
RESTRICTED = r'[,.-]'
RANDOM_FACTOR = 5

def normalize_word(word):
    
    found = re.search(RESTRICTED, word)
    if found:
        result = word[:found.start()] + randrange(RANDOM_FACTOR) * '.'
        result += normalize_word(word[found.end():])
        return result
    else:
        return word


def attach_stuff(word, thing):
    symbols = thing * 2 * randrange(RANDOM_FACTOR)
    return '{0}{1}'.format(word, symbols)

def dots(word):
    return attach_stuff(word, '.')

def smile(word):
    return attach_stuff(word, ')')

def lowcase(word):
    lucky_number_sosnytsky = 1.0 * RANDOM_FACTOR / 20
    if random() < lucky_number_sosnytsky:
        return word.lower()
    return word

WORD_FUNCTS = {0:    smile,
               1:    dots,
               2:    lowcase}


def trial(word):
    new_word = WORD_FUNCTS[randrange(3)](word)
    if random() > 0.95 * (1.0 / RANDOM_FACTOR) :
        new_word = trial(word)
        return new_word
    return new_word


def roll():
    words = TEXT.split()
    normalized_words = [normalize_word(word).upper() for word in words]
    result = ' '.join([trial(word) for word in normalized_words])
    print(result)

roll()
