Como Extrair Frases de um PDF para o Excel Usando Python e NLP
A conversão manual de documentos textuais para planilhas é uma das tarefas mais repetitivas e propensas a falhas em rotinas corporativas e acadêmicas. Quando a necessidade é estruturar um PDF longo de modo que cada frase ocupe uma linha específica no Excel — comum em auditorias de contratos, criação de bases para machine learning ou análise de conteúdo —, o método de copiar e colar torna-se inviável.
Neste artigo, você aprenderá a construir um pipeline automatizado em Python que realiza a leitura de PDFs puramente textuais, aplica regras de segmentação de sentenças (Sentence Boundary Disambiguation) e gera uma planilha formatada em Excel com alto desempenho.
O Desafio da Segmentação de Frases
À primeira vista, pode parecer suficiente extrair o texto bruto e dividi-lo por pontos finais (text.split('.')). Contudo, documentos reais contêm desafios específicos:
- Abreviações: Termos como “ex.”, “art.”, “Dr.” ou “Ltda.” não encerram sentenças.
- Pontuação mista: Reticências, exclamações, interrogações e quebras de linha artificiais no PDF.
- Números e valores: Datas (01.02.2024) e valores monetários que usam pontos como separadores.
Como especialista em IA e automação de fluxos de dados, afirmo que a abordagem mais consistente envolve combinar bibliotecas de leitura direta de PDF com tokenizadores treinados de Processamento de Linguagem Natural (NLP), como o nltk ou spaCy.
Bibliotecas Necessárias
Para esta solução, utilizaremos ferramentas consagradas no ecossistema Python:
- pypdf ou pdfplumber: Para extrair texto limpo preservando a integridade das palavras.
- nltk: Para segmentação sintática precisa de sentenças.
- pandas e openpyxl: Para manipulação estruturada e geração do arquivo
.xlsx.
Instale as dependências com:
bash
pip install pypdf nltk pandas openpyxl
Implementação do Pipeline Passo a Passo
1. Extração do Texto Bruto do PDF
Primeiro, lemos o conteúdo textual de cada página do PDF, tratando espaços vazios e normalizando quebras de linha.
python
from pypdf import PdfReader
def extrairtextopdf(caminhopdf: str) -> str:
leitor = PdfReader(caminhopdf)
texto_completo = []
for pagina in leitor.pages:
texto_pagina = pagina.extract_text()
if texto_pagina:
texto_completo.append(texto_pagina)
return " ".join(texto_completo)
2. Segmentação de Sentenças com NLTK
Utilizamos o módulo sent_tokenize, treinado especificamente para identificar limites reais de orações sem ser enganado por abreviações usuais.
python
import nltk
from nltk.tokenize import sent_tokenize
Baixa os modelos pré-treinados de pontuação (necessário apenas uma vez)
nltk.download(‘punkt’, quiet=True)
def segmentaremfrases(texto: str, idioma: str = ‘portuguese’) -> list[str]:
# Normalização de quebras de linha e espaços múltiplos
textolimpo = ” “.join(texto.split())
frases = senttokenize(texto_limpo, language=idioma)
return [frase.strip() for frase in frases if frase.strip()]
3. Exportação Estruturada para Excel
Por fim, encapsulamos as frases extraídas em um DataFrame do Pandas e geramos o arquivo final no formato .xlsx, adicionando identificadores de linha para facilitar a rastreabilidade.
python
import pandas as pd
def salvarfrasesexcel(frases: list[str], caminhosaida: str) -> None:
dados = {
“ID”: range(1, len(frases) + 1),
“Frase”: frases,
“QtdCaracteres”: [len(f) for f in frases]
}
df = pd.DataFrame(dados)
df.to_excel(caminho_saida, index=False, engine='openpyxl')
print(f"Processo concluído: {len(frases)} frases exportadas para '{caminho_saida}'.")
Script Completo em Ação
python
def processarpdfparaexcel(pdforigem: str, exceldestino: str):
texto = extrairtextopdf(pdforigem)
frases = segmentaremfrases(texto, idioma=’portuguese’)
salvarfrasesexcel(frases, excel_destino)
if name == “main“:
processarpdfparaexcel(“documento.pdf”, “frasesextraidas.xlsx”)
Boas Práticas e Otimização
- Documentos extensos: Para arquivos com centenas de páginas, processe a tokenização em geradores (generators) para evitar o consumo desnecessário de memória RAM.
- Limpeza adicional: Caso o PDF possua cabeçalhos e rodapés repetitivos, utilize expressões regulares (
re) antes da segmentação para remover números de página e títulos institucionais. - Multi-idioma: O NLTK permite parametrizar o idioma de análise (
portuguese,english,spanish), garantindo acurácia gramatical de acordo com o documento.
Conclusão
Automatizar a conversão de textos não estruturados em dados tabulares economiza horas de trabalho e elimina o risco de omissão de informações críticas. A combinação de Python, NLTK e Pandas oferece uma base sólida, escalável e de rápida implementação para transformar documentos estáticos em insumos analíticos acionáveis.
Se a sua empresa precisa de soluções sob medida para automação de documentos, pipelines de dados ou processamento de linguagem natural, entre em contato para uma consultoria técnica e descubra como acelerar seus fluxos de trabalho.


