Source code for sng_parser.utils

#! /usr/bin/env python3
# -*- coding: utf-8 -*-
# File   : utils.py
# Author : Jiayuan Mao
# Email  : maojiayuan@gmail.com
# Date   : 08/21/2018
#
# This file is part of SceneGraphParser.
# Distributed under terms of the MIT license.
# https://github.com/vacancy/SceneGraphParser

import functools
import tabulate


__all__ = ['tprint']


[docs]def tprint(graph, file=None, show_entities=True, show_relations=True): """ Print a scene graph as a table. The printed strings contains only essential information about the parsed scene graph. """ _print = functools.partial(print, file=file) if show_entities: _print('Entities:') entities_data = [ [e['head'].lower(), e['span'].lower(), ','.join([ x['span'].lower() for x in e['modifiers'] ])] for e in graph['entities'] ] _print(tabulate.tabulate(entities_data, headers=['Head', 'Span', 'Modifiers'], tablefmt=_tabulate_format)) if show_relations: _print('Relations:') entities = graph['entities'] relations_data = [ [ entities[rel['subject']]['head'].lower(), rel['relation'].lower(), entities[rel['object']]['head'].lower() ] for rel in graph['relations'] ] _print(tabulate.tabulate(relations_data, headers=['Subject', 'Relation', 'Object'], tablefmt=_tabulate_format))
_tabulate_format = tabulate.TableFormat( lineabove=tabulate.Line("+", "-", "+", "+"), linebelowheader=tabulate.Line("|", "-", "+", "|"), linebetweenrows=None, linebelow=tabulate.Line("+", "-", "+", "+"), headerrow=tabulate.DataRow("|", "|", "|"), datarow=tabulate.DataRow("|", "|", "|"), padding=1, with_header_hide=None )