DocChrono
DocChrono turns English documents into an evidence-linked chronology and graph without requiring a cloud AI service or API key.
from docchrono import Case
case = Case.build("./documents")
print(case.timeline)
print(case.entities)
print(case.graph.neighbors("Robert Williams"))
DocChrono treats extracted statements as source claims, not verified facts. Every claim, event, entity, and relationship can be traced back to exact text in an input document.
[!IMPORTANT] DocChrono is pre-release alpha software. Review extracted findings before relying on them.
What version 0.1 does
- Reads
.txt,.md, text-based.pdf,.docx, and RFC 822.emlfiles. - Uses a finite, rule-based English spaCy pipeline to extract candidate people, organizations, locations, dates, claims, and provisional events.
- Resolves conservative duplicate-entity candidates without an external LLM.
- Builds a chronology and an evidence graph.
- Retains raw offsets, page/field context where available, and exact source quotations.
- Records low-confidence candidates and typed document failures for review.
- Produces deterministic identifiers and stable saved JSON in the same environment.
DocChrono includes both chronology and a lightweight ontology: its typed domain model defines documents, evidence, mentions, claims, entities, events, and relationships. Version 0.1 does not implement OWL, RDF, SPARQL, or a general-purpose ontology editor.
Installation
DocChrono supports CPython 3.11, 3.12, and 3.13.
python -m pip install docchrono
For development from a checkout:
python -m venv .venv
.venv/Scripts/python -m pip install -e ".[dev]" # Windows
On macOS or Linux, use .venv/bin/python instead.
Python API
Build and save a case:
from docchrono import Case, CaseConfig
case = Case.build(
["./emails", "./reports"],
config=CaseConfig(
auto_accept_threshold=0.90,
review_threshold=0.60,
max_extracted_chars=1_000_000,
),
)
case.save("investigation.docchrono.json")
Load without parsing the sources again:
case = Case.load("investigation.docchrono.json")
for event in case.timeline:
print(event.title, event.temporal)
Inspect provenance:
claim = case.claims[0]
for span in case.evidence(claim):
print(span.quote, span.page, span.field)
Query the evidence graph:
neighbors = case.graph.neighbors("Robert Williams")
path = case.graph.find_path("Robert Williams", "Payment #932")
Review decisions are immutable and auditable; applying decisions returns a new case:
pending = case.review.pending
reviewed = case.review.apply(
[case.review.accept(pending[0].id, reason="Confirmed against the source")]
)
Command line
docchrono build ./documents --output case.json
docchrono inspect case.json
docchrono timeline case.json
Add --strict to fail the build if any document cannot be processed, or --json for
machine-readable output.
Offline and deterministic by default
The standard pipeline makes no network calls. It combines finite parsing/extraction rules, a blank English spaCy tokenizer, dateparser, RapidFuzz, and NetworkX. It does not bundle a pretrained statistical language model, so version 0.1 favors inspectability and precision over broad recall. Identical bytes, configuration, rules, model, and dependency versions produce identical semantic identifiers and ordering.
PyMuPDF is not installed or selected by the standard pipeline because it is AGPL-3.0 or commercially licensed. A future opt-in adapter must keep that choice and its obligations explicit.
Deliberate version 0.1 limits
- English only.
- No OCR; a PDF containing a page with images but no extractable text is reported as
OCR_REQUIREDrather than partially analyzed. - No spreadsheets, Outlook
.msg, chat UI, semantic search, contradiction engine, or graph visualization yet. - Relationships are derived views over source claims, never independently asserted facts.
- Event grouping and entity resolution are conservative and can create review items.
- Per-file, extracted-text, archive, traversal, and entity-resolution budgets reject oversized
work with typed limit failures; advanced callers can tune those budgets with
CaseConfig.
See the architecture, ontology, and provenance contract for the design details.
Contributing and security
Development instructions are in CONTRIBUTING.md. Please report security issues using SECURITY.md, not a public issue.
DocChrono is licensed under the Apache License 2.0.
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 docchrono-0.1.0.tar.gz.
File metadata
- Download URL: docchrono-0.1.0.tar.gz
- Upload date:
- Size: 88.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
13da390fc31c9fad5525cd2f865065bcd3417fef13922e477ec1abb2a64ee623
|
|
| MD5 |
ad9b69df4b72f6ccce62c5e83f04caa4
|
|
| BLAKE2b-256 |
1385227ed8d805794f5e324a725cafaa748fde8b48e41e7a5c0923135a0e6164
|
Provenance
The following attestation bundles were made for docchrono-0.1.0.tar.gz:
Publisher:
release.yml on docchrono/docchrono
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
docchrono-0.1.0.tar.gz -
Subject digest:
13da390fc31c9fad5525cd2f865065bcd3417fef13922e477ec1abb2a64ee623 - Sigstore transparency entry: 2472518332
- Sigstore integration time:
-
Permalink:
docchrono/docchrono@688cc15f84334929575683ed25eef35427834a24 -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/docchrono
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@688cc15f84334929575683ed25eef35427834a24 -
Trigger Event:
release
-
Statement type:
File details
Details for the file docchrono-0.1.0-py3-none-any.whl.
File metadata
- Download URL: docchrono-0.1.0-py3-none-any.whl
- Upload date:
- Size: 82.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
3c7716db3e34b9622256bd011e6e6e28fbf52c8c13d8d8e91ba30e364fb76876
|
|
| MD5 |
426ce906ef704523b499717a36d2db6d
|
|
| BLAKE2b-256 |
eec3a5fcedd61536f97ba512ed4d2e312ee4417cf86ba63d3222151faae2fc20
|
Provenance
The following attestation bundles were made for docchrono-0.1.0-py3-none-any.whl:
Publisher:
release.yml on docchrono/docchrono
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
docchrono-0.1.0-py3-none-any.whl -
Subject digest:
3c7716db3e34b9622256bd011e6e6e28fbf52c8c13d8d8e91ba30e364fb76876 - Sigstore transparency entry: 2472518415
- Sigstore integration time:
-
Permalink:
docchrono/docchrono@688cc15f84334929575683ed25eef35427834a24 -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/docchrono
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@688cc15f84334929575683ed25eef35427834a24 -
Trigger Event:
release
-
Statement type: