1. Análise de PDF
Por que converter PDF para CSV ou Excel?
Antes de mergulharmos nessa tarefa, bora conversar sobre por que você deveria se preocupar em fazer essas conversões. Os documentos em PDF são amplamente usados para compartilhar informações por serem estáticos e fáceis de imprimir.
No entanto, quando o papo é análise de dados, o PDF definitivamente não é o melhor amigo de quem analisa. É aí que os arquivos CSV e Excel entram em cena. Eles são super práticos para análise, podem ser facilmente abertos no Excel ou importados para qualquer ferramenta analítica. Ler, filtrar, classificar e visualizar dados nesses formatos é moleza. Quem não iria querer isso, né?
Ferramentas e bibliotecas
Para resolver nossa missão, vamos usar algumas bibliotecas Python que vão ajudar a quebrar o feitiço do "PDF" e transformá-lo em um lindo CSV (ou Excel, se você preferir). São elas: PyPDF2, PDFPlumber e pandas. O PyPDF2 vai nos ajudar a extrair o texto do PDF, o PDFPlumber — a fazer isso com estilo e muita eficiência, e o pandas — a tratar os dados como tabelas.
Se você ainda não instalou essas bibliotecas, que tal fazer isso agora? Digite no terminal o seguinte comando:
pip install PyPDF2 PDFPlumber pandas
Com isso feito, vamos ao que interessa!
2. Extração de texto de um documento PDF
Extraindo texto com PyPDF2
O primeiro passo é resgatar o precioso texto do PDF. Para isso, vamos usar a biblioteca PyPDF2. Bora criar um script simples que abre o arquivo PDF e extrai o texto de cada página do documento.
import PyPDF2
# Abrindo o arquivo
with open('sample.pdf', 'rb') as file:
reader = PyPDF2.PdfReader(file)
text = ""
# Itera por todas as páginas e extrai o texto
for page in reader.pages:
text += page.extract_text()
print(text) # Exibe o texto extraído
Fácil assim! Nós lemos o arquivo e extraímos o texto dele. Mas vai por mim, textos vêm em todos os formatos e tamanhos — às vezes você vai precisar processá-los mais, limpar caracteres desnecessários ou até dividir em linhas.
Extraindo texto com PDFPlumber
O PDFPlumber é mais preciso para lidar com PDFs que têm tabelas e estruturas complexas. Com ele, é possível não só extrair texto, mas também trabalhar com tabelas.
import pdfplumber
# Abrindo o arquivo PDF
with pdfplumber.open("sample_with_table.pdf") as pdf:
text = ""
for page in pdf.pages:
text += page.extract_text() + "\n"
print(text)
Esse código também extrai texto de todas as páginas, mas diferente do PyPDF2, o PDFPlumber lida melhor com formatação e tabelas.
Extraindo tabelas de PDF com PDFPlumber
Se o PDF contiver tabelas, o PDFPlumber permite extraí-las como listas, o que facilita a conversão para CSV ou Excel.
import pdfplumber
import pandas as pd
# Abrindo o PDF e extraindo tabelas
with pdfplumber.open("sample_with_table.pdf") as pdf:
all_tables = []
for page in pdf.pages:
table = page.extract_table()
if table:
all_tables.extend(table)
# Convertendo os dados para DataFrame
df = pd.DataFrame(all_tables[1:], columns=all_tables[0]) # Primeira linha são os cabeçalhos
print(df)
Esse código cria uma tabela a partir dos dados do PDF e a transforma em um DataFrame
, permitindo facilmente salvar a tabela em CSV ou Excel.
3. Salvando os dados
Convertendo texto para DataFrame
Agora que a gente tem o texto, vamos imaginar que ele está dividido em linhas, cada uma representando uma linha da tabela que queremos criar. Nossa tarefa será convertê-las em um DataFrame
com pandas e guardar tudo num arquivo CSV.
import pandas as pd
# Digamos que cada linha de texto seja uma linha de dados
data = text.split('\n')
data = [row.split(',') for row in data if row.strip() != ''] # Dividindo linhas por vírgulas
# Criando o DataFrame
df = pd.DataFrame(data[1:], columns=data[0]) # A primeira linha é usada como cabeçalho
# Salvando o DataFrame como CSV
df.to_csv('output.csv', index=False)
Aqui simplesmente dividimos o texto em linhas, depois em elementos individuais, e criamos um DataFrame
, usando a primeira linha como cabeçalhos das colunas. Em seguida, salvamos como um arquivo CSV. Uhuu! Fizemos algo que antes poderia levar horas à mão.
Convertendo dados para CSV
Depois de extrair o texto ou tabelas do PDF, você pode salvar os dados em CSV usando a biblioteca pandas.
Salvando dados em CSV
# Salvando dados em CSV
df.to_csv("output.csv", index=False)
print("Dados salvos com sucesso em output.csv")
Este código salva o DataFrame
com os dados do PDF em um arquivo output.csv, que você pode abrir em qualquer editor de planilhas ou carregar em uma plataforma de análise.
Convertendo para Excel
E se você quiser ir além e salvar em Excel? Sem problema! O pandas tem tudo que você precisa para isso. Só troca a última linha do exemplo anterior por:
df.to_excel('output.xlsx', index=False)
Assim, seu DataFrame
será salvo como um arquivo Excel, e você pode navegar por ele, aplicar todos os filtros que precisar e arrasar nas tabelas dinâmicas do Excel — tudo para ganhar o prêmio de analista do ano na festa da firma.
Desafios e armadilhas
Como sempre, o caminho não é perfeito. Extrair texto de PDFs pode ser como tentar explicar para sua avó o que é armazenamento na nuvem. Alguns PDFs têm estruturas complexas, como tabelas, gráficos e imagens, que não são tão simples de converter para texto, especialmente texto estruturado. Nesses casos, pode ser necessário processar o texto adicionalmente, usar expressões regulares ou até bibliotecas OCR específicas para extrair dados de imagens dentro do PDF.
Além disso, nem todos os PDFs são amigáveis para automação. Alguns são criptografados ou protegidos por senha. O PyPDF2 consegue lidar com senhas, mas criptografia é outra história.
GO TO FULL VERSION