Skip to content

bidlint v0.2.2

Choose a tag to compare

@github-actions github-actions released this 20 Aug 02:54
fc0f7c4

bidlint v0.2.2

Released: 2026-08-20

v0.2.2 hardens deterministic vendor-datasheet parsing for advanced but explicitly evidenced table layouts. The release expands document coverage without changing the core rule: ambiguous layout evidence is skipped instead of guessed.

Highlights

Coordinate-aligned sparse rows

Recognized tables can now recover rows whose intermediate cells are visually blank when the parameter and offered values align closely with explicit header anchors.

  • blank intermediate cells no longer shift the offered value into the wrong semantic column
  • blank Unit cells remain unitless
  • fragments near column boundaries are rejected rather than assigned by proximity alone

Explicit merged-cell geometry

The positioned-text pass also captures explicit axis-aligned PDF rectangle (re) geometry.

  • merged intermediate cells can be recognized when Parameter and Offered remain distinct cell boxes
  • text inside an intermediate merged cell is not split into fabricated Unit / Required values
  • merges touching Parameter or Offered are rejected
  • rotated/skewed rectangles and arbitrary line grids remain unsupported

Repeated explicit header groups

Side-by-side technical tables can now be parsed when each visual group repeats its own parameter-like and offered/value headers.

Parameter     Unit   Offered     Parameter        Unit   Offered
Motor power   kW     11          Flow rate        m3/h   125

Each complete row produces one fact per explicit group. Incomplete repeated rows are skipped as a whole rather than partially reconstructed.

Safer Item / Description tables

When a header contains both Item and Description before the offered/value column, Description is preferred as the parameter field because it is the nearest parameter-like header to the offered evidence.

Safety boundary

v0.2.2 still does not:

  • OCR scanned/image-only PDFs
  • infer arbitrary line-segment grids as table cells
  • split semantic values out of merged intermediate cells
  • guess multi-column group boundaries when explicit repeated headers are absent
  • accept coordinate fragments that fall too close to a column boundary

Validation

All changes are covered by synthetic positioned/boxed PDF regressions and the project CI matrix on Python 3.11, 3.12 and 3.13 with Ruff and pytest.