Criando templates para leitura e processamento de PDF de texto com Python RPA - Conheça o BotCity Documents - Parte 1

This is a discussion topic for the original post at Criando templates para leitura e processamento de PDF de texto com Python RPA - Conheça o BotCity Documents - Parte 1 - BotCity | Python RPA | Blog

Em diversas áreas temos que lidar com diversos tipos de documentos PDF, sejam eles de texto ou imagens. E existe uma forma muito mais tranquila de resolver o processamento desses tipos de documentos utilizando Python RPA ao invés de regex, XML ou outros procedimentos mais complexos. E tudo isso com apoio também de outras ferramentas ou frameworks OCR.

Neste artigo, vamos mostrar um dos nossos frameworks: BotCity Documents que, além de estar integrado também ao BotCity Studio, facilita a leitura de documentos PDF, de forma individual ou em lote, utilizando visão computacional para converter a relação de leitura e análise entre campos e valores nos documentos para código Python, que pode ser adicionado ao seu projeto de automação RPA.

Nesta parte 1 da série BotCity Documents, você verá como fazer o processamento de documentos PDF de texto. Na parte 2, vamos demonstrar como fazer o processamento de documentos PDF de imagens.

💡 Importante: o BotCity Documents, atualmente, não está disponível na licença community. Mas aguardem novidades em breve. 👀

Como utilizar BotCity Documents

Vamos acompanhar o passo-a passo para entender como utilizar o framework. Para este modelo, vamos utilizar um bot do tipo desktop, mas você também pode utilizar em bots que sejam do tipo web. Para criar um modelo parecido, você pode seguir as instruções neste link da nossa documentação.

Contudo, reforçamos que o nosso framework BotCity Documents não é para uso exclusivo em projetos de automação construídos com o nosso framework Desktop ou Web. Ele é um pacote independente e, apesar de ser utilizado com outras ferramentas, também pode ser usado em outros projetos sem qualquer dependência.

Pré-requisitos

  1. Ter uma licença que não seja Community;
  2. Realizar a instalação completa do SDK BotCity Studio. Você pode verificar como fazer isso clicando neste link da nossa documentação;
  3. Realizar a instalação do pacote BotCity Documents. Para efetuar este processo, você deve entrar em contato conosco para receber orientações de como realizar esta instalação conforme a sua licença (que, por enquanto, não pode ser a versão community).
  4. Ter uma IDE instalada. Por exemplo: Visual Studio Code, PyCharm, entre outros.

Exemplo: lendo arquivos em PDF de texto

Em sua IDE:

Abra a sua IDE preferida que já utilize no seu dia-a-dia. Em seu projeto, identifique o arquivo .py no qual realizará o desenvolvimento ou crie um para iniciar, de acordo com a organização e padrão dos seus projetos. No exemplo, criamos o arquivo “bills.py”.

Faça a importação do pacote instalado, conforme indicado no terceiro item dos pré-requisitos.

Em seguida, instancie o leitor de PDF e faça a leitura do seu arquivo, conforme exemplo abaixo em código Python.

# Creating a reader
reader = PDFReader()

Reading the pdf file

parser = reader.read_file(“document.pdf”)

Você também pode seguir a documentação e verificar como fazer o mesmo em Java, caso esteja usando essa linguagem. Basta verificar neste link.

No BotCity Studio:

Abra o BotCity Studio e crie ou carregue o seu projeto. Clique em “File” e, em seguida, “New Project” para um novo projeto. Ou “Load Project” para carregar um projeto já existente.

Identifique a pasta do seu projeto e, dentro dela, encontre o arquivo com a extensão “.botproj”. Ao fazer isso, teremos o mesmo código em ambas as ferramentas: IDE (que no exemplo utilizamos o Visual Studio Code, mas podem ser outras IDEs) e BotCity Studio.

A partir de agora, é importante deixar o cursor posicionado no BotCity Studio após a última linha de código. Pois os códigos que forem gerados automaticamente pela ferramenta, serão incluídos a partir dela.

Neste momento, precisamos carregar o PDF que utilizaremos para criar o template. Clique em “Documents” no menu superior. Após isso, clique em “Load new document” e identifique o arquivo PDF a ser lido.

Após carregar o PDF, você terá a aba “Code”, onde estará o código; a aba “UI”, que não estamos utilizando neste projeto; e a aba “PDF”, onde estará o arquivo que você carregou.

Clique na aba “PDF”. Você deverá identificar quais são os campos e seus respectivos valores que os arquivos terão como padrão para selecioná-los. As seleções vão acontecer com duas informaçõse por vez. A primeira se refere ao campo, que ficará com destaque vermelho na interface do BotCity Studio, e a segunda se refere ao valor deste campo, que ficará com destaque azul na interface do BotCity Studio.

Analisando o código gerado para sua utilização:

_account_no = parser.get_first_entry("Account No:")
value = parser.read(_account_no, 1.078947, -2.25, 1.513158, 3.5)
_statement_date = parser.get_first_entry("Statement Date:")
value = parser.read(_statement_date, 1.06, -2, 1.18, 3.5)
_due_date = parser.get_first_entry("Due Date:")
value = parser.read(_due_date, 1.079365, -1.75, 1.920635, 3.5)

O BotCity Studio começa a efetuar leituras importantes para gerar o código. Por exemplo, o campo no PDF chamado “Account no”, ele já entende que pode ser o nome da variável e por isso nomeia como “_account_no”. Assim como aconteceu com os campos “Statement Date” e “Due Date”.

Vamos validar que a leitura está sendo efetuada com o valor certo? Vamos adicionar o comando print para cada campo e comparar o resultado para garantir que está lendo o dado corretamente.

O código poderá ficar assim:

_account_no = parser.get_first_entry("Account No:")
value = parser.read(_account_no, 1.078947, -2.25, 1.513158, 3.5)
print(f"Account no: {value}")

_statement_date = parser.get_first_entry(“Statement Date:”)
value = parser.read(_statement_date, 1.06, -2, 1.18, 3.5)
print(f"Statement Date: {value}")

_due_date = parser.get_first_entry(“Due Date:”)
value = parser.read(_due_date, 1.079365, -1.75, 1.920635, 3.5)
print(f"Due Date: {value}")

E com a execução do código do nosso arquivo “bills.py”, o resultado pode ser comparado com o PDF:

💡 Dicas importantes:

  • Após as seleções desejadas no PDF, vá até a aba “Code” e pressione “Ctrl + S” em seu teclado, para salvar o que foi criado. Isso fará com que o código apareça automaticamente na sua IDE.
  • Caso você altere algo no código pela sua IDE, ao salvar a alteração e clicar novamente no BotCity Studio, ele receberá a alteração efetuada.
  • Mesmo que o campo mapeado e seu valor mudem de local dentro do documento, a ferramenta ainda conseguirá ler, pois está mapeada com visão computacional, desde que a relação entre a âncora e a área de leitura sejam mantidas.
  • O BotCity Studio gera automaticamente o código considerando o nome da variável criada para a leitura do PDF como parser. Se você utilizou outro nome, basta refatorar seu código.
  • Caso você não queira ver os contornos do que está selecionando, você pode clicar no checkbox do campo “Show Selections”. Caso esteja com o ✅, as seleções serão mostradas. Caso esteja sem o ✅, as seleções não serão mostradas.
  • Caso você erre a primeira seleção (do campo, destaque vermelho), basta pressionar a tecla “ESC” do seu teclado, que essa única seleção será apagada e você poderá fazer novamente.
  • Caso você erre uma grande quantidade de seleções, você pode apagar o trecho de código gerado na aba “Code” e selecionar novamente o que precisa.
  • Note que no GIF de demonstração, mostramos que a seleção do campo fica ajustada à palavra, enquanto a seleção do valor é mais abrangente no PDF. Isso ocorre porque o campo é fixo, mas o valor pode ser maior do que aquele modelo que verificamos. Com essa seleção mais ampla, podemos garantir que obteremos o resultado completo.
  • Você também pode acompanhar este vídeo rápido em nosso canal do YouTube demonstrando o uso. Aproveite para já se inscrever e receber as novidades por lá.

E para execução em lote?

Existem algumas bibliotecas do próprio Python que podem ser um apoio para a descoberta de arquivos em PDF. Por exemplo: pathlib ou glob. Além de criar estruturas, utilizando recursos da própria linguagem, para execução em laço, de vários arquivos, conforme a necessidade do seu projeto.

O que achou?

Gostou da funcionalidade? Qualquer dúvida, entre em contato conosco e não esqueça de participar da nossa comunidade, para aproveitar a troca de conhecimento e de experiências.