Los modelos memorizan y filtran lo que hay en los datos de entrenamiento.
corpus-scrub
los limpia antes de entrenar: detecta PII (email, teléfono, IBAN, tarjeta, nombres) y secretos (API keys, tokens) y los redacta localmente, sin enviar nada a ningún servicio.
Los corpus raspados de la web contienen rutinariamente datos personales y credenciales. La literatura lo deja claro:
GDPR y el art. 10 de la EU AI Act prohíben datos personales no estructurados en conjuntos de entrenamiento sin consentimiento. La solución barata es limpiar el corpus antes de entrenar.
corpus-scrub
es una CLI local-first (AGPL-3.0-or-later) que escanea JSONL/TXT/Parquet y:
en_core_web_lg
para PERSON) + regex propios para EMAIL / IBAN / CARD / PHONE que no dependen de modelo y funcionan en cualquier idioma.4c232b5
), verificadas regla por regla contra el gitleaks.toml
original en los tests.mask
(<TYPE>
), hash
(sha256 truncado) o drop
.Multi-idioma para nombres (ES/DE/FR) vía modelos spaCy _lg
dedicados, con fallback multilingüe explícito y tests que fallan si el fallback se usa por accidente.
python -m venv .venv && source .venv/bin/activate
pip install -e .
corpus-scrub scan --input corpus.jsonl --policy mask --out redacted.jsonl --report report.json
corpus-scrub scan --input corpus.jsonl --lang en
Los detectores universales (email/teléfono/IBAN/tarjeta) son regex, así que no necesitan modelo y cubren cualquier idioma. El NER de PERSON usa Presidio para EN y spaCy directo para ES/DE/FR.
No todo está garantizado, y está documentado:
_lg
descargados; si faltan, los tests de precisión fallan en vez de pasar silenciosamente contra el fallback.El ruleset de secretos pasó una auditoría regla-por-regla contra la fuente de gitleaks. Se encontró y corrigió una divergencia real: la regla pypi-upload-token
usaba un comodín en vez del prefijo base64 fijo del token real, lo que generaba falsos positivos demostrados. El fix añadió un test que compara cada regla portada contra el gitleaks.toml
embebido como fixture, así que futuras derivas se detectan solas.
Cobertura de tests: 82% (fast suite sin descarga de modelos; slow suite con los _lg
).
| Componente | Uso |
|---|---|
| Presidio + spaCy | NER PERSON (EN) |
spaCy es/de/fr_core_news_lg |
|
| NER PERSON multilingüe | |
| regex gitleaks | detección de secretos |
| pytest + CI | fast/slow suites, cobertura |
git clone https://github.com/amurlaniakea/corpus-scrub
cd corpus-scrub
python -m venv .venv && source .venv/bin/activate
pip install -e .
pytest -m "not slow" # suite rápida, sin descargas
Repo: https://github.com/amurlaniakea/corpus-scrub
Licencia: AGPL-3.0-or-later. Autor: Pedro Sordo Martínez — amurlaniakea@gmail.com