Framework for masking and unmasking PII.
Project description
🕶️ VeilData
A lightweight framework for masking and unmasking Personally Identifiable Information (PII).
🧠 Why VeilData
Modern AI systems touch sensitive data every day.
VeilData makes it easy to redact, anonymize, and later restore information—using the same composable design you love from PyTorch.
🚀 Quick Start
Installation
From PyPI
pip install veildata
Run from Docker
docker build -t veildata .
alias veildata="docker run --rm -v \$(pwd):/app veildata"
veildata mask data/input.csv --out data/redacted.csv
Running in Docker
docker build -t veildata .
docker run -it ghcr.io/veildata/veildata:latest
For Development
git clone https://github.com/VeilData/veildata.git
cd veildata
curl -LsSf https://astral.sh/uv/install.sh | sh
uv venv
uv sync
Quickstart Guide
Mark sensitive data
veildata mask input.txt --out masked.txt
Reveal previously mask data
veildata unmask masked.txt --store mappings.json --out revealed.txt
** Using Docker**
docker run --rm -v $(pwd):/app veildata mask input.txt --out masked.txt
Examples
Regex-based Masking
from veildata import Compose, RegexMasker, TokenStore
# Create a shared TokenStore for reversible masking
store = TokenStore()
# Define your masking pipeline with the shared store
masker = Compose([
RegexMasker(r"[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}", store=store), # email
RegexMasker(r"\b\d{3}-\d{3}-\d{4}\b", store=store), # phone
])
text = "Contact John at john.doe@example.com or call 123-456-7890."
# --- Mask the data ---
masked_text = masker(text)
print(masked_text)
# -> Contact John at [REDACTED_1] or call [REDACTED_2].
# --- Unmask it later ---
unmasked_text = store.unmask(masked_text)
print(unmasked_text)
# -> Contact John at john.doe@example.com or call 123-456-7890.
spaCy Named Entity Recognition
# Requires `pip install veildata[spacy]`
from veildata.maskers.ner_spacy import SpacyNERMasker
from veildata import TokenStore
# Shared token store for reversible unmasking
store = TokenStore()
masker = SpacyNERMasker(
entities=["PERSON", "ORG"],
store=store
)
text = "John works at OpenAI in San Francisco."
# --- Mask automatically and track mappings ---
masked = masker(text)
print(masked)
# -> [REDACTED_1] works at [REDACTED_2] in San Francisco.
# --- Unmask using the same store ---
unmasked = store.unmask(masked)
print(unmasked)
# -> John works at OpenAI in San Francisco.
BERT-based Masking
from veildata.bert_masker import BERTNERMasker
masker = BERTNERMasker(model_name="dslim/bert-base-NER")
text = "Email Jane at jane.doe@example.com"
print(masker(text))
# -> Email [REDACTED] at [REDACTED]
🛠️ Continuous Integration
- CI: .github/workflows/ci.yml runs linting, formatting, build, and tests on every push or PR.
- Publish: .github/workflows/publish.yml auto-publishes to PyPI when a new v* tag or release is created.
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 veildata-0.1.1.tar.gz.
File metadata
- Download URL: veildata-0.1.1.tar.gz
- Upload date:
- Size: 15.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f16584bf5d8d7c6228f8a37b31e9dce8bc3c334be5f35610d224d383f36f5d8d
|
|
| MD5 |
cdeffdd232fbbf1166cc1ebe14d6e6b9
|
|
| BLAKE2b-256 |
21a05a2456273bca211f3d6576bd3545ac39799743029c1844a8df34dc741ad3
|
File details
Details for the file veildata-0.1.1-py3-none-any.whl.
File metadata
- Download URL: veildata-0.1.1-py3-none-any.whl
- Upload date:
- Size: 16.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d11db61cba606cb311ae6d08fc17e672038ca2ae3e361793ddfa9da8f0cca83a
|
|
| MD5 |
0540a098ad03ff43788215b950234ab3
|
|
| BLAKE2b-256 |
406d664d4ac15708b5c7e24fd2aaf617176a4d8636fbce941a2ffb320df771a8
|