Este proyecto es exclusivamente para fines educativos y de investigación. La extracción de datos (scraping) implementada en este proyecto tiene como único objetivo el estudio académico y la práctica del desarrollo de software, sin fines comerciales.
No se pretende violar los términos de servicio de ningún sitio web. Los datos extraídos no se redistribuyen ni se utilizan con fines comerciales. El desarrollador no se hace responsable del mal uso que se pueda hacer de estas herramientas.
Cualquier entidad que considere que sus derechos están siendo vulnerados puede contactar con el desarrollador para solicitar la eliminación del contenido correspondiente.
The Critical Lens es una aplicación web desarrollada con Django y Tailwind CSS que ayuda a los usuarios a combatir la desinformación mediante herramientas basadas en el pensamiento crítico. En la era digital, donde la información fluye sin control, discernir la verdad se ha vuelto más difícil que nunca. Este proyecto ofrece:
- Analizador de Credibilidad: Evalúa automáticamente la credibilidad de noticias y contenidos usando parámetros de verificación de hechos y principios del pensamiento crítico.
- Estadísticas de Desinformación: Análisis de datos sobre casos verificados de desinformación para comprender mejor el panorama actual y desarrollar herramientas de evaluación crítica efectivas.
- Base de Datos de Verificación: Sistema de scraping que extrae y almacena verificaciones de hechos del portal Newtral para su análisis.
Esta aplicación se basa en los conceptos y herramientas del pensamiento crítico desarrollados por la Fundación para el Pensamiento Crítico (Dr. Richard Paul y Dra. Linda Elder), cuya guía se encuentra en el directorio /docs
del proyecto. Los criterios de análisis implementados en el servicio ContentAnalysisService
se han desarrollado siguiendo los estándares intelectuales universales y elementos del pensamiento descritos en esta guía.
- Backend: Django 5.1.7
- Frontend: Tailwind CSS 3.4
- Base de datos: PostgreSQL
- Web Scraping: Selenium, BeautifulSoup4
- Testing: Pytest
- Infraestructura: Docker & Docker Compose
El proyecto puede instalarse mediante Docker (recomendado) o de forma manual.
Esta opción proporciona un entorno completo y aislado con todas las dependencias necesarias, incluyendo PostgreSQL, Tailwind CSS y ChromeDriver para los tests.
- Docker y Docker Compose instalados en tu sistema
-
Clonar el repositorio
git clone https://github.com/tuusuario/the-critical-lens.git cd the-critical-lens
-
Crear archivo de configuración
cp .env.example .env
El archivo
.env
debe contener las siguientes variables para funcionar con Docker:# Django settings SECRET_KEY=django-insecure-your-secure-key-here DEBUG=True ALLOWED_HOSTS=127.0.0.1,localhost # Database settings DB_NAME=critical_lens DB_USER=postgres DB_PASSWORD=postgres DB_HOST=db # Importante: usar 'db' para conectar con la base de datos en Docker DB_PORT=5432
-
Iniciar los contenedores
# Iniciar la base de datos docker-compose up -d db # Iniciar el entorno de desarrollo de Django y Tailwind docker-compose up -d dev
-
Acceder a la aplicación La aplicación estará disponible en http://localhost:8000/
# Ver logs de la aplicación
docker-compose logs -f dev
# Extraer artículos de Newtral (limit=5)
docker-compose exec dev python manage.py scrape_newtral --limit 5
# Crear superusuario para el panel de administración
docker-compose exec dev python manage.py createsuperuser
El proyecto permite alternar fácilmente entre usar la base de datos en Docker o una base de datos local/externa:
-
Para usar la base de datos en Docker:
# Abre el archivo .env y asegúrate de que contenga esta línea: DB_HOST=db
-
Para usar una base de datos local/externa:
# Abre el archivo .env y cambia la configuración a: DB_HOST=localhost # O la dirección IP/hostname de tu base de datos externa
-
Después de cambiar el archivo .env, reinicia los contenedores:
docker-compose restart dev
Esta configuración te permite desarrollar con flexibilidad, usando la base de datos en Docker cuando quieres un entorno completamente autocontenido, o conectándote a una base de datos externa cuando sea necesario.
Si prefieres una instalación sin Docker, sigue estos pasos:
-
Asegúrate de tener los requisitos previos:
- Python 3.8+
- PostgreSQL
- Node.js y NPM (para Tailwind CSS)
- Chrome WebDriver (para el scraping con Selenium)
-
Clonar el repositorio
git clone https://github.com/tuusuario/the-critical-lens.git cd the-critical-lens
-
Crear y activar entorno virtual
python -m venv venv # En Windows venv\Scripts\activate # En macOS/Linux source venv/bin/activate
-
Instalar dependencias
pip install -r requirements.txt
-
Configurar variables de entorno
cp .env.example .env
El archivo
.env
debe contener:# Django settings SECRET_KEY=django-insecure-your-secure-key-here DEBUG=True ALLOWED_HOSTS=127.0.0.1,localhost # Database settings DB_NAME=critical_lens DB_USER=postgres DB_PASSWORD=postgres DB_HOST=localhost # Importante: usar 'localhost' para instalación manual DB_PORT=5432
-
Configurar base de datos PostgreSQL
# Crear base de datos en PostgreSQL createdb critical_lens
-
Aplicar migraciones
python manage.py migrate
-
Configurar Tailwind CSS
cd theme/static_src npm install cd ../.. python manage.py tailwind start
-
Ejecutar servidor de desarrollo
python manage.py runserver
-
Crear superusuario (opcional)
python manage.py createsuperuser
La aplicación estará disponible en http://127.0.0.1:8000/
El analizador evalúa diferentes aspectos de un contenido siguiendo los principios del pensamiento crítico:
- Título: Verifica la longitud y estructura del título, evaluando su claridad y precisión.
- Autor: Verifica la credibilidad de la fuente, aplicando criterios de autoridad y confiabilidad.
- Contenido: Analiza el lenguaje empleado, buscando palabras sensacionalistas o emocionalmente cargadas que puedan indicar sesgo o manipulación.
- Fuente: Compara con una base de datos de fuentes de mayor y menor credibilidad, basada en el historial de verificación de hechos.
Cada uno de estos aspectos recibe una puntuación y retroalimentación detallada, generando una evaluación global de la credibilidad del contenido.
URL: /analyzer/
Visualiza datos sobre la desinformación verificada a partir de los artículos fact-check del portal Newtral, incluyendo:
- Distribución por categorías de verificación
- Fuentes más frecuentes de contenido verificado
- Temáticas más comunes de desinformación
URL: /statistics/
# Con Docker:
docker-compose exec dev python manage.py scrape_newtral --limit 10
# Sin Docker:
python manage.py scrape_newtral --limit 10
# Con Docker - todos los tests:
docker-compose run --rm test
# Con Docker - tests específicos:
docker-compose run --rm test pytest -v apps/scraper/tests/test_base_scraper.py
docker-compose run --rm test pytest -v apps/scraper/tests/test_user_agent_rotation.py
docker-compose run --rm test pytest -v apps/scraper/tests/test_newtral_scraper.py
# Sin Docker - todos los tests:
pytest -v apps/scraper/tests/
# Sin Docker - tests específicos:
pytest -v apps/scraper/tests/test_base_scraper.py
pytest -v apps/scraper/tests/test_user_agent_rotation.py
pytest -v apps/scraper/tests/test_newtral_scraper.py
El proyecto sigue una arquitectura modular orientada a buenas prácticas de desarrollo Django:
the-critical-lens/
├── apps/ # Aplicaciones Django (estructura modular)
│ ├── analyzer/ # App de análisis de credibilidad
│ │ ├── services.py # Servicio de análisis de contenido
│ │ ├── templates/ # Plantillas HTML
│ │ ├── views.py # Vistas
│ │ └── ...
│ ├── dashboard/ # App de inicio y dashboard
│ │ ├── templates/ # Plantillas HTML
│ │ ├── views.py # Vistas
│ │ └── ...
│ └── scraper/ # App de scraping de fact-checks
│ ├── management/ # Comandos personalizados
│ ├── migrations/ # Migraciones de base de datos
│ ├── models.py # Modelos de datos
│ ├── scrapers/ # Implementaciones de scrapers
│ │ ├── base.py # Scraper base
│ │ └── newtral.py # Scraper para Newtral
│ ├── services.py # Servicio de scraping
│ ├── utils/ # Utilidades (logging, user agents, etc.)
│ ├── views.py # Vistas (estadísticas)
│ └── ...
├── core/ # Configuración principal de Django
│ ├── settings.py # Configuración del proyecto
│ ├── urls.py # URLs del proyecto
│ └── ...
├── docs/ # Documentación del proyecto
│ └── miniguia_pensamiento_critico.pdf # Guía que fundamenta los criterios de análisis
├── templates/ # Plantillas globales
│ └── base.html # Plantilla base
├── theme/ # Configuración de Tailwind CSS
│ └── static_src/ # Archivos fuente para Tailwind
├── static/ # Archivos estáticos para producción
│ └── img/ # Imágenes del proyecto
├── docker-compose.yml # Configuración de Docker Compose
├── Dockerfile # Configuración de la imagen Docker
├── .env_example # Ejemplo de variables de entorno
├── .gitignore # Archivos ignorados por Git
├── manage.py # Script de administración de Django
├── pytest.ini # Configuración de Pytest
└── requirements.txt # Dependencias del proyecto
Esta estructura sigue buenas prácticas de desarrollo Django, con clara separación de responsabilidades y organización modular.
La siguiente imagen muestra la estructura relacional de la base de datos:
Ver diagrama de la base de datos
Esta estructura permite gestionar eficientemente tanto las categorías de verificación como los artículos extraídos mediante el scraper.
Almacena las categorías de verificación utilizadas para clasificar los fact-checks.
Campo | Tipo | Descripción |
---|---|---|
name | CharField | Nombre de la categoría (ej. "Falso", "Engañoso") |
description | TextField | Descripción de la categoría |
color | CharField | Código de color para representación visual |
Almacena artículos de verificación de hechos extraídos del portal Newtral.
Campo | Tipo | Descripción |
---|---|---|
title | CharField | Título del artículo |
url | URLField | URL única del artículo |
publish_date | DateField | Fecha de publicación |
verification_category | ForeignKey | Categoría de verificación |
claim | TextField | Afirmación verificada |
claim_source | CharField | Fuente de la afirmación |
content | TextField | Contenido del artículo |
tags | CharField | Etiquetas temáticas |
author | CharField | Autor del artículo |
scraped_at | DateTimeField | Fecha de extracción |
is_processed | BooleanField | Estado de procesamiento |
- Implementación de modelos de NLP (Procesamiento de Lenguaje Natural) para un análisis más preciso del contenido
- Uso de APIs como OpenAI, HuggingFace o Google Cloud NLP para enriquecer el análisis
- Integración con datasets de fact-checking para entrenar modelos propios de detección de fake news
- Desarrollo de un sistema de puntuación más granular basado en técnicas de machine learning
- Implementación de CI/CD para pruebas automáticas y despliegue
- Despliegue en plataformas como Render o Railway para acceso público
- Ampliación de los servicios Docker para incluir entornos de producción y staging
Si deseas contribuir a este proyecto, por favor:
- Haz un fork del repositorio
- Crea una rama para tu funcionalidad (
git checkout -b feature/nueva-funcionalidad
) - Haz commit de tus cambios (
git commit -am 'Añade nueva funcionalidad'
) - Sube la rama (
git push origin feature/nueva-funcionalidad
) - Abre un Pull Request
Este proyecto está licenciado bajo la Licencia MIT