DOI: 10.5281/zenodo.15548618
title: Desinformação: AosFatos

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.