- NEW LICENSE_TESSERACT.txt at the repo root: header noting it covers the bundled Tesseract OCR binary (Apache 2.0, upstream tesseract-ocr/tesseract, copyright Google + contributors) and the eng.traineddata from tessdata_best (also Apache 2.0). Clarifies DataTools itself remains proprietary. Full canonical Apache 2.0 license text included. - README.md + README.es.md (Download section): bumped size estimate ~200 MB → ~300 MB, added a short paragraph stating Tesseract OCR is bundled (no separate install required), with a link to the new license file. - docs/USER-GUIDE.md + docs/USER-GUIDE.es.md (§1.6 System requirements): bumped disk estimate, added a paragraph stating Tesseract 5.5 + eng.traineddata ship inside every installer / portable / AppImage, with a source-install fallback hint pointing developers to DEVELOPER.md. - docs/DEVELOPER.md: new "PDF Extractor — bundled Tesseract" section documenting the runtime layout (sys._MEIPASS / tesseract / …), discovery order, source of bytes (build/vendor/tessdata + per- platform fetch in make_release.py), version pin, update recipe. - docs/TECHNICAL.md: new §3.10 "Bundled Tesseract (PDF Extractor OCR)" — short version of the discovery order for the build pipeline section. - build/README.md: distribution-outputs paragraph now lists Tesseract among bundled deps with the ~250-300 MB estimate; new "Tesseract bundling" section: layout diagram, resolver order, source of bytes + 5.5.0 pin, update steps, license-file ref. Out-of-scope gaps noted by the docs sweep: - docs/FUTURE-TOOLS.md §D still describes Tesseract bundling as a high-risk packaging headache; now superseded. Worth a one-line "(resolved — bundled as of v1.x)" callout in a future pass. - USER-GUIDE §2 "What's included" table doesn't list PDF Extractor at all (it shipped in b8aff86…967d3f6). Separate gap to close. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
104 lines
5.5 KiB
Markdown
104 lines
5.5 KiB
Markdown
> 🌐 **Language:** English · [Español](README.es.md)
|
|
|
|
# DataTools
|
|
|
|
Local CSV / Excel cleaning. CLI + browser GUI, no cloud, no install ceremony. GUI ships with English and Spanish language packs.
|
|
|
|
## Tools
|
|
|
|
| # | Tool | Status |
|
|
|---|------|--------|
|
|
| 01 | **Find Duplicates** — exact + fuzzy match, 5 normalizers, survivor rules, audit | Ready |
|
|
| 02 | **Clean Text** — whitespace, smart chars, BOM, line endings, case ops | Ready |
|
|
| 03 | **Standardize Formats** — dates, phones, emails, addresses, names, currencies, booleans | Ready |
|
|
| 04 | **Fix Missing Values** — disguised-null detection, profile, mean/median/mode/ffill/bfill/interpolate, drop strategies | Ready |
|
|
| 05 | **Map Columns** — fuzzy auto-rename, target schema with type coercion, required fields with defaults, drop/reorder | Ready |
|
|
| 06 | Find Unusual Values | Coming Soon |
|
|
| 07 | Combine Files | Coming Soon |
|
|
| 08 | Quality Check | Coming Soon |
|
|
| 09 | **Automated Workflows** — chain tools with recommended (not forced) order, save/load JSON, automate weekly cleanups | Ready |
|
|
|
|
Every tool page has an in-tool **Help** popover (right of the title) with a compact When-to-use / Steps / Examples / Tip card. Copy lives in the language packs (`tools.<id>.help_md`).
|
|
|
|
## Download (non-technical users)
|
|
|
|
Pre-built bundles — no Python install, no admin rights, no internet at runtime. Each release ships two flavors per OS: an **installer** that wires up Desktop + Start Menu / Launchpad shortcuts, and a **portable .zip** you unzip and double-click. Pick whichever your IT policy allows.
|
|
|
|
| Platform | Installer (recommended) | Portable (no install) |
|
|
|---|---|---|
|
|
| **macOS** | `DataTools-X.Y.Z-mac.dmg` — open, drag DataTools.app into /Applications, launch from Launchpad. | `DataTools-X.Y.Z-mac-portable.zip` — unzip anywhere, double-click `DataTools.app`. |
|
|
| **Windows** | `DataTools-X.Y.Z-win-setup.exe` — run installer (per-user, no admin). Desktop shortcut + Start Menu entry created. | `DataTools-X.Y.Z-win-portable.zip` — unzip anywhere, double-click `DataTools.exe`. |
|
|
| **Linux** | `DataTools-X.Y.Z-linux-x86_64.AppImage` — `chmod +x`, double-click. | The AppImage is already portable. |
|
|
|
|
Latest release: see [GitHub Releases](https://git.invixiom.com/giteadmin/datatools-dev/releases) (or the Gumroad listing). Each bundle is ~300 MB unpacked; on first launch the app starts a local server at http://127.0.0.1:8501 and opens your default browser. Nothing leaves your machine — installers and portables are byte-identical inside.
|
|
|
|
**Tesseract OCR is bundled.** Scanned-PDF support in the PDF Extractor works out of the box on all three platforms — no separate Tesseract install required. License attribution: see [`LICENSE_TESSERACT.txt`](LICENSE_TESSERACT.txt).
|
|
|
|
**First-launch warnings (one-time):**
|
|
- **macOS** unsigned builds: right-click → **Open** → confirm. (Signed builds skip this.)
|
|
- **Windows** SmartScreen: click **More info** → **Run anyway**.
|
|
|
|
Detailed install + troubleshooting walkthrough: [User Guide §1](docs/USER-GUIDE.md#1-install).
|
|
|
|
## Install from source (developers)
|
|
|
|
```bash
|
|
pip install -r requirements.txt
|
|
```
|
|
|
|
Python 3.10+ required.
|
|
|
|
## Run
|
|
|
|
**GUI** (recommended):
|
|
```bash
|
|
streamlit run src/gui/app.py
|
|
```
|
|
|
|
**CLI** — seven entry points:
|
|
```bash
|
|
python -m src.cli customers.csv [--apply] # dedup
|
|
python -m src.cli_text_clean messy.csv [--apply] # text clean
|
|
python -m src.cli_format intl.csv [--apply] # format standardize (auto-streams >100 MB)
|
|
python -m src.cli_missing holes.csv [--apply] # missing values
|
|
python -m src.cli_column_map vendor.csv [--apply] # column mapper
|
|
python -m src.cli_pipeline any_file.csv [--apply] # chain tools end-to-end
|
|
python -m src.cli_analyze any_file.csv [--json] # scan only
|
|
```
|
|
|
|
Every CLI runs preview-only by default; add `--apply` to write output.
|
|
|
|
## Language
|
|
|
|
The GUI sidebar has a language picker. Packs ship for **English** and **Español** (`src/i18n/packs/`); the choice persists for the session. Adding a language: drop a `<code>.json` next to `en.json` mirroring its key tree, then list it in `LANGUAGES`. See [Developer Guide §i18n](docs/DEVELOPER.md#i18n--language-packs).
|
|
|
|
## Review & Normalize gate
|
|
|
|
Every uploaded file passes through a CSV-normalization gate before any tool sees it. The analyzer flags ~15 issue types (whitespace, NBSP / zero-width chars, BOM, encoding, smart punct, dirty headers, null sentinels, mojibake, …) tagged by **confidence** (high / medium / low) and **fix action**. The GUI shows each finding with Auto-fix / Skip / Customize, a live before/after preview, and an encoding-override picker. Tool pages refuse to load until the gate passes.
|
|
|
|
## Output
|
|
|
|
Every run writes:
|
|
|
|
- `{input}_<tool>.csv` — the cleaned data
|
|
- `{input}_changes.csv` (text cleaner) or `{input}_match_groups.csv` (dedup) — audit trail
|
|
- `logs/<tool>_YYYYMMDD_HHMMSS.log` — debug-level run log
|
|
|
|
Original input file is never modified.
|
|
|
|
## Docs
|
|
|
|
- [User Guide](docs/USER-GUIDE.md) — install, GUI workflow, gate
|
|
- [CLI Reference](docs/CLI-REFERENCE.md) — every flag with recipes
|
|
- [Requirements](docs/REQUIREMENTS.md) — file sizes, encodings, detectors, perf targets
|
|
- [Technical](docs/TECHNICAL.md) — architecture, gate internals, fix registry
|
|
- [Developer Guide](docs/DEVELOPER.md) — adding fixes / detectors / standardizers
|
|
|
|
## Dependencies
|
|
|
|
`pandas`, `openpyxl`, `rapidfuzz`, `phonenumbers`, `typer`, `loguru`, `charset-normalizer`, `streamlit`. Optional: `ftfy` for mojibake repair.
|
|
|
|
## License
|
|
|
|
Proprietary.
|