41 lines
1.1 KiB
Python
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()) |