HIM-self / src /core /ontological_database.py
Takk8IS
Initial HIM implementation
fbebf66
raw
history blame
1.64 kB
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]
}