# coding=utf-8 # Copyright 2021 The IDEA Authors. All rights reserved. # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # http://www.apache.org/licenses/LICENSE-2.0 # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. import collections from typing import List, Dict, Tuple def get_choice(spo_choice: list) -> tuple: """ 把关系schema中的关系、实体获取出来 Args: spo_choice (list): 关系schema Returns: tuple: choice_ent (list) choice_rel (list) choice_head (list) choice_tail (list) entity2rel (dict) """ choice_head = [] choice_tail = [] choice_ent = [] choice_rel = [] entity2rel = collections.defaultdict(list) # "subject|object" -> [relation] for head, rel, tail in spo_choice: if head not in choice_head: choice_head.append(head) if tail not in choice_tail: choice_tail.append(tail) if head not in choice_ent: choice_ent.append(head) if tail not in choice_ent: choice_ent.append(tail) if rel not in choice_rel: choice_rel.append(rel) entity2rel[head, tail].append(rel) return choice_ent, choice_rel, choice_head, choice_tail, entity2rel