Sitemap

Cumpli-Miento: Detección de cumplimiento del RGPD en políticas de privacidad web.

4 min readJun 27, 2024

--

El proyecto “Cumpli-Miento” tiene como objetivo detectar el cumplimiento del RGPD en políticas de privacidad de sitios web mediante el uso de técnicas de aprendizaje automático y procesamiento de lenguaje natural. Este modelo permite evaluar automáticamente si las políticas de privacidad cumplen con los requisitos legales establecidos por el Reglamento General de Protección de Datos (RGPD).

Objetivo

El objetivo principal es convertir el texto de las políticas de privacidad en datos estructurados que puedan ser analizados para verificar su conformidad con el RGPD. Este proceso implica extraer, procesar y analizar el contenido de estas políticas utilizando modelos de aprendizaje automático que identifican y evalúan diversos derechos y obligaciones estipulados por la normativa.

Estructura y Funcionalidad de los Módulos

El proyecto se organiza en una serie de módulos que se ejecutan de manera secuencial para llevar a cabo el análisis de las políticas de privacidad:

1. Cargar los datos

Este módulo se encarga de descomprimir y cargar los archivos de políticas de privacidad desde un archivo ZIP.

import zipfile
import os

# Definir la ruta del archivo zip cargado
zip_file_path = '/content/privacy_policys.zip' # Cambiar esta ruta por la ruta correcta de tu archivo zip
extract_path = '/content/privacy_policys' # Cambiar esta ruta por la ruta donde quieres descomprimir los archivos

# Descomprimir el archivo zip
with zipfile.ZipFile(zip_file_path, 'r') as zip_ref:
zip_ref.extractall(extract_path)

# Listar los archivos extraídos para asegurarse de que se han descomprimido correctamente
extracted_files = os.listdir(extract_path)
print("Archivos extraídos:", extracted_files[:10]) # Muestra solo los primeros 10 archivos para brevedad

2. Preparación de los Datos

Este módulo carga los datos CSV y prepara el DataFrame añadiendo columnas necesarias para el análisis.

import os
import pandas as pd

# Cargar el archivo CSV
csv_file_path = '/content/Refined_Corrected_Data.csv'
data = pd.read_csv(csv_file_path)

# Añadir una nueva columna 'Filename' en el DataFrame con los nombres simples de las empresas
data['Filename'] = data['Empresa'].apply(lambda x: x + '.html')

# Verificar las primeras filas del DataFrame
print(data.head())

3. Definición y Entrenamiento de Modelos

En este módulo, se definen y entrenan los modelos de aprendizaje automático utilizando técnicas de procesamiento de texto.

from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.linear_model import LogisticRegression
import pickle

# Ejemplo de vectorizador y modelo
vectorizer = TfidfVectorizer()
model = LogisticRegression()

# Entrenar el modelo para un derecho específico (ejemplo)
X = vectorizer.fit_transform(data['Text'])
y = data['Label']

model.fit(X, y)

# Guardar el modelo y el vectorizador con pickle
with open('vectorizer.pkl', 'wb') as f:
pickle.dump(vectorizer, f)

with open('model.pkl', 'wb') as f:
pickle.dump(model, f)

4. Evaluación de Políticas de Privacidad

Este módulo evalúa las políticas de privacidad para verificar el cumplimiento de los derechos establecidos por el RGPD.

import requests
from bs4 import BeautifulSoup

# Definir derechos
derechos = [
'Derecho a ser informado',
'Derecho de acceso',
'Derecho de rectificación',
'Derecho de eliminación',
'Derecho de procesamiento restringido',
'Derecho a la portabilidad de los datos',
'Derecho de oposición',
'Derechos relacionados con la toma de decisiones y la elaboración de perfiles automatizados'
]

# Función para extraer texto de una URL
def extract_text_from_url(url):
response = requests.get(url)
if response.status_code == 200:
soup = BeautifulSoup(response.text, 'html.parser')
text = soup.get_text(separator=' ', strip=True)
return text
else:
print(f"Error al acceder a la URL: {response.status_code}")
return None

# Función para evaluar el texto extraído para cada derecho
def evaluate_rights_from_url(url, models, vectorizers):
text = extract_text_from_url(url)
if text:
results = {}
for derecho in derechos:
if derecho in models:
vectorizer = vectorizers[derecho]
model = models[derecho]
X_new = vectorizer.transform([text])
prediction = model.predict(X_new)
results[derecho] = 'Cumple' si prediction[0] else 'No cumple'
else:
results[derecho] = 'Sin datos suficientes'
return results
else:
return None

# Ejemplo de URL para evaluar
url_to_evaluate = "https://pokedoku.com/policy"
results = evaluate_rights_from_url(url_to_evaluate, models, vectorizers)
print("Resultados de la evaluación:")
for derecho, resultado in results.items():
print(f"{derecho}: {resultado}")

Obstáculos y Soluciones

A lo largo del desarrollo del proyecto, nos enfrentamos a varios desafíos técnicos:

  1. Creación de Directorios: Inicialmente, la ausencia de directorios necesarios causaba errores en la ejecución. Solucionamos esto añadiendo una función para verificar y crear los directorios si no existían.
  2. Precisión en la Identificación de Elementos: Ajustamos los parámetros de identificación para mejorar la precisión en la detección de elementos clave dentro de las políticas de privacidad.
  3. Reconocimiento de Texto: Inicialmente, el modelo funcionaba a raíz de las URLS y de las peticiones de reconocimiento de texto a las webs,pero no fue lo suficientemente robusto, por lo que optamos por convertir la información de las urls a texto html que pudiera ser procesado.
  4. Combinación de Resultados: La correcta combinación de diferentes partes del análisis para mantener la coherencia fue uno de los principales retos, que resolvimos mediante una estructura de directorios adecuada.

Ejecución del Proceso Completo

Para ejecutar el proceso completo desde un archivo de políticas de privacidad en formato PDF hasta los resultados finales:

1. Carga de Ficheros

Cargar el archivo de políticas de privacidad en el directorio /data/input/PrivacyPolicies.

2. Ejecución de la Pipeline

Ejecutar el archivo cumpli_miento.py desde el directorio raíz, asegurándose de tener todas las dependencias instaladas.

3. Salida de Resultados

Los resultados se generarán en el directorio data/output/, incluyendo evaluaciones detalladas sobre el cumplimiento del RGPD.

Tecnologías Utilizadas

  • GitHub: Control de versiones.
  • Visual Studio Code: Entorno de desarrollo.
  • Jupyter Notebooks: Depuración y procesamiento interactivo.
  • Python: Lenguaje de programación principal.
  • Google Drive: Almacenamiento de modelos.
  • Anaconda: Entornos de desarrollo.

Autores:
Daniel Carreres
Juan Sanz

--

--

No responses yet