Skip to main content

The Graph Converter is a tool for creating a graph representation out of the content of PDFs.

A graph representation can act as the basis for further document processing steps.

Geometric relationships are encapsulated. By those, a document structure can be retrieved.

The tool works independent of different document layouts.

The graph construction can be controlled via parameter settings mentioned subsequently.

Furthermore, layout-based optimizations without the need parameter tweaks are supported using a regression estimation based on document layout characteristics.

The processing of PDF documents is done using the PDFContentConverter library.

How-to

  • Pass the path of the PDF file which is wanted to be converted to GraphConverter.

  • Call the function convert(). The document graph representations are returned page-wise as a list of networkx graphs.

  • Media boxes of a PDF can be accessed using get_media_boxes(), the page count over get_page_count()

Example call:

converter = GraphConverter(pdf)

result = converter.convert()

A file is the only parameter mandatory for a graph construction.

Beside the graph conversion, media boxes of a document can be accessed using get_media_boxes() and the page count over get_page_count().

General document layout characteristics are stored in a converter.meta object.

A more detailed example usage is also given in Tester.py.

Settings

General parameters:

  • file: file name

  • merge_boxes: indicating if PDF text boxes should be graph nodes, based on visual rectangles present in documents.

  • regress_parameters: indicating if graph parameters are regressed or used as a priori optimized default ones.

Edge restrictions:

  • use_font: differing font size

  • use_width: differing width

  • use_rect: nodes contained in differing visual structures

  • use_horizontal_overlap: indicating if horizontal edges should be built on overlap. If not, default deltas are used.

  • use_vertical_overlap: indicating if vertical edges should be built on overlap. If not, default deltas are used.

Edge thresholds:

  • page_ratio_x: maximal relative horizontal distance of two nodes where an edge can be created

  • page_ratio_y: maximal relative vertical distance of two nodes where an edge can be created

  • x_eps: alignment epsilon for vertical edges in points if use_horizontal_overlap is not enabled

  • y_eps: alignment epsilon for horizontal edges in points if use_vertical_overlap is not enabled

  • font_eps_h: indicates how much font sizes of nodes are allowed to differ as a constraint for building horizontal edges when use_font is enabled

  • font_eps_v: indicates how much font sizes of nodes are allowed to differ as a constraint for building vertical edges when use_font is enabled

  • width_pct_eps: relative width difference of nodes as a condition for vertical edges if use_width is enabled

  • width_page_eps: indicating at which maximal width of a node the width should act as an edge condition if use_width is enabled

Project Structure

  • GraphConverter.py: contains the GraphConverter class for converting documents into graphs.

  • util:

    • constants:

    • StorageUtil: store/load functionalities

  • Tester.py: Python script for testing the GraphConverter

  • pdf: example pdf input files for tests

Output Format

As a result, a list of networkx graphs is returned.

Each graph encapsulates a structured representation of a single page.

Edges are attributed with the following features:

  • direction: shows the direction of an edge.

    • v: Vertical edge

    • h: Horizontal edge

    • l: Rectangular loop. This represents a novel concept encapsulating structural characteristics of document segments by observing if two different paths end up in the same node.

  • length: Scaled length of an edge

  • lengthx_phys: Horizontal edge length

  • lengthy_phys: Vertical edge length

  • weight: Scaled total length

All nodes contain the following content attributes:

  • id: unique identifier of the PDF element

  • page: page number, starting with 0

  • text: text of the PDF element

  • x_0: left x coordinate

  • x_1: right x coordinate

  • y_0: top y coordinate

  • y_1: bottom y coordinate

  • pos_x: center x coordinate

  • pos_y: center y coordinate

  • abs_pos: tuple containing a page independent representation of (pos_x,pos_y) coordinates

  • original_font: font as extracted by pdfminer

  • font_name: name of the font extracted from original_font

  • code: font code as provided by pdfminer

  • bold: factor 1 indicating that a text is bold and 0 otherwise

  • italic: factor 1 indicating that a text is italic and 0 otherwise

  • font_size: size of the text in points

  • masked: text with numeric content substituted as #

  • frequency_hist: histogram of character type frequencies in a text, stored as a tuple containing percentages of textual, numerical, text symbolic and other symbols

  • len_text: number of characters

  • n_tokens: number of words

  • tag: tag for key-value pair extractions, indicating keys or values based on simple heuristics

  • box: box extracted by pdfminer Layout Analysis

  • in_element_ids: contains IDs of surrounding visual elements such as rectangles or lists. They are stored as a list [left, right, top, bottom]. -1 is indicating that there is no adjacent visual element.

  • in_element: indicates based on in_element_ids whether an element is stored in a visual rectangle representation (stored as “rectangle”) or not (stored as “none”).

The media boxes possess the following entries in a dictionary:

  • x0: Left x page crop box coordinate

  • x1: Right x page crop box coordinate

  • y0: Top y page crop box coordinate

  • y1: Bottom y page crop box coordinate

  • x0page: Left x page coordinate

  • x1page: Right x page coordinate

  • y0page: Top y page coordinate

  • y1page: Bottom y page coordinate

Future Work

  • The GraphConverter will be extended using OCR processing for images in order to support more unstructured types than solely PDFs.

Metadata

Release files for GraphConverter 0.4

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for GraphConverter 0.4
File Size Uploaded
GraphConverter-0.4.tar.gz 498.8 kB Details

Release files / GraphConverter-0.4.tar.gz

Download URL GraphConverter-0.4.tar.gz
Size 498.8 kB
Tags Source
SHA-256 checksum
How to use checksums
4e3bdaf862868e7db67c0ab0f325e3099739fd82b998422e531d80f9d64cd8c7
BLAKE2b-256 checksum
How to use checksums
bd1ef4a457172892ff7cfeaa0439a904fffd90a0e81dd7f315dbe3bc9a984592
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/3.2.0 pkginfo/1.5.0.1 requests/2.23.0 setuptools/50.3.0 requests-toolbelt/0.9.1 tqdm/4.45.0 CPython/3.7.5

Release history Release notifications | RSS feed

This release

0.4 This release

1 release file

0.3

1 release file

0.2

1 release file

0.1

1 release file

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page