Ir ao conteúdo

Posts recomendados

Postado

Boa tarde!

 

Já vi aqui no fórum comentando sobre possibilidade de fazer webscraping. Mas pergunto, é possível fazer de arquivo PDF?

 

Se sim, alguém tem algum código que posso me auxiliar? preciso tirar informações de um órgão público que preciso segmentar os dados ali presentes.

 

Postado

Possível geralmente é, @Alessandro Rodrigo Rodel. Alguns fatores podem vir a facilitar ou a dificultar a extração das informações, tais como: se existe um padrão que possa ser identificado, se o conteúdo possui texto ou se é só um texto digitalizado na forma de imagem, se é texto, mas passou por OCR, se tem muitas imagens e quadros aleatórios, se o mapa de caracteres foi incorporado no pdf, se o fluxo sofreu otimização ou não, enfim.

Resta então saber se é viável, ou seja, se o volume de material a ser extraído compensaria o tempo aplicado para elaborar alguma solução automatizada. Para casos mais simples é relativamente fácil extrair o que se deseja, às vezes até sem programação.

4 horas atrás, Alessandro Rodrigo Rodel disse:

...alguém tem algum código que posso me auxiliar?

Então. Vai depender de como é o conteúdo e fluxo desses pdf's, às vezes um simples Texto-para-coluna do Excel já resolve, outras a conversão direta para docx ou txt ou xlsx com algum tratamento posterior, outras a aplicação de Expressões Regulares, extração de tabelas com ferramentas específicas...

Penso que só analisando o arquivo pra ser mais específico em qual método de ataque utilizar.

Se possível, anexe-o para vermos a estrutura.

Postado

Boa tarde!

 

Sobre essa questão:

 

Em 08/10/2020 às 21:24, Edson Luiz Branco disse:

Alguns fatores podem vir a facilitar ou a dificultar a extração das informações, tais como: se existe um padrão que possa ser identificado, se o conteúdo possui texto ou se é só um texto digitalizado na forma de imagem, se é texto, mas passou por OCR, se tem muitas imagens e quadros aleatórios, se o mapa de caracteres foi incorporado no pdf, se o fluxo sofreu otimização ou não, enfim.

 

O arquivo que quero extrair é de um órgão público. Ela contém padrão, algumas informações que preciso tirar não possuem tabela, já outras sim. A maioria das informações que quero extrair são em textos (não tem tabelas). Imagens, das informações que quero extrair, não existe nenhuma. Os arquivos são em texto e não em forma de imagem, uma vez que consigo copiar para excel, word.

 

 

Exemplo de inicio da captura:

 

image.png.499639556ca7447c7bdb3a15800cedd6.png

 

Quero que ao achar determinado critério, por exemplo "RegistroB470: Apuração do ISS", me copie e cole as informações abaixo até o critério fim estiver concluído, que neste caso seria o inicio do "RegistroB500:".

 

image.png.7a5f3058c5ecae43ea192fd4392b97f6.png

 

Neste documento em específico, há apenas 1 "RegistroB470". Mas pode ser que em outros documentos que preciso fazer extração, há várias outras repetições (tipo, meu critério de busca "registrob470" aparece uma 30 vezes) e por isso precisaria que tivesse um loop para copiar/colar todas.

 

Qualquer coisa sr. Edson, posso estar passando mais detalhes por e-mail. Se assim o quiser, teria como me fornece-lo.

 

 

 

Postado
4 horas atrás, Alessandro Rodrigo Rodel disse:

posso estar passando mais detalhes por e-mail. Se assim o quiser, teria como me fornece-lo.

Se não puder anexar aqui no fórum por motivos de confidencialidade, mande por Mensagem Privada: à esquerda, abaixo de cada avatar de minhas mensagens aparece um símbolo de envelope. Envie por ali.

Postado

Bom dia sr. Edson!

 

Tranquilo, podemos enviar por aqui mesmo.

 

Tenho esse documento em anexo em específico, que extraio as seguintes informações quando presentes no .PDF:

 

1 - Se no PDF encontrar "SECRETARIA DE ESTADO DA FAZENDA AUDITORIA TRIBUTÁRIA CONSULTA Nº:", eu copio as informações correspondentes até o final da presente consulta, quando aparecer a mensagem "Secretário Executivo da Receita" ou até nova chamada para outra consulta "SECRETARIA DE ESTADO DA FAZENDA AUDITORIA TRIBUTÁRIA CONSULTA Nº:". Página 13 a 16. Na página 16 começa outra consulta que seria copiada para outra linha, tabela...

 

Dessa consulta, pode ser que em alguns casos aparece alguma informação por meio de tabela.

 

2 - E também busco extrair a seguinte informação no .PDF caso tiver presente, como no presente caso. Se encontrar a palavra "CONTRIBUINTE:" me copiar até a outra palavra "CONTRIBUINTE". E como pode existir várias, preciso fazer automaticamente em um loop.

Seria em uma linha:

image.png.f3135af13c774c3063381f167bffdc19.png

 

Seria copiado para outra linha:

image.png.686c3801d8988762bbc5036d4110ad6b.png

 

Obrigado por sua disponibilidade e atenção.

 

Se tiver algum vídeo, apostila ou tiver algum modelo de scraping em .pdf já me ajuda muito.

 

 

 

 

 

 

 

 

 

 

Diario_07102020.pdf

Postado

Bom dia, @Alessandro Rodrigo Rodel

 

O Microsoft Word acima da versão 2013 já consegue nativamente fazer importação de pdf com bons resultados, então sugiro usá-lo em seu projeto.

Embora não seja só um tipo específico de informação que você quer extrair e nem só de um tipo específico de pdf, supondo que todos os pdf's previamente selecionados estejam numa mesma pasta (digamos C:\ParaExtração\), a sequência a ser seguida pelo código VBA seria praticamente a mesma em cada situação e seria mais ou menos essa:

  • Abrir o primeiro arquivo pdf da pasta C:\ParaExtração\
  • Colocar o conteúdo do pdf (exceto cabeçalhos e rodapés) numa variável String
  • "Sanitizar" essa String pra facilitar a procura pelo match do padrão (remover espaços e tabulações em início de parágrafo ou antes do fim, substituir espaços múltiplos por simples, etc)
  • Procurar pelo início e pelo fim do padrão*:
    • Opção 1: capturar entre o início e fim do padrão somente o texto encontrado (mais fácil)
    • Opção 2: copiar a informação entre início e fim do padrão como está apresentado (com formatações, moldura de tabela, etc.)
  • Inserir ou colar o texto encontrado no destino final, numa célula de tabela do Word ou do Excel, por exemplo (note que, como você já está com o registro em memória, este seria o ponto ideal para separar também outros campos, como número do processo, data, sentença, etc.)
  • Fazer loop até encontrar todas as ocorrências
  • Fechar o arquivo
  • Abrir o próximo arquivo da pasta C:\ParaExtração\, inserir ou colar as informações extraídas na próxima célula do destino
  • Repetir até finalizar os arquivos da pasta.

Para seu tipo de extração, não vejo melhor alternativa senão a de usar Expressões Regulares (Regex) através da biblioteca VBScript.RegExp através do VBA. Por exemplo, para o último pdf anexado, uma ER (pattern) razoável que retornaria todas as 7 ocorrências do primeiro caso poderia ser:

 

SECRETARIA ?DE ?ESTADO ?DA ?FAZENDA[\s]*AUDITORIA ?TRIBUTÁRIA[\s]+CONSULTA Nº:[\s\S]+?((Chefe da Auditoria Tributária)|(Verificador: ([\dA-Z]{4}\.?){4}))

 

Para o segundo caso a seguinte ER:

^CONTRIBUINTE:[\s\S]+?JULGADOR:.*$

 

retornaria cada uma das 118 ocorrências.

_______________________________________________________

*Um detalhe importante quanto ao fim do padrão: 

 

Em 14/10/2020 às 09:00, Alessandro Rodrigo Rodel disse:

...eu copio as informações correspondentes até o final da presente consulta, quando aparecer a mensagem "Secretário Executivo da Receita" ou até nova chamada para outra consulta "SECRETARIA DE ESTADO...

...Se encontrar a palavra "CONTRIBUINTE:" me copiar até a outra palavra "CONTRIBUINTE"...

 

É fundamental identificar onde termina cada registro para que nenhum fique de fora e/ou para que não ultrapasse vazando para o próximo registro ou para texto estéril. Note que em sua observação "...ou até nova chamada para outra consulta "SECRETARIA..."  e também em "Se encontrar a palavra "CONTRIBUINTE:" me copiar até a outra palavra "CONTRIBUINTE" isso seria válido somente até o penúltimo registro, o que deixaria o último sem ser processado por não ter nada mais depois dele.

Por exemplo, em seu pdf, à primeira vista cada grupo no primeiro caso se encerra ou com o texto "Chefe da Auditoria Tributária" ou com "Verificador:" seguido de 4 grupos de 4 letras ou algarismos separados por pontos.

No segundo caso, começa com CONTRIBUINTE: e termina com JULGADOR: seguido de uma cadeia de caracteres até o final da linha.

 

 

Mesmo tendo todo o cuidado, algumas surpresas podem ocorrer.

Por exemplo, abra seu pdf na página 17, e observe a coluna da direita, no alto. Se você procurar como início do padrão o texto: SECRETARIA DE ESTADO DA FAZENDA e em seguida AUDITORIA TRIBUTÁRIA, sua busca vai falhar pois quem redigiu o texto não usou espaço em branco nem em ESTADODAFAZENDA nem em AUDITORIATRIBUTÁRIA.

Portanto, sugiro pelo menos escolher uma amostragem mesmo que aleatória entre seus arquivos pra conferir manualmente se está sendo extraído tudo que deveria.

 

 

 

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!