Metadata-Version: 2.4
Name: viparse
Version: 0.1.5
Summary: Vietnamese-first document loader for RAG
Project-URL: Homepage, https://github.com/minhtridinh-kayden/viparse
Project-URL: Repository, https://github.com/minhtridinh-kayden/viparse
Project-URL: Changelog, https://github.com/minhtridinh-kayden/viparse/blob/main/CHANGELOG.md
Author: minhtridinh
License-Expression: MIT
License-File: LICENSE
Keywords: document,nfc,parser,rag,tcvn3,vietnamese,vni
Requires-Python: >=3.11
Provides-Extra: all
Requires-Dist: langchain-core<2,>=0.3; extra == 'all'
Requires-Dist: llama-index-core<1,>=0.11; extra == 'all'
Requires-Dist: olefile<1,>=0.47; extra == 'all'
Requires-Dist: openpyxl<4,>=3.1; extra == 'all'
Requires-Dist: pdf2image<2,>=1.17; extra == 'all'
Requires-Dist: pdfplumber<0.12,>=0.11; extra == 'all'
Requires-Dist: pillow<13,>=10; extra == 'all'
Requires-Dist: pytesseract<0.4,>=0.3; extra == 'all'
Requires-Dist: python-docx<2,>=1.1; extra == 'all'
Requires-Dist: striprtf<0.1,>=0.0.29; extra == 'all'
Provides-Extra: dev
Requires-Dist: build; extra == 'dev'
Requires-Dist: cyclonedx-bom; extra == 'dev'
Requires-Dist: mypy; extra == 'dev'
Requires-Dist: pytest; extra == 'dev'
Requires-Dist: pytest-cov; extra == 'dev'
Requires-Dist: reportlab<6,>=4; extra == 'dev'
Requires-Dist: ruff; extra == 'dev'
Provides-Extra: langchain
Requires-Dist: langchain-core<2,>=0.3; extra == 'langchain'
Provides-Extra: llamaindex
Requires-Dist: llama-index-core<1,>=0.11; extra == 'llamaindex'
Provides-Extra: ocr
Requires-Dist: pdf2image<2,>=1.17; extra == 'ocr'
Requires-Dist: pillow<13,>=10; extra == 'ocr'
Requires-Dist: pytesseract<0.4,>=0.3; extra == 'ocr'
Provides-Extra: office
Requires-Dist: olefile<1,>=0.47; extra == 'office'
Requires-Dist: openpyxl<4,>=3.1; extra == 'office'
Requires-Dist: python-docx<2,>=1.1; extra == 'office'
Provides-Extra: pdf
Requires-Dist: pdfplumber<0.12,>=0.11; extra == 'pdf'
Provides-Extra: rtf
Requires-Dist: striprtf<0.1,>=0.0.29; extra == 'rtf'
Description-Content-Type: text/markdown

# viparse

> Vietnamese-first document loader for RAG.

One command turns any Vietnamese document — including legacy **TCVN3/VNI/VISCII** fonts, scanned
PDFs, and old `.doc`/`.xls` files — into clean Unicode **NFC** Markdown/JSON, ready to push into a
vector DB.

## Why

Generic loaders *parse the file* but often emit **garbled diacritics** (legacy fonts) or **wrong
Unicode normalization**. `viparse` handles exactly that Vietnamese layer: detect & convert legacy
encodings to Unicode, enforce NFC, and offer diacritic-aware OCR.

**Backbone principle:** never hand-write a parser. Wrap well-maintained engines behind thin
adapters; if an engine gets a CVE or is abandoned, swap the adapter without touching the rest.
Heavy dependencies are lazy-imported via extras (`viparse[ocr]`, `viparse[office]`).

## Status

Released — [`viparse` 0.1.3 on PyPI](https://pypi.org/project/viparse/). See
[`docs/specs/`](docs/specs/README.md) for the full spec map (SPEC-0 … SPEC-8) and
[`CHANGELOG.md`](CHANGELOG.md) for release notes.

## Installation

```bash
pip install viparse               # core — pure stdlib, no parser/OCR binaries
pip install "viparse[office]"     # .docx / .xlsx and legacy .doc / .xls
pip install "viparse[pdf]"        # digital PDFs
pip install "viparse[ocr]"        # scanned PDFs (needs the Tesseract binary)
pip install "viparse[all]"        # every engine
```

Run `viparse doctor` to see which engines your installed extras enable.

## Usage

```python
import viparse

docs = viparse.load("tai_lieu_cu.pdf")            # list[Document], already NFC
docs = viparse.load("bang_luong.xlsx", output="markdown", encoding="auto")
```

```bash
viparse ./docs/**/*.pdf -o md
viparse doctor        # list available engines per installed extras
```

## License

[MIT](LICENSE) © 2026 minhtridinh
