RA-BART / kgs_binding /conceptnet_handler.py
MrVicente's picture
added demo base code
6cf191b
#############################
# Imports
#############################
# Python modules
from typing import Tuple, Optional, List
# Remote modules
# Local modules
from .kg_base_wrapper import KGBaseHandler
from utils import read_json_file_2_dict
#############################
# Constants
#############################
#############################
# Handler
#############################
class ConceptNetHandler(KGBaseHandler):
def __init__(self, database=""):
super(ConceptNetHandler, self).__init__()
_store_dir = 'kgs_binding/conceptnet'
self.conceptnet_concepts = read_json_file_2_dict('conceptnet_english_nouns_simple.json', store_dir=_store_dir)
self.relations_concepts = read_json_file_2_dict('conceptnet_english_noun_2_noun_relations.json', store_dir=_store_dir)
self.concept_2_concepts = read_json_file_2_dict('conceptnet_english_nouns.json', store_dir=_store_dir)
def get_relation_types(self) -> List[str]:
updated_relation_names = ['not_has_property', 'not_desires', 'external_u_r_l', 'created_by',
'not_capable_of', 'antonym', 'has_first_subevent', 'located_near',
'desires', 'has_prerequisite', 'has_last_subevent', 'synonym', 'is_a',
'manner_of', 'has_a', 'motivated_by_goal', 'instance_of',
'etymologically_derived_from', 'capable_of', 'for', 'at_location',
'has_subevent', 'causes', 'has_context', 'symbol_of', 'derived_from',
'made_of', 'causes_desire', 'has_property', 'similar_to', 'used_for', 'by',
'entails', 'form_of', 'receives_action', 'distinct_from', 'related_to',
'part_of', 'defined_as', 'etymologically_related_to']
return updated_relation_names
def exists_relation_between(self, concept, other_concept) -> bool:
left_2_right, right_2_left = self.relation_between(concept, other_concept)
return left_2_right is not None or right_2_left is not None
def relation_between(self, concept, other_concept) -> Tuple[Optional[str], Optional[str]]:
left_2_right_txt = f'{concept}|{other_concept}'
right_2_left_txt = f'{other_concept}|{concept}'
left_2_right_relations = self.relations_concepts.get(left_2_right_txt, None)
right_2_left_relations = self.relations_concepts.get(right_2_left_txt, None)
left_2_right_relation, right_2_left_relation = None, None
if left_2_right_relations:
left_2_right_relation = self.ignore_less_relevant_connection(left_2_right_relations)
if right_2_left_relations:
right_2_left_relation = self.ignore_less_relevant_connection(right_2_left_relations)
return left_2_right_relation, right_2_left_relation
def get_related_concepts(self, concept) -> Optional[List[str]]:
return self.concept_2_concepts.get(concept, [])
def does_concept_exist(self, concept) -> bool:
return concept in self.conceptnet_concepts