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]
        }