Principais conclusões:
- Python pode te ajudar a automatizar a extração de dados de notas fiscais, mas não há uma solução mágica.
- Parseur utiliza Python para extrair dados de notas fiscais para você.
- PDF não é um formato de dados, mas uma representação tipográfica de um documento em papel.
O formato PDF
O formato PDF é versátil, permitindo a representação precisa de documentos em papel, como notas fiscais, sem limitar seu design. Ele vem do mundo da impressão em papel e foi projetado para ser uma representação digital de uma página impressa. Essa flexibilidade oferece liberdade significativa, permitindo que os criadores de PDF se expressem e sigam vários padrões e regulamentos.
No entanto, o desafio surge quando os dados estão presos dentro de um PDF. A natureza complexa e de forma livre do formato pode entrar em conflito com a abordagem estruturada e consistente necessária para gerenciar os vastos dados que uma empresa processa diariamente.

Quais são as etapas para extrair dados de uma nota fiscal?
Uma nota fiscal é um documento que geralmente vem no formato PDF. Uma nota fiscal formaliza uma transação entre um fornecedor e um cliente, onde um produto ou serviço é trocado por uma quantia precisa de dinheiro. Aqui estão as etapas necessárias para extrair dados deste documento:
- Definir um esquema para os dados que você deseja extrair de suas notas fiscais
- Converter sua nota fiscal de imagem para texto
- Extrair o texto de sua nota fiscal de acordo com seu esquema de dados
- Coletar os dados extraídos

Definir um esquema para seus dados de nota fiscal
As notas fiscais vêm de diferentes fornecedores e cada fornecedor tende a personalizar a aparência de suas notas fiscais. Apesar dessa diversidade da vida real na forma, a essência de todas as notas fiscais é basicamente a mesma: você precisa de um fornecedor, um cliente, uma referência da nota fiscal, uma data e uma lista de itens com uma quantidade, descrição e custo associados. Uma ótima maneira de começar a definir seu formato de nota fiscal seria seu software de contabilidade, pois é provavelmente onde você armazenará seus dados de nota fiscal extraídos no final, certo? Se você deseja apenas um formato de dados que possa cobrir todos os casos extremos, deixe-me recomendar o site schema.org, que define convenientemente uma série de formatos de dados padrão do setor para muitas coisas, incluindo notas fiscais. O Parseur define um esquema de dados padrão para suas notas fiscais, mas você pode alterá-lo para se adequar ao seu caso de uso renomeando os campos em sua caixa de correio de notas fiscais, conforme explicado aqui. Assim que o formato dos seus dados for definido, você poderá converter sua nota fiscal de imagem para texto.
Por exemplo, você pode definir os seguintes campos para sua nota fiscal usando o formato JSON Swagger:
{
"InvoiceNumber": {
"type": "string",
"description": "The invoice number"
},
"InvoiceIssueDate": {
"type": "string",
"description": "The invoice date"
},
"Items": {
"type": "array",
"description": "The list of items in the invoice",
"items": {
"type": "object",
"properties": {
"quantity": {
"type": "number",
"description": "The quantity of the item"
},
"description": {
"type": "string",
"description": "The description of the item"
},
"unit_price": {
"type": "number",
"description": "The unit price of the item"
},
"price": {
"type": "number",
"description": "The total price of the item"
}
}
}
}
}
Converter sua nota fiscal de imagem para texto

Um arquivo PDF pode conter uma imagem. Por exemplo, seu funcionário pode tirar uma foto rápida de uma nota fiscal com a câmera do smartphone. Em seguida, eles a salvam como PDF e a enviam para seu departamento de contabilidade. Sua equipe de contabilidade é responsável por extrair os dados desta nota fiscal e, de alguma forma, colocá-los em seu sistema de contabilidade sem nenhum erro. O próximo passo é converter esta imagem em texto usando um sistema de Reconhecimento Óptico de Caracteres. Um dos sistemas de OCR mais populares é o Tesseract. O Tesseract é escrito em C e C++. Para usar o Tesseract em nosso programa Python, precisaremos usar uma ligação como o PyTesseract. Uma ligação é uma maneira de chamar uma biblioteca de software (aqui, Tesseract) de uma linguagem na qual ela não foi escrita (aqui, Python). Existem muitos desses sistemas e seus resultados variam muito dependendo de sua tecnologia subjacente e da qualidade da digitalização do documento em que estão trabalhando. O Parseur detecta de forma transparente se o seu documento é uma imagem e o converte automaticamente em texto, internamente. Assim que os dados do documento estiverem em formato de texto, eles estarão prontos para serem extraídos.
Extrair o texto da sua nota fiscal de acordo com seu esquema de dados
Depois que seu PDF estiver em formato de texto (ou pesquisável), você pode usar a biblioteca Python pdftotext para extrair os dados do arquivo PDF como texto. Aqui está um trecho de código para extrair o texto de um arquivo PDF:
import pdftotext
# Carregar sua nota fiscal
with open("invoice.pdf", "rb") as file_handle:
pdf = pdftotext.PDF(file_handle)
# Iterar sobre todas as páginas
for page in pdf:
print(page)
Nomeie este script como convert_pdf_to_text.py
e execute-o, você obterá a nota fiscal como texto na saída padrão. Se você quiser redirecionar a saída para um arquivo, pode executar:
$ python convert_pdf_to_text.py > invoice.txt
Agora que você tem a nota fiscal em formato de texto, pode extrair os dados que deseja dela, usando qualquer combinação das seguintes técnicas:
- Você pode usar uma expressão regular para extrair os dados que deseja. As expressões regulares são uma maneira poderosa de extrair dados de texto, mas também são muito frágeis. Se o formato da nota fiscal mudar, você precisará atualizar sua expressão regular. Além disso, as expressões regulares não são muito boas para extrair dados de tabelas.
- Você pode usar um sistema de modelagem visual, idealmente utilizando OCR Dinâmico e OCR Zonal. Esta é uma maneira mais avançada de extrair dados de texto. É mais robusto do que expressões regulares, mas também é mais complexo de implementar.
- Por fim, você pode usar um sistema de aprendizado de máquina. O aprendizado de máquina é uma maneira muito poderosa de extrair dados de texto. Também é o mais complexo de implementar. Você precisará treinar seu sistema de aprendizado de máquina com muitos dados. Este é um processo muito demorado. Além disso, os sistemas de aprendizado de máquina não são perfeitos e você precisará revisar manualmente os resultados para garantir que estejam corretos.
Vamos extrair dados de sua nota fiscal com o módulo re de expressões regulares do Python. Aqui está um trecho de código para extrair o número da nota fiscal de sua nota fiscal:
import re
# Carregar sua nota fiscal
with open("invoice.txt", "r") as file_handle:
invoice = file_handle.read()
# Extrair o número da nota fiscal
invoice_number = re.search(r"Invoice number: (\w+)", invoice).group(1)
print(invoice_number)
Nomeie este script como extract.py
e execute-o, você obterá o número da nota fiscal na saída padrão:
$ python extract.py
E você obterá algo como:
INV-1234
Observe que isso só funciona para as notas fiscais formatadas com uma linha como Invoice number: INV-1234
. Se o formato da nota fiscal mudar, você precisará atualizar sua expressão regular. Isso pode rapidamente se tornar um desperdício de tempo se você tiver muitos formatos diferentes de notas fiscais para lidar.
O Parseur pode te ajudar com isso.
Se você decidir usar a análise de expressão regular, nosso mecanismo de modelo ajudará você a gerenciá-las e também lhe daremos acesso a uma biblioteca de modelos que construímos ao longo dos anos. Deixamos você selecionar o melhor método de extração para seu caso de uso: você pode usar expressões regulares, mas também construção e correspondência de modelos visuais (mecanismo OCR) ou aprendizado de máquina (mecanismo de IA). Você pode até combiná-los para obter o melhor de todos os mundos. O Parseur também permite que você revise os resultados da extração e os corrija se necessário. Esta é uma etapa muito importante, pois o ajudará a melhorar a precisão da extração ao longo do tempo.
Coletar os dados extraídos
Com Python, você pode iterar sobre os arquivos de notas fiscais em uma determinada pasta e extrair os dados deles. Digamos que extraímos o número da nota fiscal e o valor total e geramos o resultado em formato CSV:
import os
import re
import pdftotext
# Iterar sobre todos os arquivos PDF na pasta
for filename in os.listdir("invoices/"):
if not filename.endswith(".pdf"):
continue
# Carregar sua nota fiscal
with open("invoices/" + filename, "rb") as file_handle:
pdf = pdftotext.PDF(file_handle)
# Imprimir o cabeçalho da coluna CSV
print("InvoiceNumber,TotalAmount")
# Iterar sobre todas as páginas
for page in pdf:
# Extrair o número da nota fiscal
invoice_number = re.search(r"Invoice number: (\w+)", page).group(1)
total_amount = re.search(r"Total amount: (\w+)", page).group(1)
print(invoice_number, total_amount, sep=",")
Nomeie este script como extract_to_csv.py
e execute-o, você obterá o número da nota fiscal e o valor total na saída padrão, que você pode redirecionar para um arquivo CSV que você pode abrir posteriormente com seu software de planilha favorito, como o Excel:
$ python extract_to_csv.py > invoices.csv
No Parseur, depois de extrair os dados de suas notas fiscais, você pode baixá-los como uma planilha ou exportá-los diretamente para seu software de contabilidade, usando integração direta de webhook, Make, Zapier ou Microsoft Power Automate. Você também pode usar nossa API para recuperar os dados em formato JSON.
Conclusão
Espero que este artigo tenha sido útil para você. Em suma, extrair dados de notas fiscais com Python é um processo complexo, mas pode ser feito, desde que suas notas fiscais sejam consistentes e você tenha muito tempo para gastar com isso. Caso seu tempo seja limitado, você pode usar a experiência e o conhecimento acumulados que foram incorporados ao Parseur ao longo dos anos, para chegar ao seu destino mais rapidamente e extrair dados de todas as suas notas fiscais com flexibilidade e precisão.
Última atualização em