Desinformação: AosFatos
Authors/Creators
Contributors
Research group (3):
Description
1ª ETAPA - proteção e classificação automática
Descrição da arquitetura, tecnologias e passos adotados para a remoção das informações do serviço de fact-checking AosFatos em Python - por meio do processo de Web Scraping (extração de dados da web).
Aos Fatos – lista de verificações e páginas de detalhes de cada verificação. O objetivo foi coletado, para cada verificação/artigos selecionados, os campos:
a)URL;
b) Título;
c) Dados;
d) Assunto;
e) Classificação;
f) Tipo (sempre “Checagem”);
g) Autor.
Os dados foram salvos em dois formatos: CSV (UTF-8) e Excel (.xlsx).
2 - escada e guarnição
|
Camada |
Ferramenta / Biblioteca |
|
Linguagem |
Python 3.10+ |
|
Automação |
Selenium WebDriver 4.x |
|
Navegador sem cabeça |
Google Chrome + ChromeDriver |
|
Esperas |
WebDriverWait + condições esperadas |
|
Manipulação de CSV |
módulo csv (embutido) |
|
Planilha Excel |
openpyxl |
|
DataFrame |
pandas (opcional) |
|
Expressão regular |
re (embutido) |
|
Pausa |
tempo.dormir |
3 - Arquitetura da Solução
url_list_aosfatos.py
|
v
Script principal do scraping
Etapa 1 - Inicia o Selenium headless Chrome
Etapa 2 - Para a lista de URL (AosFatos):
{ driver.get(url)
{ espera e extrai campos via CSS
{ escreve linha em CSV/Excel
Etapa 3 - Fecha driver, salva arquivos.
4 - Fluxo de Coleta
1 - Listagem: Acesse a listagem de verificações e links de captura.
2 - Página de seleção: Para cada URL, extrai com seleções próprias.
(ex. título, autor, dados, assunto, classificação) e definição do tipo de “Checagem”.
5 - Escrita Incremental de Dados
Para persistência imediata:
a) CSV: abre em anexo e grava cada registro após raspagem.
b) Excel: usa openpyxl.Workbook(), ws.append(row) por item, e salva ao final.
Cabeçalho comum: url, título, dados, assunto, classificação, tipo, autor.
6 Exemplo de pseudocódigo
import csv, time
from selenium import webdriver
# ...
with open('dados.csv','w',encoding='utf-8') as f:
writer = csv.writer(f)
writer.writerow([...])
for url in urls:
driver.get(url)
time.sleep(3)
# extrai campos
writer.writerow([url, titulo, data, assunto, classificacao, 'Checagem', autor]) driver.quit()
Essa etapa foi feita por Jean Carlo Gengnagel
https://orcid.org/0009-0009-9862-9256
2ª ETAPA – classificação manual
7 Boas Práticas
a) Usar robustas, posicionadas quando possível.
b) Definir timeouts e esperas para evitar travamentos.
c) Execução headless para automação sem UI.
d) Gravação incremental para evitar perda de dados.
A classificação da coluna C foi feita manualmente pela equipe:
Usando a orientação da legenda:
Desinf. Educação: qualquer abordagem envolvida em educação.
Desinf. Científica: ciência falsa, negacionismo, teoria da conspiração - temas com enfoque na ciência.
Desinf. Gênero: violência de gênero - desinformação entre mulheres.
Desinf. Saúde: qualquer subtemática de saúde, vacina, medicamentos, tratamentos, procedimentos.
Desinf. Ansiedade Informacional - envolve saúde mental e consumo de conteúdo na web.
Desinf. Ambiental - envolve meio ambiente.
Outros tipos de desinformação.
Essa etapa foi feita pela equipe:
Dilyanne Ferreira Tavares - UFAL
https://orcid.org/0009-0001-7935-4869
Camilla de Moura Gomes - UFAL
https://orcid.org/0009-0004-3614-0184
Erick Bruno Ferreira Santos - UFBA
https://orcid.org/0009-0000-5726-3838
Coordenada pela professora: Juliana Fachin - UFAL
https://orcid.org/0000-0003-0883-642X
3ª ETAPA - manual de reclassificação
Nesta etapa foi feita a reclassificação manual dos dados. Foi verificado todas as classificações e duas classificações foram modificadas
Desinf. Ambiental - envolve meio ambiente.
Desinf. Científica: ciência falsa, negacionismo, teoria da conspiração - temas com enfoque na ciência.
Desinf. Criminosa ou fraudulenta: envolve temas sobre crime, fraudes e golpes.
Desinf. Educação: qualquer abordagem envolvida em educação.
Desinf. Gênero: violência de gênero - desinformação entre mulheres.
Desinf. Política: com conteúdo sobre política
Desinf. Saúde: qualquer subtemática de saúde, vacina, medicamentos, tratamentos, procedimentos.
Duas categorias originais foram exluídas e outras duas foram inseridas:
Incluídas
• Desinf. Política: com conteúdo sobre política
• Desinf. Criminosa ou fraudulenta: envolve temas sobre crime, fraudes e golpes.
Retiradas
• Desinf. Ansiedade Informacional - envolve saúde mental e consumo de conteúdo na web.
• Outros tipos de desinformação.
Essa etapa foi feita pela equipe:
Dilyanne Ferreira Tavares - UFAL
https://orcid.org/0009-0001-7935-4869
Camilla de Moura Gomes - UFAL
https://orcid.org/0009-0004-3614-0184
Erick Bruno Ferreira Santos - UFBA
https://orcid.org/0009-0000-5726-3838
Coordenada pela professora: Juliana Fachin - UFAL
https://orcid.org/0000-0003-0883-642X
4ª ETAPA - reclassificação automatizada
O objetivo desta etapa automática foi reclassificar as notícias verificadas, já que não possuem uma categoria especificamente definida.
• Carregar dados de notícias de um arquivo Excel;
• identificar as notícias marcadas como “Outros Tipos de desinformação”;
• Treinar um modelo de classificação usando as notícias já categorizadas;
• Aplicar o modelo treinado para reclassificar as notícias;
• Gerar um novo arquivo com as classificações atualizadas.
O projeto utiliza as seguintes bibliotecas Python, cada uma com funções específicas:
| Biblioteca | Diretor(a) | Uso no Projeto |
| pandas | Manipulação de dados | Carregamento e processamento do arquivo Excel |
| Seleção de modelo sklearn. | Divisão de dados | Separação entre dados de treino e teste |
| sklearn.extração de recursos.texto | Processamento texto | Conversão de texto em vetores numéricos (TF-IDF) |
| modelo sklearn.linear | Algoritmos de ML | Implementação da Regressão Logística |
| sklearn.pipeline | Automação de águia | Criação de pipeline de processamento |
| sklearn.metrics | Avaliação de modelos | Geração de relatórios de classificação |
8 Explicação anterior das Bibliotecas
8.1 Pandas
Biblioteca fundamental para manipulação e análise de dados. Utilizado para:
• Carregar o arquivo Excel com pd.read excel( )
• Filtrar dados válidos e remover valores nulos
• Renomear colunas para padronização
• Salvar os resultados processados
8.2 Scikit-learn (sklearn)
Biblioteca de Machine Learning que fornece ferramentas para classificação, regressão, clustering e redução de dimensionalidade. No projeto, é usado para:
• TfidfVectorizer: converte texto em vetores numéricos usando TF-IDF (Term Frequency-Inverse Document Frequency)
• LogisticRegression: Algoritmo de classificação que estima probabilidades usando uma função logística
• Pipeline: Encadeia transformações e estimadores em uma sequência
• relatório de classificação: Gera relatório detalhado de notas de classificação
9 Fluxo de Execução do Código
O código segue um fluxo estruturado de seis etapas principais:
9.1 Carregamento e Limpeza dos Dados
Listagem 1: Carregamento dos dados
|
1 |
# Carregar o arquivo |
|
2 |
df = pd.read_excel ( "cleaned_file.xlsx" ) |
|
3 |
|
|
4 |
# Remover linhas totalmente vazias |
|
5 |
df = df.dropna ( how= "all" ) |
|
6 |
|
|
7 |
# Se houver colunas com nomes semelhantes, ajuste |
|
8 |
Se "assunto" estiver em df.columns e "assuntos" não estiver em df.columns: |
|
9 |
df.rename (colunas={ "assunto": "assuntos"}, inplace=True) |
O código carrega o arquivo “cleaned file.xlsx”, remove linhas completamente vazias e padroniza os nomes das colunas.
9.2 Separação dos Dados
Listagem 2: Separação dos dados
|
1 |
# Filtrar os dados v lidos (sem NaN e sem "Outros Tipos") |
|
2 |
mask_train = df ["assuntos"] . notna() & ( df ["assuntos"]. str. lower() != "outros tipos") |
|
3 |
train_df = df [mask_train] |
|
4 |
prever_df = df [df [ "assuntos"] .str. lower() == "outros tipos" ] |
Separar os dados em dois grupos: artigos já classificados (para treino) e artigos marcados como “Outros Tipos” (para predição).
9.3 Vetorização do Texto
Listagem 3: Vetorização TF-IDF
|
1 |
# Vetorizar o texto (pode usar título + conteúdo, se existir) |
|
2 |
vetorizador = TfidfVectorizer(max_features=5000) |
|
3 |
X_train = vectorizer.fit_transform (train_df ["titulo"]. astype (str) ) |
|
4 |
y_train = train_df ["assuntos"] |
Conversor de títulos de artigos em vetores numéricos usando TF-IDF, limitando a 5000 recursos mais importantes.
9.4 Treinamento do Modelo
Listagem 4: Treinamento do modelo
|
1 |
# Treinar o modelo supervisionado |
|
2 |
modelo = Regressão Logística (iter_máximo=200) |
|
3 |
model.fit (X_train, y_train) |
Treinar um modelo de Regressão Logística usando os artigos já classificados como dados de treino.
9.5 Predição e Reclassificação
Listagem 5: Predição e reclassificação
|
1 |
# Reclassificar apenas os "Outros Tipos" |
|
2 |
X_predict = vectorizer.transform (predict_df ["titulo"] .astype (str) ) |
|
3 |
y_pred = model.predict (X_predict) |
|
4 |
|
|
5 |
# Atualizar o dataframe original |
|
6 |
df.loc [predict_df.index, "assuntos"] = y_pred |
Aplique o modelo treinado para prever novas categorias para os artigos “Outros Tipos”.
9.6 Salvamento dos Resultados
Listagem 6: Salvamento dos resultados
|
1 |
# Salvar o resultado |
|
2 |
df.to_excel ( "news_data_reclassificado.xlsx", index=False) |
|
3 |
|
|
4 |
Imprimir ( " Reclassificação concluída! Apenas 'Outros Tipos' foram atualizados." ) |
Atualizar o dataframe original com as novas classificações e salvar em “news data reclassificado.xlsx”.
10 Algoritmo TF-IDF
O TF-IDF (Term Frequency-Inverse Document Frequency) é uma técnica estatística que avalia a importância de uma palavra em um documento dentro de uma coleção de documentos. É como calcular:
TF-IDF(t,d) = TF(t,d) ×IDF(t) (1)
Onde:
• TF (Frequência do Termo) : Frequência do termo no documento (1)
• IDF (Inverse Document Frequency) : Inverso da frequência do termo na coleção
• Resultado: Palavras comuns recebem peso baixo, palavras específicas recebem peso alto
11 Regressão Logística
A Regressão Logística é um algoritmo de classificação que usa uma função logística para modelar a probabilidade de uma instância pertencente a uma classe específica. Características:
• Algoritmo supervisionado para classificação
• Produz probabilidades entre 0 e 1
• Eficiente para problemas de classificação multiclasse
• Interpretável e rápido para treinamento
• Adequado para dados textuais vetorizados
A função logística é definida como:
P(Y =1|X) = 1
____________________________________ (2)
1 +e−(β0+β1X1+...+βnXn)
12 Resultados Esperados
Ao executar este código, espere-se que:
• Todos os artigos marcados como “Outros Tipos” serão reclassificados em categorias mais específicas;
• Que o modelo aprenda padrões nos títulos dos artigos para identificar assuntos;
• Um novo arquivo “news data reclassificado.xlsx” seja gerado com as classificações atualizadas;
• A qualidade das classificações depende da quantidade e qualidade dos dados de treino;
• Que o sistema seja capaz de generalizar para novas notícias com títulos semelhantes.
13 Considerações Técnicas
• Limitação de Features: O código limita a 5000 features mais importantes para evitar overfitting;
• Iterações Máximas: O modelo usa 200 iterações máximas para convergência;
• Processamento de Texto: Apenas os títulos são usados para classificação;
• Dados de Treino: A qualidade depende da representatividade dos dados já classificados;
• Desempenho: O algoritmo é eficiente para conjuntos de dados de tamanho médio.
14 Vantagens e Limitações
14.1 Vantagens
• Automação de processo manual de trabalhos;
• Escalabilidade para grandes volumes de dados;
• Uso de técnicas modernas de Machine Learning;
• Interpretabilidade do modelo;
• Eficiência computacional.
14.2 Limitações
• Dependência da qualidade dos dados de treino.
• Uso apenas do título (não considera conteúdo completo).
• Possível ver nossos dados de treino.
• Necessidade de retreinamento para novos domínios.
• Limitação a 5000 recursos pode perder informações importantes.
15 SOBRE A CLASSIFICAÇÃO
Este sistema de classificação automática representa uma solução eficiente para o problema de categorização de artigos de notícias. Utilizando técnicas modernas de Machine Learning e processamento de linguagem natural, o código automatiza um processo que seria manualmente trabalhoso e demorado. A combinação de TF-IDF para vetorização de texto e Regressão Logística para classificação oferece um equilíbrio entre performance e interpretabilidade.
O sistema é adequado para aplicações onde há uma quantidade razoável de dados já classificados, no qual a precisão da classificação é importante para a organização e recuperação de informações.
Para melhorar ainda mais o sistema, seria recomendável:
• Incluir o conteúdo completo das notícias checadas, além dos títulos;
• Implementar validação cruzada para avaliar a performance;
• Adicionar pré-processamento de texto mais sofisticado;
• Considerar outros algoritmos de classificação para comparação
• Implementar um sistema de feedback para a melhoria contínua do modelo.
Essa etapa foi feita por Jean Carlo Gengnagel
https://orcid.org/0009-0009-9862-9256
16 CONSIDERAÇÕES SOBRE AS ETAPAS DE CLASSIFICAÇÃO
A classificação deste conjunto de dados foi dada em quatro etapas.
- A primeira classificação foi feita de forma automatizada, generalizando vários tipos de notícias em uma mesma categoria;
- Na segunda classificação foi feita a revisão manual (por uma equipe de quatro pessoas), item por item, ainda assim, muitos itens estavam na castegoria de outros;
- Na terceira etapa foi feita a revisão das categorias, bem como das notícias que já havíamos classificado, reorganizando os dados;
- A quarta etapa teve o instinto de melhorar ainda mais a classificação das notícias verificadas, uma vez que se tinha as modalidades de classificação definidas em sete categorias:
Desinf. Ambiental;
Desinf. Científica;
Desinf. Criminosa ou fraudulenta;
Desinf. Educação;
Desinf. Gênero;
Política de Design;
Desinf. Saúde;
Entendemos que essas ações colaboraram para uma classificação melhor direcionada, conforme as categorias definidas para a aplicação do estudo.
Files
Files
(76.3 kB)
| Name | Size | |
|---|---|---|
|
md5:f81cd9c311c6fc578fac923ffd50fac0
|
76.3 kB | Download |
Additional details
Related works
- Is supplement to
- Output management plan: 10.48321/D1DEAB3026 (DOI)
Dates
- Collected
-
2025-04-18data da coleta