DocDSL
A declarative DSL for extracting structured information from OCR output, PDFs, reports, and other semi-structured documents.
Instead of writing large, difficult-to-maintain regular expressions, DocDSL lets you describe what to extract using a simple, readable language while keeping extraction rules separate from your application code.
Installation
pip install docdsl
Quick Start
from docdsl import DSLTranslator
translator = DSLTranslator()
dsl = """
FIND "Patient:";
SKIP UNTIL NEWLINE;
CAPTURE TARGET [@NAME];
"""
pattern = translator.translate(dsl)
print(pattern)
with open("doc.txt", "r") as fh:
text = fh.read()
matches = pattern.finditer(text)
for matched in matches:
print(f"{matched=}")
matched_groups = matched.groupdict()
name = matched_groups.get("NAME", None)
print(f"Name: {name}")
The NAME entity is part of DocDSL's built-in entity library and is available
automatically. Custom entities can still be supplied when additional matching
behaviour is required.
Features
- Declarative, English-like extraction language
- Reusable named entities
- Readable extraction rules
- Conditional extraction using
IF - Multi-line capture
- Capture between delimiters
- Built-in helper tokens
- Friendly syntax and validation errors
- Exact error locations with line and column information
Documentation
Complete language documentation is available in the DocDSL Documentation.
The reference includes:
- Complete command reference
- DSL syntax
- Built-in helper tokens
- Conditional statements
- Examples
- Best practices
Requirements
- Python 3.11+
Contributing
Contributions, bug reports and feature requests are welcome.
If you discover a bug or have an idea for improving DocDSL, please open an issue or submit a pull request.
License
Released under the MIT License.
Metadata
Release files for docdsl 0.0.3
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| docdsl-0.0.3.tar.gz | 15.7 kB | Without provenance | Details for docdsl-0.0.3.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| docdsl-0.0.3-py3-none-any.whl | Python 3 | none | any | Details for docdsl-0.0.3-py3-none-any.whl |
Total release size: 34.4 kB
Release files / docdsl-0.0.3.tar.gz
| Download URL | docdsl-0.0.3.tar.gz |
|---|---|
| Size | 15.7 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
7ea0bf35d17034e3d8cbc2f061947fa1890b1675abc28ddc49c3c50e37068dd2
|
|
BLAKE2b-256 checksum How to use checksums |
e9bb5f3e528a186538f320ae298f9af8e1dc288911229c5bf124afdfb9762535
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.11.9
|
Release files / docdsl-0.0.3-py3-none-any.whl
| Download URL | docdsl-0.0.3-py3-none-any.whl |
|---|---|
| Size | 18.7 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
effc75330f8022b9514033bc4d0f3061bef41e41acba683ba1052b2bc72d880c
|
|
BLAKE2b-256 checksum How to use checksums |
27482530e4c7ac9e801b792987f8ff18f028772beb37f36eac85aa607bbf9704
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.11.9
|
Security for docdsl 0.0.3
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.