Claro. Esta é uma análise completa do código fornecido, que se destina a extrair texto de arquivos PDF em português usando OCR (Reconhecimento Óptico de Caracteres).
O código automatiza o processo de "ler" um PDF que é, na verdade, uma imagem (como um documento escaneado) e converter seu conteúdo em texto editável. Ele faz isso instalando as ferramentas necessárias, configurando um ambiente Python e, em seguida, executando um script para converter as páginas do PDF em imagens e extrair o texto delas.
O código é dividido em três partes principais: instalação de dependências do sistema, configuração do ambiente Python e o script de execução.
sudo apt update
sudo apt install -y tesseract-ocr tesseract-ocr-por
sudo apt install poppler-utils
Este bloco de comandos é para sistemas operacionais baseados em Debian/Ubuntu (como o Linux Mint).
sudo apt update
: Atualiza a lista de pacotes disponíveis para garantir que você está instalando as versões mais recentes.sudo apt install -y tesseract-ocr tesseract-ocr-por
:- tesseract-ocr: Instala o Tesseract, que é o motor de OCR de código aberto desenvolvido pelo Google. Ele é o coração do processo, responsável por analisar as imagens e reconhecer os caracteres.
- tesseract-ocr-por: Instala o pacote de idioma para português. Isso é crucial para que o Tesseract reconheça corretamente caracteres específicos da nossa língua, como
ç
,ã
,é
, etc., melhorando muito a precisão.
sudo apt install poppler-utils
: Instala as ferramentas Poppler. A biblioteca Pythonpdf2image
(usada no script) precisa do Poppler para converter as páginas do PDF em imagens. Sem ele, o script falhará.
python3 -m venv .venv && source .venv/bin/activate
pip install --upgrade pip
pip install pdf2image
pip install pytesseract
pip install pillow
Este bloco prepara o ambiente Python para executar o script, seguindo boas práticas de desenvolvimento.
python3 -m venv .venv && source .venv/bin/activate
:- Cria um ambiente virtual chamado
.venv
. Isso isola as dependências do projeto, evitando conflitos com outros projetos Python no mesmo sistema. source .venv/bin/activate
ativa o ambiente virtual. Qualquer pacote instalado compip
a partir daqui será instalado dentro da pasta.venv
.
- Cria um ambiente virtual chamado
pip install --upgrade pip
: Atualiza opip
, o gerenciador de pacotes do Python.pip install ...
: Instala as bibliotecas Python necessárias:- pdf2image: Uma biblioteca que serve como interface para o Poppler, facilitando a conversão de PDFs em objetos de imagem que o Python pode manipular.
- pytesseract: Uma biblioteca que atua como uma interface para o Tesseract. Ela permite que seu script Python envie imagens para o motor Tesseract e receba o texto extraído como retorno.
- Pillow: Uma biblioteca fundamental para manipulação de imagens em Python. Tanto
pdf2image
quantopytesseract
dependem dela para funcionar.
from pathlib import Path
from pdf2image import convert_from_path
import pytesseract
import sys # Usado para acessar argumentos da linha de comando
# --- CONFIGURAÇÃO ---
# Define o caminho do PDF. Idealmente, passe como um argumento ao executar o script.
# Exemplo de como rodar: python seu_script.py caminho/para/o/arquivo.pdf
try:
caminho_pdf_str = sys.argv[1]
except IndexError:
print("ERRO: Você precisa fornecer o caminho para o arquivo PDF.")
print("Uso: python seu_script.py <caminho_do_pdf>")
sys.exit(1) # Encerra o script se nenhum arquivo for fornecido
pdf_path = Path(caminho_pdf_str)
caminho_saida_txt = pdf_path.with_suffix('.txt') # Cria um nome de arquivo de saída, ex: "relatorio.txt"
# Verifica se o arquivo PDF realmente existe antes de continuar
if not pdf_path.is_file():
print(f"ERRO: O arquivo '{pdf_path}' não foi encontrado.")
sys.exit(1)
# Parâmetros do OCR
lang = "por"
dpi = 300
# --- PROCESSAMENTO ---
all_text = ""
try:
print(f"Processando o arquivo: {pdf_path.name}")
print("Convertendo PDF para imagens... (isso pode demorar)")
# Converte o PDF em uma lista de imagens (uma por página)
pages = convert_from_path(str(pdf_path), dpi=dpi)
print("Extraindo texto com OCR...")
# Itera sobre cada página para extrair o texto
for i, page in enumerate(pages, start=1):
print(f" - Lendo página {i}/{len(pages)}")
text = pytesseract.image_to_string(page, lang=lang)
all_text += f"\n\n==== Página {i} ====\n\n{text.strip()}"
# --- SAÍDA ---
print(f"\nExtração concluída! Salvando texto em: {caminho_saida_txt.name}")
# Salva todo o texto extraído em um arquivo .txt
with open(caminho_saida_txt, 'w', encoding='utf-8') as f:
f.write(all_text)
print("Operação finalizada com sucesso!")
except Exception as e:
print(f"Ocorreu um erro inesperado: {e}")