Módulo: Árvore Temática¶
Taxonomia hierárquica para classificação automática de notícias.
Visão Geral¶
A árvore temática é uma taxonomia de 25 temas principais organizada em 3 níveis hierárquicos, usada para classificar automaticamente as notícias governamentais via LLM.
flowchart TB
AT[Árvore Temática] -->|Classificação| CF[Cogfy/LLM]
CF -->|Temas| DS[(Dataset)]
AT -->|Filtros| PO[Portal]
subgraph "Estrutura"
N1[Nível 1: 25 Temas]
N2[Nível 2: ~100 Subtemas]
N3[Nível 3: ~300 Tópicos]
N1 --> N2 --> N3
end
Estrutura Hierárquica¶
Nível 1 (Tema) → Nível 2 (Subtema) → Nível 3 (Tópico)
01 - Economia → 01.01 - Pol. Econômica → 01.01.01 - Pol. Fiscal
→ 01.02 - Fiscalização → 01.02.01 - Fisc. Econômica
02 - Educação → 02.01 - Ensino Básico → 02.01.01 - Ed. Infantil
...
Lista Completa de Temas (Nível 1)¶
| Código | Tema |
|---|---|
| 01 | Economia e Finanças |
| 02 | Educação |
| 03 | Saúde |
| 04 | Segurança Pública |
| 05 | Meio Ambiente e Sustentabilidade |
| 06 | Ciência, Tecnologia e Inovação |
| 07 | Infraestrutura e Transportes |
| 08 | Cultura, Artes e Patrimônio |
| 09 | Esportes e Lazer |
| 10 | Agricultura, Pecuária e Abastecimento |
| 11 | Indústria e Comércio |
| 12 | Relações Internacionais e Diplomacia |
| 13 | Justiça e Direitos Humanos |
| 14 | Trabalho e Emprego |
| 15 | Desenvolvimento Social |
| 16 | Turismo |
| 17 | Energia e Recursos Minerais |
| 18 | Comunicações e Mídia |
| 19 | Defesa e Forças Armadas |
| 20 | Políticas Públicas e Governança |
| 21 | Legislação e Regulamentação |
| 22 | Eventos Oficiais e Cerimônias |
| 23 | Estatísticas e Dados Públicos |
| 24 | Minorias e Grupos Especiais |
| 25 | Habitação e Urbanismo |
Exemplo Detalhado: Tema 01¶
01 - Economia e Finanças:
01.01 - Política Econômica:
- 01.01.01 - Política Fiscal
- 01.01.02 - Autonomia Econômica
- 01.01.03 - Análise Econômica
01.02 - Fiscalização e Tributação:
- 01.02.01 - Fiscalização Econômica
- 01.02.02 - Tributação e Impostos
01.03 - Sistema Financeiro:
- 01.03.01 - Bancos e Instituições Financeiras
- 01.03.02 - Mercado de Capitais
01.04 - Orçamento Público:
- 01.04.01 - Lei Orçamentária
- 01.04.02 - Execução Orçamentária
Arquivos de Configuração¶
Localização¶
| Repositório | Arquivo | Formato |
|---|---|---|
| scraper | src/enrichment/themes_tree.yaml |
YAML plano |
| portal | src/lib/themes.yaml |
YAML estruturado |
Formato no Scraper¶
# scraper/src/enrichment/themes_tree.yaml
01 - Economia e Finanças:
01.01 - Política Econômica:
- 01.01.01 - Política Fiscal
- 01.01.02 - Autonomia Econômica
- 01.01.03 - Análise Econômica
01.02 - Fiscalização e Tributação:
- 01.02.01 - Fiscalização Econômica
- 01.02.02 - Tributação e Impostos
02 - Educação:
02.01 - Ensino Básico:
- 02.01.01 - Educação Infantil
- 02.01.02 - Ensino Fundamental
Formato no Portal¶
# portal/src/lib/themes.yaml
themes:
- label: Economia e Finanças
code: "01"
children:
- label: Política Econômica
code: "01.01"
children:
- label: Política Fiscal
code: "01.01.01"
- label: Autonomia Econômica
code: "01.01.02"
- label: Fiscalização e Tributação
code: "01.02"
children:
- label: Fiscalização Econômica
code: "01.02.01"
Uso no Sistema¶
1. Classificação via Cogfy/LLM¶
O Cogfy recebe a árvore temática e classifica cada notícia:
Entrada: Título + Conteúdo da notícia
Saída:
- theme_1_level_1: "01 - Economia e Finanças"
- theme_1_level_2: "01.01 - Política Econômica"
- theme_1_level_3: "01.01.01 - Política Fiscal"
2. Mapeamento no Enriquecimento¶
O EnrichmentManager separa código e label:
# Entrada do Cogfy
theme_1_level_1 = "01 - Economia e Finanças"
# Após mapeamento
theme_1_level_1_code = "01"
theme_1_level_1_label = "Economia e Finanças"
3. Cálculo do Tema Mais Específico¶
def get_most_specific_theme(row):
"""Retorna o tema mais específico disponível."""
if row.get("theme_1_level_3_code"):
return row["theme_1_level_3_code"], row["theme_1_level_3_label"]
elif row.get("theme_1_level_2_code"):
return row["theme_1_level_2_code"], row["theme_1_level_2_label"]
else:
return row["theme_1_level_1_code"], row["theme_1_level_1_label"]
4. Filtros no Portal¶
// Filtro por tema nível 1
const results = await searchNews({
filters: { theme_1_level_1_code: ["01", "03"] }
})
// Navegação por tema
<Link href="/temas/economia-e-financas">
Economia e Finanças
</Link>
Campos no Dataset¶
| Campo | Tipo | Exemplo |
|---|---|---|
theme_1_level_1_code |
string | "01" |
theme_1_level_1_label |
string | "Economia e Finanças" |
theme_1_level_2_code |
string | "01.01" |
theme_1_level_2_label |
string | "Política Econômica" |
theme_1_level_3_code |
string | "01.01.01" |
theme_1_level_3_label |
string | "Política Fiscal" |
most_specific_theme_code |
string | "01.01.01" |
most_specific_theme_label |
string | "Política Fiscal" |
Sincronização¶
Situação Atual (Manual)¶
flowchart LR
SC[scraper/themes_tree.yaml] -->|Cópia manual| PO[portal/themes.yaml]
Situação Futura¶
flowchart LR
TH[destaquesgovbr-themes] -->|GitHub Action| SC[scraper]
TH -->|GitHub Action| PO[portal]
Meta: Criar repositório dedicado destaquesgovbr-themes para centralizar e automatizar sincronização.
Como Adicionar Novo Tema¶
1. Identificar necessidade¶
- Analisar notícias não classificadas adequadamente
- Verificar se tema existente não cobre o assunto
2. Definir estrutura¶
26 - Novo Tema:
26.01 - Subtema A:
- 26.01.01 - Tópico 1
- 26.01.02 - Tópico 2
26.02 - Subtema B:
- 26.02.01 - Tópico 3
3. Atualizar arquivos¶
- Editar
scraper/src/enrichment/themes_tree.yaml - Editar
portal/src/lib/themes.yaml - Atualizar configuração no Cogfy (via interface web)
4. Testar¶
- Verificar se LLM classifica corretamente
- Verificar se filtros funcionam no portal
Como Adicionar Subtema/Tópico¶
Exemplo: Adicionar tópico ao tema 01¶
01 - Economia e Finanças:
01.01 - Política Econômica:
- 01.01.01 - Política Fiscal
- 01.01.02 - Autonomia Econômica
- 01.01.03 - Análise Econômica
- 01.01.04 - Novo Tópico # Adicionar aqui
Convenção de códigos¶
- Nível 1:
XX(01-25) - Nível 2:
XX.YY(01.01, 01.02, ...) - Nível 3:
XX.YY.ZZ(01.01.01, 01.01.02, ...)
Considerações de Design¶
Por que 3 níveis?¶
- Nível 1: Visão macro, filtros rápidos
- Nível 2: Detalhamento intermediário
- Nível 3: Especificidade máxima, análises profundas
Por que 25 temas?¶
- Cobertura ampla de áreas governamentais
- Quantidade gerenciável para navegação
- Balanceamento entre granularidade e usabilidade
Limitações atuais¶
- Apenas 1 tema por notícia (
theme_1) - Preparado para múltiplos temas no futuro (
theme_2,theme_3)
Diagrama de Fluxo de Classificação¶
sequenceDiagram
participant N as Notícia
participant C as Cogfy/LLM
participant T as Árvore Temática
participant E as EnrichmentManager
participant D as Dataset
N->>C: Título + Conteúdo
C->>T: Consulta taxonomia
T-->>C: Estrutura de temas
C->>C: Classifica em 3 níveis
C-->>E: theme_1_level_1/2/3
E->>E: Separa código e label
E->>E: Calcula most_specific
E->>D: Atualiza registro