Files
markov/Markov.py
2026-02-24 21:15:27 -05:00

41 lines
1.1 KiB
Python

import random
import json
import argparse
def select(model: dict):
m_filtered = list(filter(lambda i: i[0] != "_count", model.items()))
return random.choices(
list(map(lambda i: i[0], m_filtered)),
list(map(lambda i: i[1]["_count"], m_filtered)),
k=1
)[0]
def generate_token(model, former, current):
p = random.random()
if p <= 0.90:
try:
return select(model[former][current])
except: pass
if p <= 0.98:
try:
return select(model[current])
except: pass
return select(model)
def main(args):
with open(args.model) as m_file: model = json.load(m_file)
former = select(model)
current = select(model[former])
print(f"{former} {current} ", end="")
for _ in range(args.size - 2):
prior = generate_token(model, former, current)
print(prior + " ", end="")
former = current
current = prior
if __name__ == "__main__":
parser = argparse.ArgumentParser()
parser.add_argument('model')
parser.add_argument('-s', '--size', default=100, type=int)
main(parser.parse_args())