Extrair dados de notas fiscais com Python

Principais conclusões:

  • Python pode te ajudar a automatizar a extração de dados de notas fiscais, mas não existe solução milagrosa.
  • Parseur usa Python para extrair dados de notas fiscais para você.
  • PDF não é um formato de dados, mas sim 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 desenhado 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 regulamentações.

No entanto, o desafio surge quando os dados ficam presos dentro de um PDF. A natureza livre e complexa do formato pode entrar em conflito com a abordagem estruturada e consistente necessária para gerenciar a grande quantidade de dados que uma empresa processa diariamente.

Uma captura de tela das camadas do formato de arquivo PDF
Camadas do formato de arquivo PDF

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 exata de dinheiro. Aqui estão as etapas necessárias para extrair dados desse documento:

  1. Definir um esquema para os dados que você deseja extrair de suas notas fiscais
  2. Converter sua nota fiscal de imagem para texto
  3. Extrair o texto da sua nota fiscal conforme o seu esquema de dados
  4. Coletar os dados extraídos

Uma captura de tela do processo de extração de dados da nota fiscal
Processo de extração de dados da nota fiscal

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 real na forma, a substância de todas as notas fiscais é basicamente a mesma: você precisa de um fornecedor, um cliente, um número de referência da nota fiscal, uma data e uma lista de itens com quantidade, descrição e custo associados. Uma ótima maneira de começar a definir o formato da sua nota fiscal seria pelo seu software de contabilidade, já que provavelmente é lá que você vai armazenar os dados extraídos, não é mesmo? Se você quiser um formato de dados que cubra todos os casos possíveis, recomendo o site schema.org, que define uma série de formatos de dados padrão do setor para várias coisas, incluindo notas fiscais. O Parseur define um esquema de dados padrão para suas notas fiscais, mas você pode mudá-lo para atender ao seu caso de uso renomeando os campos na sua caixa de entrada de notas fiscais, conforme explicado aqui. Uma vez definido o formato dos dados, você pode 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

Uma captura de tela de uma nota fiscal tirada de um smartphone
Foto de uma nota fiscal tirada de um smartphone

Um arquivo PDF pode conter uma imagem. Por exemplo, seu colaborador pode tirar uma foto rápida de uma nota fiscal com a câmera do smartphone. Depois, salva como PDF e envia para o departamento contábil. Sua equipe contábil é responsável por extrair os dados desta nota fiscal e de alguma maneira inseri-los no seu sistema contábil sem cometer erros. O próximo passo é converter essa 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 usá-lo em nosso programa Python, precisamos usar um binding como o PyTesseract. Um binding é uma forma de chamar uma biblioteca de software (aqui, Tesseract) de uma linguagem para a qual ela não foi originalmente escrita (aqui, Python). Existem muitos desses sistemas e seus resultados variam bastante dependendo da tecnologia utilizada e da qualidade do escaneamento do documento trabalhado. O Parseur detecta automaticamente se seu documento é uma imagem e o converte automaticamente em texto, internamente. Assim que os dados estiverem em formato de texto, já podem ser 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 obter 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)

Dê o nome convert_pdf_to_text.py para esse script e execute-o, assim você verá a nota fiscal como texto na saída padrão. Se quiser redirecionar a saída para um arquivo, execute:

$ 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 técnicas a seguir:

  • Você pode usar uma expressão regular para extrair os dados desejados. Expressões regulares são uma forma poderosa de extrair dados de texto, mas também são muito frágeis. Se o formato da nota fiscal mudar, será preciso atualizar sua expressão regular. Além disso, expressões regulares não funcionam muito bem para extrair dados de tabelas.
  • Você pode usar um sistema visual de templates, idealmente aproveitando OCR Dinâmico e OCR Zonal. Essa é uma forma 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. Aprendizado de máquina é uma forma bastante poderosa de extrair dados de texto. Também é a mais complexa de implementar. Você vai precisar treinar seu sistema de machine learning com grande quantidade de dados. Isso leva tempo. Além disso, sistemas de machine learning não são perfeitos e é preciso revisar manualmente os resultados para garantir que estão corretos.

Vamos extrair dados da sua nota fiscal usando o módulo de expressões regulares re do Python. Veja um trecho de código para extrair o número da 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)

Dê o nome extract.py para esse script e execute-o. O número da nota fiscal aparecerá na saída padrão:

$ python extract.py

E você verá algo como:

INV-1234

Lembre-se que isso só funciona para as notas fiscais que têm uma linha como Invoice number: INV-1234. Se o formato da nota fiscal mudar, será preciso atualizar a expressão regular. Isso pode virar rapidamente um trabalho exaustivo se você tiver muitos formatos diferentes de notas fiscais para lidar.

O Parseur pode te ajudar com isso.

Crie sua conta gratuita
Poupe tempo e esforço com Parseur. Automatize seus documentos.

Se você decidir usar expressões regulares para a extração, nosso mecanismo de templates vai te ajudar a gerenciá-las, além de proporcionar o acesso a uma biblioteca de templates que construímos ao longo dos anos. Deixamos você escolher o melhor método de extração para o seu caso: pode usar expressões regulares, mas também criação e correspondência visual de templates (engine OCR) ou aprendizado de máquina (engine de IA). Você pode até combinar tudo para obter o melhor de cada abordagem. O Parseur também permite revisar os resultados da extração e corrigi-los se necessário. Essa é uma etapa importante para aumentar a precisão da extração ao longo do tempo.

Coletar os dados extraídos

Com Python, você pode iterar pelos arquivos de notas fiscais em uma pasta e extrair deles as informações. Vamos supor que extraímos o número da nota fiscal e o valor total, e exibimos o resultado no 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=",")

Dê o nome extract_to_csv.py a esse script e execute-o, assim o número e o valor total da nota fiscal aparecerão na saída padrão, que pode ser redirecionada para um arquivo CSV. Você pode então abrir o arquivo com seu software favorito de planilhas, como Excel:

$ python extract_to_csv.py > invoices.csv

No Parseur, depois de extrair os dados das suas notas fiscais, você pode baixá-los como uma planilha, ou exportar diretamente para seu software de contabilidade, usando integração direta via 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ê. Resumindo, extrair dados de notas fiscais com Python é um processo complexo, mas viável, desde que suas notas fiscais sejam consistentes e você tenha tempo para se dedicar a isso. Se o seu tempo é limitado, você pode contar com toda a experiência e conhecimento acumulados ao longo dos anos no Parseur para chegar ao objetivo mais rapidamente, extraindo dados de todas as suas notas fiscais com flexibilidade e precisão.

Última atualização em

Software de extração de dados baseado em IA.
Comece a usar o Parseur hoje mesmo.

Automatize a extração de texto de e-mails, PDFs e planilhas.
Economize centenas de horas de trabalho manual.
Adote a automação do trabalho com IA.

Parseur rated 5/5 on Capterra
Parseur.com has the highest adoption on G2
Parseur.com has the happiest users badge on Crozdesk
Parseur rated 5/5 on GetApp
Parseur rated 4.5/5 on Trustpilot