Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Dica modelo extração

Boa noite,

Me deparei com o primeiro problema onde talvez possa usar o que estou aprendendo aqui de Machine Learning. Preciso ler PDFs e extrair desse PDF uma informação específica como por exemplo uma data do meio do conteúdo.

Porém, esse PDF não tem padronização ou tabulação, a data vai estar em algum lugar no meio do texto que está escrito em linguagem humana.

Eu tenho uma massa de dado histórica desses documentos. Preciso treinar de alguma forma para que quando chegarem novos documentos, o modelo consiga extrair

Poderiam me dar alguma dica de como poderia fazer isso, algum material que possa estudar etc?

Eu aprendi no curso de NLP a limpar os dados, transformar as features em matriz e treinar para definir em qual classe pertence.

Agora não estou conseguindo relacionar com um modelo que extraia uma informação

Muito obrigado!

1 resposta
solução!

Oi Fábio, como você está?

Peço perdão pela demora em obter um retorno.

Por mais que o arquivo não siga um padrão bem definido, as datas provavelmente terão um padrão, elas normalmente estão separadas por barras ou traços, como mostro abaixo:

21/02/2001
21-02-2001

Supondo que você queira extrair esses valores, algo que podemos fazer é utilizar um recurso chamado Regex (expressões regulares), que nada mais é do que a capacidade de encontrar padrões em textos. Para o caso das datas, podemos utilizar o seguinte código:

import re 

re.findall(r"\d{2}/\d{2}/\d{4}", conteudo_pdf)

Onde, a função findall retorná todas as ocorrências do padrão e o padrão é demarcado pela expressão \d{2}/\d{2}/\d{4}, que diz que estamos procurando 2 dígitos (\d{2}) seguidos de uma barra (/) acrescentado a 2 dígitos (\d{2}) seguidos de uma barra (/) e por fim 4 dígitos (\d{4}).

Para leitura do arquivo PDF e sua conversão em texto, uma boa opção é a biblioteca tika. Instale-a através do seguinte comando:

pip install tika

O código completo ficará da seguinte forma:

import re
from tika import parser

raw = parser.from_file('exemplo.pdf')
conteudo_pdf = raw['content']

lista_de_datas_do_arquivo = re.findall(r"\d{2}/\d{2}/\d{4}", conteudo_pdf)

print(f"Datas do arquivo: {lista_de_datas_do_arquivo}")

Para esse exemplo, usei como base um arquivo que contém um texto e 3 datas espalhadas ao longo dele, sem nenhum padrão de posição definido, como mostro na imagem abaixo:

Imagem que mostra um texto gerado através de Lorem Ipsum de 3 parágrafos e 3 datas em cada um dos parágrafos, mas sem posições diferentes ao longo do parágrafo

Resultado ao executar o código:

Datas do arquivo: ['21/01/1999', '05/08/2001', '25/12/2007']

Caso queira conhecer mais sobre expressões regulares, recomendo o curso Expressões regulares: Capturando textos de forma mágica . Para conhecimento mais rápido a respeito de outras possibilidades das expressões regulares, recomendo o artigo RegEx básico em Python.

De posse disso, a ideia é que você crie uma função para fazer essa extração e após isso passe esses dados para o treinamento do modelo.

Qualquer dúvida fico à disposição.

Grande abraço e bons estudos!