Untitled

 avatar
unknown
plain_text
a year ago
1.3 kB
6
Indexable
import re
import random

def parse_spintax(text, num_variations):
    pattern = r'\{([^{}]+)\}'
    matches = re.findall(pattern, text)
    variations = []
    possible_variants = 1
    for match in matches:
        options = match.split('|')
        variations.append(options)
        possible_variants = possible_variants * len(options)
    print(possible_variants)
    parsed_texts = set()
    while len(parsed_texts) < num_variations:
        parsed_text = text
        for options in variations:
            selected_option = random.choice(options)
            parsed_text = parsed_text.replace("{" + "|".join(options) + "}", selected_option, 1)
        if parsed_text not in parsed_texts:
            parsed_texts.add(parsed_text) 
        if len(parsed_texts) == possible_variants: 
            return parsed_texts

        random.shuffle(variations)
    return parsed_texts

text_with_spintax = '''{Hello|Hi} Name
'''

num_variations = 10
parsed_variations = parse_spintax(text_with_spintax, num_variations)

with open('skazka.txt', 'w') as file:
    for i, variation in enumerate(parsed_variations, start=1):
        variation = re.sub(r'\{|\}', '', variation)
        file.write(f"{i}. {variation}\n")

print("500 variations have been saved in 'skazka.txt'.")
Editor is loading...
Leave a Comment