Skip to main content

Converts (already scraped) Entscheidungsbaumdiagramm tables to real graphs

Project description

ebdtable2graph

Unittests status badge Coverage status badge Linting status badge Black status badge PyPi Status Badge

🇩🇪 Dieses Repository enthält ein Python-Paket namens ebdtable2graph, das genutzt werden kann, um aus .docx-Dateien extrahierte maschinenlesbare Tabellen, die einen Entscheidungsbaum (EBD) modellieren, in echte Graphen zu konvertieren. Diese Entscheidungsbäume sind Teil eines regulatorischen Regelwerks für die deutsche Energiewirtschaft und kommen in der Eingangsprüfung der Marktkommunikation zum Einsatz.

🇬🇧 This repository contains the source code of the Python package ebdtable2graph.

Rationale

Assume, that you scraped the Entscheidungsbaumdiagramm tables by EDI@Energy from their somewhat "digitized" PDF/DOCX files. (To do so, you can use the package ebddocx2table.) Also assume, that the result of your scraping is a ebdtable2graph.models.EbdTable.

The package ebdtable2graph contains logic to convert your scraped data into a graph. This graph can then be exported e.g. as SVG and/or UML.

How to use ebdtable2graph?

Install the package from pypi:

pip install ebdtable2graph

Create an Instance of EbdTable

EbdTable contains the raw data by BDEW in a machine-readable format. Creating instances of EbdTable is out of scope for this package. Ask Hochfrequenz for support on this topic. In the following example we hard code the information.

from ebdtable2graph.graph_conversion import convert_table_to_graph
from ebdtable2graph.models import EbdCheckResult, EbdTable, EbdTableMetaData, EbdTableRow, EbdTableSubRow, EbdGraph

ebd_table: EbdTable  # this is the result of scraping the docx file
ebd_table = EbdTable(  # this data shouldn't be handwritten
    metadata=EbdTableMetaData(
        ebd_code="E_0003",
        chapter="7.39 AD: Bestellung der Aggregationsebene der Bilanzkreissummenzeitreihe auf Ebene der Regelzone",
        sub_chapter="7.39.1 E_0003_Bestellung der Aggregationsebene RZ prüfen",
        role="ÜNB",
    ),
    rows=[
        EbdTableRow(
            step_number="1",
            description="Erfolgt der Eingang der Bestellung fristgerecht?",
            sub_rows=[
                EbdTableSubRow(
                    check_result=EbdCheckResult(result=False, subsequent_step_number=None),
                    result_code="A01",
                    note="Fristüberschreitung",
                ),
                EbdTableSubRow(
                    check_result=EbdCheckResult(result=True, subsequent_step_number="2"),
                    result_code=None,
                    note=None,
                ),
            ],
        ),
        EbdTableRow(
            step_number="2",
            description="Erfolgt die Bestellung zum Monatsersten 00:00 Uhr?",
            sub_rows=[
                EbdTableSubRow(
                    check_result=EbdCheckResult(result=False, subsequent_step_number=None),
                    result_code="A02",
                    note="Gewählter Zeitpunkt nicht zulässig",
                ),
                EbdTableSubRow(
                    check_result=EbdCheckResult(result=True, subsequent_step_number="Ende"),
                    result_code=None,
                    note=None,
                ),
            ],
        ),
    ],
)
assert isinstance(ebd_table, EbdTable)

ebd_graph = convert_table_to_graph(ebd_table)
assert isinstance(ebd_graph, EbdGraph)

Export as PlantUML

from ebdtable2graph import convert_graph_to_plantuml

plantuml_code = convert_graph_to_plantuml(ebd_graph)
with open("e_0003.puml", "w+", encoding="utf-8") as uml_file:
    uml_file.write(plantuml_code)

The file e_0003.puml now looks like this:

@startuml
...
if (<b>1: </b> Erfolgt der Eingang der Bestellung fristgerecht?) then (ja)
else (nein)
    :A01;
    note left
        Fristüberschreitung
    endnote
    kill;
endif
if (<b>2: </b> Erfolgt die Bestellung zum Monatsersten 00:00 Uhr?) then (ja)
    end
else (nein)
    :A02;
    note left
        Gewählter Zeitpunkt nicht zulässig
    endnote
    kill;
endif
@enduml

Export as SVG

You can also export the graph as SVG

from ebdtable2graph import convert_plantuml_to_svg_kroki

svg_code = convert_plantuml_to_svg_kroki(plantuml_code)
with open("e_0003.svg", "w+", encoding="utf-8") as svg_file:
    svg_file.write(svg_code)

How to use this Repository on Your Machine (for development)

Please follow the instructions in our Python Template Repository . And for further information, see the Tox Repository.

Contribute

You are very welcome to contribute to this template repository by opening a pull request against the main branch.

Related Tools and Context

This repository is part of the Hochfrequenz Libraries and Tools for a truly digitized market communication.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

ebdtable2graph-0.1.20.tar.gz (130.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

ebdtable2graph-0.1.20-py3-none-any.whl (36.2 kB view details)

Uploaded Python 3

File details

Details for the file ebdtable2graph-0.1.20.tar.gz.

File metadata

  • Download URL: ebdtable2graph-0.1.20.tar.gz
  • Upload date:
  • Size: 130.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.11.7

File hashes

Hashes for ebdtable2graph-0.1.20.tar.gz
Algorithm Hash digest
SHA256 0dc70fc260a085a788c4d56a310ab4c328928ed5c055c23804b0f809d8a36526
MD5 b0e73d158c2ae55404c43b73227a61cd
BLAKE2b-256 d6e89d7ed3375f346c1afb7c8ad9d9be48e5f922ad1da8ca5f69660891bf69d1

See more details on using hashes here.

File details

Details for the file ebdtable2graph-0.1.20-py3-none-any.whl.

File metadata

File hashes

Hashes for ebdtable2graph-0.1.20-py3-none-any.whl
Algorithm Hash digest
SHA256 2258106910e4264eac8013548538e40dfda3f77f1b5cb3dce9db1f8eda32106b
MD5 17449bcf71ba0350941fdf8718dcde03
BLAKE2b-256 667b0455b6eeb7dccc2d093f0ef793ba625986683ee34fb1e026ad2883513338

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page