Spaces:
Sleeping
Sleeping
from typing import Dict, List, Set, Optional | |
import networkx as nx | |
class OntologicalDatabase: | |
def __init__(self): | |
self.knowledge_graph = nx.MultiDiGraph() | |
self.relation_types = set() | |
self.temporal_index = {} | |
def add_knowledge(self, concept: str, properties: Dict[str, Any], | |
relations: List[Dict[str, Any]] = None) -> None: | |
self.knowledge_graph.add_node(concept, **properties) | |
if relations: | |
for relation in relations: | |
self.add_relation(concept, relation) | |
def query_knowledge(self, query: Dict[str, Any]) -> Dict[str, Any]: | |
results = self._search_knowledge_graph(query) | |
temporal_context = self._get_temporal_context(query) | |
return self._integrate_results(results, temporal_context) | |
def add_relation(self, source: str, target: str, relation_type: str, properties: Dict[str, Any]) -> None: | |
self.knowledge_graph.add_edge(source, target, | |
relation_type=relation_type, | |
**properties) | |
self.relation_types.add(relation_type) | |
def query_knowledge(self, concept: str, relation_type: Optional[str] = None) -> Dict[str, Any]: | |
if relation_type: | |
return { | |
'concept': concept, | |
'relations': list(self.knowledge_graph.edges(concept, data=True)), | |
'properties': self.knowledge_graph.nodes[concept] | |
} | |
return { | |
'concept': concept, | |
'properties': self.knowledge_graph.nodes[concept] | |
} |