Spaces:
Running
Running
import random | |
import string | |
def _random_id(): | |
return "n" + ''.join(random.choice(string.ascii_uppercase + string.digits) for _ in range(5)).lower() | |
def _construct_knowledge_graph_spec_node(extrapolated_entity: str): | |
return { | |
"id": _random_id(), | |
"fields": { | |
"name": extrapolated_entity, | |
"type": "entity" | |
} | |
} | |
def _construct_knowledge_graph_spec_link(source: str, target: str, extrapolated_relationship: str): | |
return { | |
"id": _random_id(), | |
"source": source, | |
"target": target, | |
"fields": { | |
"type": extrapolated_relationship | |
} | |
} | |
def convert_to_knowledge_graph_spec(model_results): | |
nodes = [] | |
links = [] | |
node_name_to_id_map = {} | |
link_set = set() | |
for srl_results in model_results: | |
for srl_result in srl_results: | |
subject = None | |
verb = None | |
object = None | |
for tuple in srl_result: | |
if tuple[1] == "ARG0": | |
subject = tuple | |
if tuple[1] == "PRED": | |
verb = tuple | |
if tuple[1] == "ARG1": | |
object = tuple | |
if subject and verb and object: | |
source_node = _construct_knowledge_graph_spec_node(subject[0]) | |
target_node = _construct_knowledge_graph_spec_node(object[0]) | |
source_node_id = source_node["id"] | |
source_node_name = source_node["fields"]["name"] | |
target_node_id = target_node["id"] | |
target_node_name = target_node["fields"]["name"] | |
if source_node_name not in node_name_to_id_map.keys(): | |
node_name_to_id_map[source_node_name] = source_node_id | |
nodes.append(source_node) | |
if target_node_name not in node_name_to_id_map.keys(): | |
node_name_to_id_map[target_node_name] = target_node_id | |
nodes.append(target_node) | |
link: str = source_node_name + target_node_name + verb[0] | |
if link not in link_set: | |
links.append( | |
_construct_knowledge_graph_spec_link( | |
node_name_to_id_map[source_node_name], | |
node_name_to_id_map[target_node_name], | |
verb[0] | |
) | |
) | |
link_set.add(link) | |
subject = None | |
verb = None | |
object = None | |
return { | |
"nodes": nodes, | |
"links": links | |
} | |