Oficina 3 – OCR e NLP (com spaCy)

IM-1256 – Introdução à História Digital

Prof. Eric Brasil

PPGIHD – UFRRJ / IHL - UNILAB

quarta-feira, 8 de outubro de 2025

Acesse os slides da aula

Estrutura da oficina

Parte 1 – OCR (Reconhecimento Óptico de Caracteres)
- Impacto do OCR nas Humanidades Digitais
- Uso de ferramentas gráficas (gImageReader)
- Tesseract OCR via linha de comando

Estrutura da oficina

Parte 2 – NLP (Processamento de Linguagem Natural)
- Conceitos e aplicações em História Digital
- Preparação de dados textuais
- Introdução ao spaCy (instalação e comandos básicos)
- Extração de entidades nomeadas (NER) em português

Objetivo Geral

Compreender e aplicar técnicas básicas de Reconhecimento Óptico de Caracteres (OCR) e Processamento de Linguagem Natural (NLP) em contextos de pesquisa histórica, reconhecendo seus impactos metodológicos e epistemológicos nas Humanidades Digitais.

Materiais da Oficina

📦 Repositórios e Ferramentas

Materiais da Oficina

Tutoriais

Parte 1: Reconhecimento Óptico de Caracteres

Pesquisa de referência

Esta parte da oficina é baseada na pesquisa de pós-doutorado de Eric Brasil, desenvolvida entre outubro de 2022 e outubro de 2023 no Laboratório de Humanidades Digitais (Lab_HD) do Instituto de História Contemporânea (IHC/NOVA FCSH – Universidade NOVA de Lisboa), sob supervisão do Prof. Dr. Daniel Alves.

O projeto integrou o IN2PAST — Laboratório Associado para a Investigação e Inovação em Património, Artes, Sustentabilidade e Território.

O projeto HEMDIG(pt)

HEMDIG(pt)Métodos, ferramentas e hemerotecas digitais em português

O projeto analisa o processo de selecionar, recolher e organizar fontes primárias em ambientes digitais e propõe um framework metodológico para pesquisas em história digital com periódicos.

🔗 Acesse: ericbrasil.com.br/hemdig-framework

Fase 4 do HEMDIG(pt)

Essa etapa reúne documentação, testes e tutoriais sobre ferramentas de OCR aplicadas a jornais históricos em língua portuguesa.

Avaliamos:

  • CLI (linha de comando): Tesseract, OCR-D, Kraken
  • GUI (interface gráfica): gImageReader
  • Lições do Programming Historian relacionadas ao tema

🔗 Acesse a Fase 4 – OCR e OLR

O que é OCR?

OCR (Optical Character Recognition) é a tecnologia que converte imagens de texto (digitalizações, fotos ou PDFs) em texto editável e pesquisável.

Em termos simples:

  • Traduz pixels → caracteres.
  • Permite transformar acervos digitalizados em dados analisáveis.

OCR e as Humanidades Digitais

  • Permite acesso massivo a fontes digitalizadas.
  • Facilita buscas e análises textuais em larga escala.
  • Cria corpora históricos para análise automatizada.
  • Possibilita a recuperação de vozes e discursos de jornais, cartas e manuscritos.

O OCR não é apenas uma etapa técnica,
mas um momento metodológico da pesquisa digital.
Ele define o que é visível, pesquisável e, portanto, historicamente interpretável.

Limites e desafios

O OCR não é perfeito — especialmente com documentos históricos.

Principais desafios:

  • Fontes antigas ou ornamentadas
  • Baixa qualidade da digitalização
  • Papel amarelado e ruído visual
  • Layout complexo (colunas, anúncios, tabelas)

Limites e desafios

Solução parcial:

Combinar ferramentas automáticas com revisão humana e aprendizado de máquina (modelos treinados em fontes históricas).

Ferramentas gráficas: gImageReader

Interface gráfica que usa o Tesseract OCR.

  • Selecionar áreas específicas do documento.
  • Aplicar filtros e pré-processamento.
  • Exportar resultados em TXT, PDF pesquisável, HTML etc.

Tesseract OCR (CLI)

Ferramenta livre e multiplataforma mantida pelo Google.
Suporta mais de 100 idiomas, incluindo o português.

Instalação (Linux/Ubuntu):

sudo apt install tesseract-ocr tesseract-ocr-por

Tesseract OCR (CLI)

📄 Uso básico:

tesseract pagina1.png resultado -l por

Saída → cria resultado.txt com o texto extraído.

Dicas para melhor OCR

Pré-processamento da imagem:

  • Converter para tons de cinza (convert img.jpg -colorspace Gray)
  • Aumentar contraste (convert img.jpg -contrast)
  • Remover ruídos com filtros automáticos (ImageMagick, GIMP)

Quanto melhor a imagem, melhor o OCR.

Parte 2: Processamento de Linguagem Natural

O que é NLP?

NLP (Natural Language Processing) é o campo da ciência computacional que busca ensinar máquinas a ler, compreender e gerar linguagem humana.

Aplicações comuns

  • Tradução automática (Google Translate)
  • Análise de sentimentos
  • Assistentes de voz (Alexa, Siri, ChatGPT)
  • Extração de informação histórica de textos digitalizados

NLP nas Humanidades Digitais

Por que o NLP importa para historiadores?

  • Permite analisar grandes volumes de texto (jornais, cartas, relatórios).
  • Facilita descobrir padrões discursivos e mudanças semânticas ao longo do tempo.
  • Amplia a compreensão sobre memória, discurso e poder em arquivos digitais.

📚 Termo-chave: “Leitura Distante” (Franco Moretti)

Fluxo de trabalho

1️⃣ OCR: converte imagens em texto
2️⃣ Pré-processamento textual (limpeza, tokenização)
3️⃣ Análise linguística (POS tagging, NER, dependências sintáticas)
4️⃣ Interpretação e visualização de resultados

📊 Exemplo de pipeline:


Imagem (PDF) → Texto OCR → spaCy → Análise → Gráficos

spaCy

Biblioteca em Python projetada para análise linguística robusta e rápida.

  • Tokenização, lematização, POS tagging
  • Reconhecimento de entidades nomeadas (NER)
  • Análise sintática de dependências
  • Suporte a múltiplos idiomas (incluindo português 🇧🇷)

Instalação

python3 -m venv venv
source venv/bin/activate
pip install spacy
python -m spacy download pt_core_news_lg

Verifique se o modelo foi instalado corretamente:

python -m spacy validate

Exemplo básico

import spacy
nlp = spacy.load("pt_core_news_lg")

texto = "Em 15 de novembro de 1889, Deodoro da Fonseca proclamou a República do Brasil no Rio de Janeiro."
doc = nlp(texto)

for token in doc:
    print(token.text, token.pos_, token.dep_)

Exemplo básico

📄 Saída esperada:

Em - ADP - case
15 - NUM - nummod
novembro - NOUN - obl
...

Reconhecimento de Entidades Nomeadas (NER)

🎯 O NER permite extrair nomes de pessoas, lugares, datas, instituições etc.

for ent in doc.ents:
    print(ent.text, ent.label_)

Reconhecimento de Entidades Nomeadas (NER)

📋 Saída:

15 de novembro de 1889  DATA
Deodoro da Fonseca       PESSOA
República do Brasil      LOCAL
Rio de Janeiro           LOCAL

Visualização com displaCy

O spaCy possui um visualizador embutido para NER:

from spacy import displacy
displacy.render(doc, style="ent", jupyter=True)

Limpeza e preparação de dados

🧹 Antes da análise, é essencial:

  • Remover caracteres especiais, HTML e stopwords
  • Normalizar acentuação e capitalização
  • Dividir o texto em parágrafos ou sentenças coerentes

Desafios para o português

⚠️ NLP em português enfrenta dificuldades específicas:

  • Ortografia antiga e variações regionais
  • Palavras compostas e nomes próprios históricos
  • Escassez de modelos treinados com corpora históricos

Soluções?

  • Treinar modelos com datasets históricos
  • Combinar NLP + métodos qualitativos (leitura próxima)

Discussão

Como o NLP pode transformar a forma como lemos o passado?

  • Que riscos há em “automatizar” a leitura?
  • O que se perde (ou ganha) ao delegar parte da análise textual a modelos?
  • Como equilibrar escalabilidade e interpretação crítica?
  • Com o advento das IAs generativas (ex: ChatGPT), qual o futuro do NLP nas Humanidades Digitais?