Source code for kgx.transformers.logicterm_transformer

import logging
import pandas as pd
import networkx as nx
from prologterms import Term, SExpressionRenderer, PrologRenderer
from kgx.transformers.transformer import Transformer

from typing import Dict, List, Union

[docs]class LogicTermTransformer(Transformer): """ TODO: Motivation for LogicTermTransformer? """ def __init__(self, source:Union[Transformer, nx.MultiDiGraph]=None, output_format=None, **args): super().__init__(source=source, **args) if output_format is not None and output_format == 'prolog': self.renderer = PrologRenderer() else: self.renderer = SExpressionRenderer() def export_nodes(self) -> pd.DataFrame: items = [] 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 = [] 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(pred, *args) self.file.write(self.renderer.render(t) + "\n")
[docs] def save(self, filename: str, format='sxpr', zipmode='w', **kwargs): """ """ with open(filename,'w') as file: self.file = file self.export_nodes() self.export_edges()