[Ferramentas] - Lendo texto e tabelas em PDF usando o Python
O tipo de arquivo PDF foi criado com o propósito de não ser editável, no
entanto, muitas vezes nos encontramos em situações em que é necessário
realizar a leitura e edição desses documentos. Imagine, por exemplo, que você
conseguiu uma lista telefônica em formato PDF, porém, você precisa atualizar
os números. Não parece um problema complexo, no entanto, dependendo do tamanho
dessa lista, esse trabalho torna-se praticamente impossível de ser
executado.
Até mesmo os programadores, que possuem mais domínio de várias tecnologias,
as vezes, também travam algumas batalhas com esse tipo de arquivo. Seria o
sonho de qualquer um que os dados estivessem em bases de dados lineares
como, por exemplo, um arquivo CSV ou então até mesmo um XLSX.
Considerando que nem sempre isso é possível, nesse post iremos mostrar
algumas alternativas interessantes para realizar a leitura de documentos PDF
e editá-los de maneira eficiente.
1- Utilizando ferramentas online
Para utilizá-lo, basta acessar o site e fazer upload da sua tabela:
É importante perceber que o site avisa que essa conversão irá traduzir
páginas scanneadas como imagens apenas. A versão PRO utiliza um software de
OCR para converter imagens para texto automaticamente. Quando você utiliza
tabelas criadas no próprio word, por exemplo, a conversão é feita
perfeitamente. A seguir, você pode realizar o download do documento já
convertido para o formato do excel.
Um dos problemas desse website é que ele possui cotas de conversão, ou seja, você poderá fazer algumas conversões gratuitamente e depois ele solicitará pagamento. Além disso, ele é mais indicado caso você queira fazer a conversão de um único documento e não uma família de documentos.
Ao gerar o documento XLSX o pandas consegue realizar a leitura desse
documento tranquilamente usando o seguinte trecho de código:
dfs = pd.read_excel("YOUR_FILE_NAME", sheet_name="SHEET_NAME")
2- PyPDF2
Caso você não goste de utilizar conversores online, você pode fazer a leitura de PDFs diretamente usando o python com a biblioteca PyPDF2. Essa biblioteca busca encontrar o texto de um PDF e torná-lo acessível ao desenvolvedor.
Para utilizá-la é necessário primeiramente instalar a biblioteca via PIP ou
conda:
pip install pypdf2
conda install -c conda-forge pypdf2
Em seguida, você poderá realizar a leitura do seu arquivo, veja o exemplo a
seguir:
# importa as bibliotecas necessárias
import PyPDF2
import re
# Abre o arquivo pdf
# lembre-se que para o windows você deve usar essa barra -> /
# lembre-se também que você precisa colocar o caminho absoluto
pdf_file = open('PATH_TO_YOUR_FILE/holerite1.pdf', 'rb')
#Faz a leitura usando a biblioteca
read_pdf = PyPDF2.PdfFileReader(pdf_file)
# pega o numero de páginas
number_of_pages = read_pdf.getNumPages()
#lê a primeira página completa
page = read_pdf.getPage(0)
#extrai apenas o texto
page_content = page.extractText()
# faz a junção das linhas
parsed = ''.join(page_content)
print("Sem eliminar as quebras")
print(parsed)
# remove as quebras de linha
parsed = re.sub('\n', '', parsed)
print("Após eliminar as quebras")
print(parsed)
print("\nPegando apenas as 20 primeiras posições")
novastring = parsed[0:20]
print(novastring)
O código apresentado acima apresenta alguns exemplos de como utilizar
expressões regulares para pré-processar o texto que foi extraído. Este
pré-processamento é essencial, visto que, o texto extraído apresenta
vários caractéres desnecessários. Veja como um texto plano é exibido
perfeitamente usando essa biblioteca:
Uma limitação dessa biblioteca é que ela não lida muito bem com tabelas. O
resultado ao fazer a leitura de tabelas é bastante confuso e quase ilegível.
Por isso, vamos mostrar uma alternativa quando você precisa ler uma tabela
usando Python.
2- Tabula
O Tabula é a biblioteca perfeita para quando você precisa ler uma tabela dentro de um documento PDF. No exemlpo abaixo você verá como realizar essa importação:
#importando tabelas em pdf usando o pytabula
from tabula import read_pdf
# faz a leitura de uma tabela complexa
holerite = read_pdf("PATH_TO_YOUR_FILE/holerite1.pdf")
# claramente o resultado mostra dataframe bastante mal formado. A ferramenta tem dificuldade de
# compreender como a tabela é formada e transforma-la em algo manipulável.)
# faz a leitura de uma tabela comum
tabelaComum = read_pdf("PATH_TO_YOUR_FILE/testetabela.pdf")
# bastante fácil de compreender e manipular os dados
#Exemplos:
# retorna a primeira linha da tabela completa
tabelaComum.iloc[0]
# pega o primeiro dado da tabela
tabelaComum.iloc[0][0]
# exibe todos os nomes da (primeira coluna)
tabelaComum['Nome']
# exibe o primeiro nome da tabela
tabelaComum['Nome'][0]
#conta quantas linhas a tabela tem
len(tabelaComum.iloc[0])
Veja abaixo como a tabela é impressa no terminal do python
Você quer ver as versões completas desse código? Acesse nosso nosso github e aproveite pra deixar aquela estrelinha em nossos repositórios.
Post a Comment