|
|
|
"""
|
|
|
|
Michael Murtaugh
|
|
|
|
Following Charles Hayden's 1990's interpretation implemented in Java
|
|
|
|
(C) 2018 and released under the Free Art License 1.3
|
|
|
|
See LICENSE.txt and http://artlibre.org/licence/lal/en/
|
|
|
|
|
|
|
|
For use with eliza.js
|
|
|
|
Usage:
|
|
|
|
|
|
|
|
python3 eliza_script_to_json.py < doctor.txt > doctor.json
|
|
|
|
|
|
|
|
"""
|
|
|
|
import sys, json
|
|
|
|
|
|
|
|
output = {}
|
|
|
|
output['pre'] = pre = []
|
|
|
|
output['post'] = post = []
|
|
|
|
output['synon'] = synon = []
|
|
|
|
output['quit'] = quit = []
|
|
|
|
output['keywords'] = keys = []
|
|
|
|
for line in sys.stdin:
|
|
|
|
line = line.strip()
|
|
|
|
if line.startswith("#") or not line:
|
|
|
|
continue
|
|
|
|
cmd, rest = line.split(" ", 1)
|
|
|
|
cmd = cmd.strip()
|
|
|
|
rest = rest.strip()
|
|
|
|
if cmd == "initial:":
|
|
|
|
output['initial'] = rest
|
|
|
|
elif cmd == "final:":
|
|
|
|
output['final'] = rest
|
|
|
|
elif cmd == "pre:":
|
|
|
|
pre.append(rest)
|
|
|
|
elif cmd == "post:":
|
|
|
|
post.append(rest)
|
|
|
|
elif cmd == "synon:":
|
|
|
|
synon.append(rest)
|
|
|
|
elif cmd == "key:":
|
|
|
|
try:
|
|
|
|
token, weight = rest.split()
|
|
|
|
except ValueError:
|
|
|
|
token = rest.strip()
|
|
|
|
weight = 0
|
|
|
|
print ("key", token, int(weight), file=sys.stderr)
|
|
|
|
keys.append({"token": token.strip(), "weight": int(weight), "rules": []})
|
|
|
|
elif line.startswith("decomp:"):
|
|
|
|
_, pattern = line.split(" ", 1)
|
|
|
|
pattern = pattern.strip()
|
|
|
|
if pattern.startswith("$"):
|
|
|
|
decomp = {"decomp": pattern[1:].strip(), "reasmb": [], "save": True}
|
|
|
|
else:
|
|
|
|
decomp = {"decomp": pattern, "reasmb": []}
|
|
|
|
print ("decomp", decomp, file=sys.stderr)
|
|
|
|
keys[-1]['rules'].append(decomp)
|
|
|
|
elif line.startswith("reasmb:"):
|
|
|
|
_, pattern = line.split(" ", 1)
|
|
|
|
print ("reasmb", pattern, file=sys.stderr)
|
|
|
|
keys[-1]['rules'][-1]['reasmb'].append(pattern.strip())
|
|
|
|
|
|
|
|
print (json.dumps(output, indent=2))
|