Pure-Python text extraction for classic Microsoft Word .doc files.
Project description
legacy-doc
legacy-doc is a small, dependency-free Python library for extracting readable text from classic Microsoft Word .doc files.
It is intentionally narrow:
- supports OLE Compound File Word 97-2003
.docfiles - extracts normalized text from the Word piece table
- rejects encrypted, malformed, non-OLE, or unsafe files clearly
- does not execute macros, embedded objects, links, scripts, or external references
- does not use native binaries, LibreOffice,
antiword, or third-party parsers
Install
pip install legacy-doc
Usage
from legacy_doc import extract_text
with open("document.doc", "rb") as file:
result = extract_text(file.read())
print(result.text)
print(result.metadata)
API
extract_text(document_bytes: bytes, *, options: ExtractionOptions | None = None) -> DocExtractionResult
DocExtractionResult contains:
text: normalized extracted textparser: parser nameversion: parser versionmetadata: lightweight extraction metadatawarnings: non-fatal parser warnings
Limitations
This is not a full Microsoft Word renderer. It aims to recover readable text safely from common legacy .doc files. Formatting fidelity, OCR, images, macros, tracked changes, and embedded object extraction are out of scope.
Development
python -m pip install -e ".[dev]"
python -m pytest
python -m build
python -m twine check dist/*
The test suite includes small generated OLE WordDocument fixtures and malformed corpus cases for parser limits, encryption markers, missing piece tables, and cyclic FAT chains.
Security
legacy-doc treats input files as untrusted binary data. It performs bounded parsing, rejects encrypted documents, and never executes macros or embedded content. Report security issues privately before opening a public issue.
Project details
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 legacy_doc-0.1.2.tar.gz.
File metadata
- Download URL: legacy_doc-0.1.2.tar.gz
- Upload date:
- Size: 8.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
6e27bb2dd076d30f845a15f2ad5538733979e10d6370dbc892c7e4e5f1167e90
|
|
| MD5 |
678f1dd0a9ab58eb744d063d4f6a3027
|
|
| BLAKE2b-256 |
48abeec84c52d58d62ff97c81c95663be8508f227f21869723921ddde9d694ab
|
Provenance
The following attestation bundles were made for legacy_doc-0.1.2.tar.gz:
Publisher:
publish.yml on lcorrigan704/legacy-doc
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
legacy_doc-0.1.2.tar.gz -
Subject digest:
6e27bb2dd076d30f845a15f2ad5538733979e10d6370dbc892c7e4e5f1167e90 - Sigstore transparency entry: 1655396631
- Sigstore integration time:
-
Permalink:
lcorrigan704/legacy-doc@7609ef104e521a3ded0bfc58a2ed3a4c1e344af0 -
Branch / Tag:
refs/tags/v0.1.2 - Owner: https://github.com/lcorrigan704
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@7609ef104e521a3ded0bfc58a2ed3a4c1e344af0 -
Trigger Event:
release
-
Statement type:
File details
Details for the file legacy_doc-0.1.2-py3-none-any.whl.
File metadata
- Download URL: legacy_doc-0.1.2-py3-none-any.whl
- Upload date:
- Size: 8.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
2e86dae754c9e0b42d1662620c5068e6431af93a119df68e41602d6f8c2edf0f
|
|
| MD5 |
e9a1a3bee5e562d7f7ad5c3ea1183dca
|
|
| BLAKE2b-256 |
cad8e8e6319e8ca9bff470e64e16e27d8e2a5ab8dbf032d1cbc4f70f729a87d2
|
Provenance
The following attestation bundles were made for legacy_doc-0.1.2-py3-none-any.whl:
Publisher:
publish.yml on lcorrigan704/legacy-doc
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
legacy_doc-0.1.2-py3-none-any.whl -
Subject digest:
2e86dae754c9e0b42d1662620c5068e6431af93a119df68e41602d6f8c2edf0f - Sigstore transparency entry: 1655396874
- Sigstore integration time:
-
Permalink:
lcorrigan704/legacy-doc@7609ef104e521a3ded0bfc58a2ed3a4c1e344af0 -
Branch / Tag:
refs/tags/v0.1.2 - Owner: https://github.com/lcorrigan704
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@7609ef104e521a3ded0bfc58a2ed3a4c1e344af0 -
Trigger Event:
release
-
Statement type: