Skip to main content

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 .eml files.
  • 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_REQUIRED rather 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

docchrono-0.1.0.tar.gz (88.5 kB view details)

Uploaded Source

Built Distribution

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

docchrono-0.1.0-py3-none-any.whl (82.2 kB view details)

Uploaded Python 3

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

Hashes for docchrono-0.1.0.tar.gz
Algorithm Hash digest
SHA256 13da390fc31c9fad5525cd2f865065bcd3417fef13922e477ec1abb2a64ee623
MD5 ad9b69df4b72f6ccce62c5e83f04caa4
BLAKE2b-256 1385227ed8d805794f5e324a725cafaa748fde8b48e41e7a5c0923135a0e6164

See more details on using hashes here.

Provenance

The following attestation bundles were made for docchrono-0.1.0.tar.gz:

Publisher: release.yml on docchrono/docchrono

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

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

Hashes for docchrono-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 3c7716db3e34b9622256bd011e6e6e28fbf52c8c13d8d8e91ba30e364fb76876
MD5 426ce906ef704523b499717a36d2db6d
BLAKE2b-256 eec3a5fcedd61536f97ba512ed4d2e312ee4417cf86ba63d3222151faae2fc20

See more details on using hashes here.

Provenance

The following attestation bundles were made for docchrono-0.1.0-py3-none-any.whl:

Publisher: release.yml on docchrono/docchrono

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

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