Compare two editions of a technical standard: changes, per-chapter summaries and a synopsis — deterministic, plus optional AI interpretation.
Project description
normpare
Find out what actually changed between two editions of a technical standard.
When a standard is revised, the publisher rarely tells you precisely what changed. You get a
new PDF of several hundred pages and are left to compare it against the old one by hand.
normpare does that comparison for you: it reads both editions, matches them chapter by
chapter and paragraph by paragraph, and reports every change — new requirements, deleted
ones, changed limit values, reworded passages, moved sections, edited tables.
The comparison itself is deterministic: same inputs, same output, every time, with no AI involved. On top of that you can optionally switch on an AI interpretation that explains each change in plain language and separates real substantive changes from mere editorial rewording. Every AI statement carries a verbatim quote from the source, and normpare checks that the quote really exists — so you can always trace a claim back to the text.
What you get
- An annotated HTML version of the new edition: changes colour-coded in place, with a summary per chapter, cell-level table diffs and embedded figures.
- Two Word synopses — a deterministic, tabular old ↔ new comparison, and (if AI is on) a final, readable one that bundles related changes into a single entry per topic.
- A PowerPoint draft of the key changes, machine-readable JSON for every stage, tables as CSV, and figures as image assets.
Installation
Requires Python 3.13.
pip install normpare # deterministic comparison
pip install "normpare[anthropic]" # + AI interpretation via Anthropic
pip install "normpare[embeddings]" # + optional embedding-based alignment
Usage
Two files in, one directory out:
normpare compare --old standard_2019.pdf --new standard_2026.docx --out result/
PDF and DOCX are both supported, and mixing them is fine. Without an API key the run is purely deterministic; the AI prompts are exported so you can paste them into a chat instead.
From Python:
import normpare
result = normpare.compare(
old="standard_2019.pdf",
new="standard_2026.docx",
out_dir="result/",
use_llm=False, # True + an API key => AI interpretation
language="de", # language the standard is written in
)
print(result.html, result.synopse_det, result.synopse_final)
Useful flags: --no-llm (deterministic only), --batch (send the interpretation as one
Anthropic batch, about half the price), --model / --provider (choose the AI backend —
Anthropic, OpenAI, a local Ollama server, and others).
Documentation
Full documentation, including how the pipeline works and how to pick an AI model: https://ce1ectric.github.io/normpare/
License
MIT © 2026 Christian Ehlert
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file normpare-0.1.0.tar.gz.
File metadata
- Download URL: normpare-0.1.0.tar.gz
- Upload date:
- Size: 74.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/2.4.1 CPython/3.14.6 Darwin/25.5.0
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c688a686dd745f40dbb89adbcea85399a47fb27d74c9a52c4e4d8e3c00f63ced
|
|
| MD5 |
7172a4efecbae06e591f54c965a27f2c
|
|
| BLAKE2b-256 |
93ee71594d8dc5b0f3165cb042f1467cbbd7e05ba3bc66f585ca5377cf23235a
|
File details
Details for the file normpare-0.1.0-py3-none-any.whl.
File metadata
- Download URL: normpare-0.1.0-py3-none-any.whl
- Upload date:
- Size: 89.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/2.4.1 CPython/3.14.6 Darwin/25.5.0
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
6b79c11f1b3382ce826e3832d5d1b7e751404c9a3b76d25b4a85eea981218bae
|
|
| MD5 |
66c79ccd14c67f94be03c6f80f98a8e1
|
|
| BLAKE2b-256 |
704e7e0d157291ca60f0424b8124d691fd3f0fd443113fcf1f618b2e741f9090
|