Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import re, random, sys
- def no_empty(lst):
- return filter(bool, lst)
- def map_filter(f, lst):
- return list(no_empty(map(f, lst)))
- def clean_word(s):
- return s.lower().strip(',;«»-"()')
- def split_sentence(s):
- return map_filter(clean_word, re.split('\s+', s.strip()))
- fin = open('tsar.txt', 'r', encoding="utf8")
- data = map_filter(split_sentence, re.split('[\.\?]\s+|\n+', fin.read()))
- fin.close()
- key = {}
- for sentence in data:
- length = len(sentence)
- for idx, word in enumerate(sentence):
- if not word in key: key[word] = []
- key[word].append('<END>' if (idx + 1 == length) else sentence[idx + 1])
- def generate_aux(key, word, res):
- if word in key:
- next_word = random.choice(key[word])
- if next_word == '<END>':
- return res
- else:
- return generate_aux(key, next_word, res + [next_word])
- else:
- return res
- def get_random_word():
- return random.choice(list(key.keys()))
- def get_start():
- return get_random_word() if len(sys.argv) < 2 else sys.argv[1]
- def generate(key, first_word):
- return " ".join(generate_aux(key, first_word, [first_word]))
- def generate_at_least(key, N):
- res = ""
- while len(res) < N: res = generate(key, get_start())
- return res
- for _ in range(15):
- print(generate_at_least(key, 30))
Advertisement
Add Comment
Please, Sign In to add comment