#!/usr/bin/python3 import json import os from collections import defaultdict base = os.path.abspath(os.path.dirname(__file__)) keywords = json.load(open(os.path.join(base, 'keywords.json'))) ontology = json.load(open(os.path.join(base, 'ontology.json'))) def find_path(parent, root=None, path=None): if root is None: root = ontology if path is None: path = [] for key in root: if key == parent: return path + [key] elif root[key]: r = find_path(parent, root[key], path + [key]) if r: return r def get_node(name, children, parent=None): node = { "size": len(children) + 100, "name": name, "children": [get_node(child, children[child], name) for child in children] } if not node['children']: del node['children'] key = '%s: %s' % (parent, name) if key in keywords: node['size'] = keywords[key] return node if __name__ == '__main__': os.chdir(base) tree = defaultdict(dict) for keyword in keywords: parent, child = keyword.split(': ') path = find_path(parent) if path: p = tree for part in path: if part not in p: p[part] = {} p = p[part] p[child] = {} else: if parent not in tree['missing']: tree['missing'][parent] = {} tree['missing'][parent][child] = {} print('missing root - %s: %s' % (parent, child)) #print(json.dumps(tree, indent=4, sort_keys=True)) sized_ontology = { "size": len(tree), "name": "CineMuseSpace", "children": [] } for name in tree: children = tree[name] child = get_node(name, tree[name], name) sized_ontology['children'].append(child) with open('../static/ontology/sized_ontology.json', 'w') as fd: json.dump(sized_ontology, fd, indent=4, sort_keys=True)