Source code for kgx.transformers.logicterm_transformer
import pandas as pd
import networkx as nx
from prologterms import Term, SExpressionRenderer, PrologRenderer
from kgx.config import get_logger
from kgx.transformers.transformer import Transformer
from typing import Dict, List, Union, Optional
log = get_logger()
[docs]class LogicTermTransformer(Transformer):
"""
TODO
"""
def __init__(self, source_graph: Optional[nx.MultiDiGraph] = None, output_format: Optional[str] = None, **kwargs: Dict):
super().__init__(source_graph=source_graph)
if output_format is not None and output_format == 'prolog':
self.renderer = PrologRenderer()
else:
self.renderer = SExpressionRenderer()
def export_nodes(self) -> pd.DataFrame:
items: List = []
for n,data in self.graph.nodes(data=True):
for k,v in data.items():
self.write_term('node_prop', n, k, v)
def export_edges(self) -> pd.DataFrame:
items: List = []
for o,s,data in self.graph.edges(data=True):
el = data.get('edge_label', None)
self.write_term('edge', el, o, s)
for k,v in data.items():
self.write_term('edge_prop', el, o, s, k, v)
def write_term(self, pred: str, *args):
t: Term = Term(pred, *args)
self.file.write(self.renderer.render(t) + "\n")
[docs] def save(self, filename: str, output_format='sxpr', zipmode='w', **kwargs):
"""
"""
with open(filename,'w') as file:
self.file = file
self.export_nodes()
self.export_edges()