Spaces:
Sleeping
Sleeping
File size: 1,644 Bytes
fbebf66 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
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]
} |