You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Sistema de inteligência geopolítica baseado em NLP que monitora o conflito Irã × EUA × Israel em fontes abertas, produzindo um Índice de Tensão (TI) multidimensional com escala DEFCON visual, grafo de co-ocorrência de atores e detecção automática de fases e narrativas do conflito.
Disciplina: Modelagem de Dados Não Estruturados (MDNE) — Reposição Etapa 3 Instituição: UFPB — 2026
Resultado atual
Métrica
Valor
Documentos analisados
193
Fontes RSS
8
Período coberto
27/03/2026 → 07/04/2026
Sentimento negativo
72,0%
Fase dominante
escalation (73,6%)
Tension Index médio
35,85 / 100
DEFCON atual
4 — Tensão Moderada
Visão geral
O TensionMeter automatiza o monitoramento de tensão geopolítica em três etapas:
Fontes RSS (feedparser)
↓
Pré-processamento (spaCy en_core_web_lg)
Tokenização · Lematização · POS · NER · Noun Chunks
↓
Análise de Sentimento (XLM-RoBERTa)
cardiffnlp/twitter-xlm-roberta-base-sentiment
↓
Classificação Zero-Shot (BART)
facebook/bart-large-mnli → fases do conflito + narrativas
↓
Tension Index
TI = 0,35·S + 0,30·P + 0,20·H + 0,15·C → DEFCON 1–5
Fórmula do Tension Index
TI = 0,35 × S + 0,30 × P + 0,20 × H + 0,15 × C
S Negatividade do sentimento (0–100)
P Severidade da fase do conflito escalation=100 · retaliation=80 · provocation=60
diplomacy=20 · truce=10
H Hostilidade entre atores pares hostis detectados × 25 (máx 100)
C Clickbait / alarmismo palavras-gatilho no texto × 6,25 (máx 100)
DEFCON 81–100 = 1 | 61–80 = 2 | 41–60 = 3 | 21–40 = 4 | 0–20 = 5
# 1. Instalar dependências
uv sync
# 2. Baixar modelo spaCy
uv run python -m spacy download en_core_web_lg
# 3. Configurar variáveis de ambiente
cp .env.example .env
# Editar .env com suas credenciais Reddit (opcional)
Executar os notebooks (fluxo principal)
Os notebooks devem ser executados nessa ordem:
uv run jupyter lab
Notebook
Gera
Depende de
01_exploracao.ipynb
data/raw/corpus_raw.parquet
—
02_modelagem.ipynb
data/processed/corpus_nlp.parquet
corpus_raw.parquet
03_avaliacao.ipynb
fig_*.png + metricas_finais.csv
corpus_nlp.parquet
Rodar a API
uv run python src/main.py
# ou diretamente:
uv run uvicorn src.app.server:app --reload --port 8000
Documentação interativa disponível em http://localhost:8000/docs.
Rodar o dashboard
uv run streamlit run dashboard/app.py
Rodar os testes
uv run pytest tests/ -v
Coleta manual de dados
# Com a API rodando:
curl -X POST http://localhost:8000/api/v1/conflict/collect
Endpoints da API
Método
Endpoint
Descrição
GET
/health
Status do sistema
POST
/api/v1/conflict/analyze
Analisa um texto avulso
GET
/api/v1/conflict/tension
TI atual + histórico
GET
/api/v1/conflict/actors
Grafo de atores agregado
GET
/api/v1/conflict/feed
Últimas notícias processadas
POST
/api/v1/conflict/collect
Dispara coleta manual
Variáveis de ambiente
# Reddit API (opcional — obter em reddit.com/prefs/apps)REDDIT_CLIENT_ID=your_client_idREDDIT_CLIENT_SECRET=your_client_secretREDDIT_USER_AGENT=tensionmeter:v1.0# APIAPI_HOST=0.0.0.0API_PORT=8000DEBUG=false# PathsDATA_DIR=dataRAW_DIR=data/rawPROCESSED_DIR=data/processed
Resultados do pipeline NLP
Corpus (Notebook 01)
193 documentos coletados de 8 feeds RSS internacionais
Período: 27/03/2026 → 07/04/2026 (11 dias)
0 duplicatas · 317,8 palavras médias por documento
426,0 tokens médios por documento · 82.222 tokens totais
34,1 entidades NER por documento · 10.052 lemas únicos
Entidades mais frequentes: Iran (340) · Trump (322) · U.S. (294) · Israeli (88)
Sentimento — XLM-RoBERTa (Notebook 02)
Label
Docs
%
negative
139
72,0%
neutral
51
26,4%
positive
3
1,6%
Fases do conflito — BART (Notebook 02)
Fase
Docs
%
escalation
142
73,6%
truce
22
11,4%
provocation
19
9,8%
retaliation
7
3,6%
diplomacy
3
1,6%
Tension Index (Notebook 02)
Métrica
Valor
TI médio
35,85
TI máximo
67,08 (DEFCON 2)
TI mínimo
4,10 (DEFCON 5)
DEFCON predominante
4 — Tensão Moderada
Benchmark VADER vs XLM-RoBERTa (Notebook 03)
Métrica
Valor
Concordância direta
56,0%
Cohen's Kappa (κ)
0,135
Interpretação
Fraca — modelos divergem fundamentalmente
O VADER classificou 30,6% dos documentos como positivos contra 1,6% do XLM-RoBERTa — evidência de que o modelo léxico não captura ameaças e jargão militar-diplomático. O XLM-RoBERTa é a escolha correta para este domínio.
Grafo de co-ocorrência de atores
Par
Co-ocorrências
TI médio
Iran ↔ USA
81 docs
42,6
Israel ↔ USA
32 docs
44,6
Iran ↔ Israel
31 docs
46,4 ← maior TI
USA presente em 70,5% dos documentos — papel central como ator e mediador.