Ingeniería
· 9 min de lectura

Por qué construir un motor de detección propio

Por Amine Gaaliche · borrador redactado con Claude, revisado y editado a mano

Porque una biblioteca de detección responde a otra pregunta. Presidio indica dónde coincide un patrón dentro de un texto. Quien tiene un PDF delante quiere saber qué ocultar en esa página. Casi todo el trabajo entre una cosa y otra consiste en decidir qué no marcar.

Un cargo no es una persona

En el anexo de un contrato de arrendamiento, bajo la firma, figura «El Director General». Un buen modelo de entidades lo etiqueta como persona, porque en esa posición suele ir un nombre.

En un expediente español abundan estos casos: «el Administrador Único», «la Consejera Delegada», «el Letrado Asesor». Si el producto acepta esas marcas, el documento se llena de huecos que no protegen nada. Además, dificultan el análisis.

Por eso mantenemos una lista de 195 cargos en varios idiomas, del «CEO» al «Directeur» o al «Geschäftsführer». Solo actúa sobre el cargo aislado. El nombre que lo acompaña sigue siendo asunto del modelo. Esta lista muestra dónde está el trabajo en este tipo de producto: en decidir qué no marcar.

Lo que hace bien una biblioteca

Presidio es una herramienta competente, y muchos lectores de este artículo lo usan. Dado un texto, devuelve el tipo de entidad, su posición inicial y final y una puntuación. Muchos equipos lo integran en flujos en la nube para limpiar texto antes de que llegue a un registro o a un modelo.

El proyecto nació en Microsoft y pasó después a gobernanza comunitaria. Es un dato sobre el proyecto, que no dice nada de su calidad ni de su futuro. Una biblioteca que devuelve posiciones hace bien su trabajo. El problema de un PDF es otro.

Entre la posición y el rectángulo

Entre la respuesta de la biblioteca y una página tachada queda mucho trabajo. Hay que convertir cada posición en coordenadas sobre una página con columnas, tablas y notas al pie. Hay que leer páginas que son fotografías y reconocer en la página 4 un nombre visto en la 1.

También hay que filtrar el ruido de cada idioma y retirar el contenido en lugar de cubrirlo. Ninguna de esas tareas depende del modelo elegido. La primera demostración sobre un visor de PDF sale en un fin de semana. Lo que viene después lleva bastante más tiempo.

Controlar el modelo nos permitió además reducirlo para el navegador, como contamos en otro artículo.

Cómo trabaja nuestro motor

La detección se organiza por capas. Primero actúan los Patrones, de alta precisión, para valores con forma reconocible. Son, por ejemplo, un DNI con su letra de control, un número de la Seguridad Social o un IBAN.

Después actúa el Reconocimiento de entidades para nombres, sociedades y domicilios. Usa un modelo configurable en cada instalación: spaCy, BERT o GLiNER. Por último está el Análisis profundo, una capa opcional desactivada por defecto.

Los resultados se fusionan, se eliminan los duplicados y se propagan por el documento. Así, un nombre de la primera página se marca también en la cuarta. Después llega el filtrado de ruido, donde actúa la lista de cargos. Ahí se concentra la mayoría de nuestras correcciones del último año.

Nada de esto garantiza que se detecte cada identificador, porque ningún modelo local lo consigue. Por eso el producto exige una revisión humana en Revisar antes de dar un documento por bueno.

Una página escaneada no tiene texto

Muchos documentos de un despacho son escaneos: la fotocopia del DNI, el contrato firmado, la notificación en papel. En una imagen no hay caracteres que analizar. Nuestro motor convierte esas páginas en imagen a 300 ppp y las lee con Tesseract en el idioma del documento más inglés.

Localiza los datos personales como regiones de la imagen y cubre esos píxeles. Después reconstruye debajo una capa de texto en la que se puede buscar.

Este método tiene un límite. Distribuimos solo ocho paquetes de idioma: inglés, francés, alemán, español, italiano, neerlandés, portugués y polaco. Con el paquete equivocado, el escaneo se lee mal y sin aviso. El resultado parece normal, pero tiene menos aciertos de los que debería.

Tachar es retirar el contenido

Un rectángulo negro sobre un texto deja el texto debajo. Cualquiera puede seleccionarlo y copiarlo. Al Tachar, nuestro motor elimina el contenido subyacente.

En la exportación sustituye además el original en las partes del archivo que no son la página visible. Pone su código si se codificó, o un marcador neutro si se tachó. Esas partes son los textos ActualText y Alt de los PDF etiquetados, los metadatos XMP y los diccionarios PieceInfo. También los destinos con nombre y los valores de los campos de formulario, con sus flujos de apariencia.

La miniatura generada antes del tachado se suprime de toda página que la lleve. Dentro de una imagen no se puede buscar y reemplazar.

Por qué el documento se queda en el equipo

Hay también un motivo jurídico. Si un documento con datos personales pasa por la infraestructura de un tercero, ese tercero es encargado del tratamiento.

El artículo 28 del RGPD exige entonces un contrato, que es lo que pediría la AEPD si revisara el tratamiento. En un despacho se suma el secreto profesional, que la LOPDGDD no desplaza.

Si un caso concreto cumple o no, lo decide cada responsable con su asesor. Nosotros describimos un hecho: si la detección se ejecuta donde ya está el archivo, en ese paso no interviene ningún tercero.

En la aplicación de escritorio, con la configuración que se instala, los documentos no salen del equipo. El modo aislado, sin comprobación de licencia ni informes de errores, es solo del plan Pro.

La aplicación gratuita del navegador también trata el documento en el equipo, pero envía una señal anónima al iniciarse. Por eso no la llamamos «100 % sin conexión».

El Análisis profundo tiene un modo de API remota que el usuario puede dirigir a un servicio de terceros. Entonces se envía texto de las páginas y vuelve a aplicarse el artículo 28.

Los códigos, carpeta a carpeta

Si en lugar de Tachar se elige Codificar, el valor se sustituye por un código reversible. Su longitud se ajusta a la del original. La correspondencia se guarda en el Registro de códigos, en el propio equipo.

Cada carpeta de la Biblioteca tiene su propio espacio de códigos y no ve las demás. Solo un código fijado a mano por el usuario es común a todas.

Durante un tiempo, nuestros textos afirmaron en siete idiomas que un mismo valor recibía un único código en toda la biblioteca. No era cierto, y lo corregimos al cotejarlo con el código fuente.

La aplicación del navegador genera los códigos con el mismo procedimiento, pero con su propia clave. El código concreto cambia, pero conserva la misma forma.

Preguntas frecuentes

¿Por qué no usar una biblioteca ya existente?

Para limpiar texto dentro de un flujo, Presidio es una opción sensata y sólida. Para entregar un PDF tachado, la biblioteca solo resuelve la detección y le deja la geometría, los escaneos, el filtrado y la limpieza. Los defectos suelen aparecer donde se unen las piezas, y preferimos controlar el conjunto.

¿La diferencia está en el modelo o en el filtrado?

Sobre todo en el filtrado: el modelo se puede cambiar, y lo que decide es qué se hace con sus resultados. En la ejecución publicada de nuestra comparativa, que no se ha repetido, Presidio en su instalación por defecto marcó 666 fragmentos y nuestro motor 252. Un recuento mayor no prueba nada: un falso positivo sobre «Director General» suma lo mismo que un IBAN.

¿Sale el documento del equipo durante la detección?

En la aplicación de escritorio, con la configuración por defecto, no. En la aplicación del navegador tampoco sale de la máquina, aunque se envía una señal anónima de inicio. La excepción es el modo de API remota del Análisis profundo, si usted lo activa.

¿Le ha resultado útil? Háganoslo saber.

Compartir