Proyecto para:
- Descargar noticias desde una API pública de noticias (por ejemplo, NewsAPI).
- Analizar el sentimiento del título y del contenido de cada noticia usando un modelo local vía Ollama (llama3.2).
- Detectar posibles casos de clickbait comparando ambos sentimientos.
- Visualizar los resultados en una interfaz web hecha con Streamlit.
-
Python 3.10+ (recomendado 3.11 o 3.12).
-
Ollama instalado en tu máquina (para usar el modelo
llama3.2):-
Descargar desde:
https://ollama.com -
Luego, en una terminal:
ollama pull llama3.2
-
-
Una API key de NewsAPI (o similar):
- Regístrate en
https://newsapi.org - Obtén tu API Key.
- Regístrate en
news_api_script.py: script para descargar noticias desde la API y guardarlas en CSV.data/noticias.csv: archivo generado con las noticias descargadas.sentiment_analyzer.py: claseSentimentAnalyzerque usa Ollama (modelollama3.2) para clasificar el sentimiento.app.py: aplicación Streamlit que:- Carga un CSV de noticias.
- Analiza sentimiento de título y contenido.
- Detecta posibles casos de clickbait.
- Muestra resultados y métricas.
requirements.txt: dependencias del proyecto.
Desde la carpeta del proyecto:
python -m venv venv
venv\Scripts\activate # En Windows
# o en macOS / Linux:
# source venv/bin/activate
pip install -r requirements.txt- En la raíz del proyecto, crea un archivo llamado
.env. - Dentro de
.env, agrega tu API key de noticias:
NEWS_API_KEY=tu_api_key_de_newsapi
- (Opcional) Si Ollama no corre en
http://localhost:11434, puedes definir:
OLLAMA_BASE_URL=http://tu_host_ollama:11434
El proyecto usa python-dotenv para cargar estas variables automáticamente.
El script news_api_script.py:
- Carga la API key desde
.env. - Llama a la API de noticias (ejemplo: busca noticias sobre el Mundial).
- Convierte la respuesta en un
DataFramedepandas. - Guarda las noticias en
data/noticias.csv.
Ejecutar:
python news_api_script.pyDentro del script puedes ajustar:
query(por ejemplo"Mundial","economía Argentina","tecnología", etc.).page_size(cantidad máxima de noticias a descargar).language(por ejemplo"es"para español).
El archivo sentiment_analyzer.py define la clase:
SentimentAnalyzer:- Usa
langchain-ollamapara conectarse a Ollama. - Modelo utilizado:
llama3.2(modelo pequeño, ideal para correr localmente). - Se le pasa un prompt con el título (o contenido) de la noticia.
- Devuelve una de estas etiquetas:
POSITIVENEUTRALNEGATIVE
- Usa
Antes de usarlo, asegurate de que Ollama esté corriendo y que ya descargaste el modelo:
ollama pull llama3.2La app principal está en app.py.
Para ejecutarla:
streamlit run app.py- Te permite subir un archivo CSV (por ejemplo,
data/noticias.csv). - Muestra cuántas filas/noticias hay.
- Te deja elegir:
- Columna de TÍTULO (por defecto
titlesi existe). - Columna de CONTENIDO (por defecto
contentsi existe).
- Columna de TÍTULO (por defecto
- Te permite elegir cuántas noticias analizar:
- Primeros 10 títulos.
- Primeros 50 títulos.
- Dataset completo.
- Para cada noticia:
- Analiza el sentimiento del título.
- Analiza el sentimiento del contenido.
- Calcula si la combinación se considera clickbait.
- Muestra:
- Número de casos coherentes (no clickbait).
- Número de casos clickbait.
- Total analizado.
- Una tabla con:
- Título
- Contenido
- Sentimiento del título
- Sentimiento del contenido
- Flag
is_clickbait.
-
Crear entorno y dependencias
- Crear
venvy ejecutar:pip install -r requirements.txt.
- Crear
-
Configurar variables de entorno
-
Crear
.envcon:NEWS_API_KEY=tu_api_key_de_newsapi -
(Opcional) Configurar
OLLAMA_BASE_URLsi usas otra URL.
-
-
Descargar noticias
-
Ejecutar:
python news_api_script.py
-
Esto generará
data/noticias.csv.
-
-
Ejecutar el detector de clickbait
-
Lanzar la app:
streamlit run app.py
-
Subir el CSV de noticias.
-
Elegir columnas de título y contenido.
-
Elegir si quieres analizar 10, 50 o todas las noticias.
-
Revisar cuántos casos se marcan como clickbait según la definición anterior.
-
- Probar otros modelos de Ollama (más grandes o especializados) si tu hardware lo permite.
- Ajustar la definición de clickbait o agregar más categorías (por ejemplo, grado de exageración).
- Guardar resultados enriquecidos (sentimientos, flag de clickbait).