Ir para conteúdo
  • 0

Normalização de dados em arquivo PDF


Ezequiel Pedreira
Ir para solução Solucionado por Joao Raulino ,

Pergunta

  • Alunos

Fala meus amigos! 

Seguinte, tenho um arquivo PDF, com perguntas e respostas, porém quando faço o import dos dados, ele vem fora da estrutura e algumas respostas vem mescladas na linha, gostaria de deixar com três colunas:

  1. Coluna 1: Número da questão
  2. Coluna 2: Pergunta
  3. Coluna 3: Resposta


Segue arquivo de teste em anexo. 
 

Teste.pdf

Link para o comentário
Compartilhar em outros sites

5 respostass a esta questão

Posts Recomendados

  • 0
  • Alunos
  • Solução

Suave @Ezequiel Pedreira?

O Power Query não é muito otimizado para ler PDFs já que ele tenta sempre buscar por tabelas e qualquer quebra de linha pode gerar confusão nesse processo:

https://learn.microsoft.com/en-us/powerquery-m/pdf-tables

https://learn.microsoft.com/en-us/power-query/connectors/pdf?source=recommendations

A melhor solução seria primeiro fazer o tratamento do PDF para texto usando alguma ferramenta ou script externo (e.g.: Python, VBA, conversor online) e logo depois importar o resultado já em texto no Power Query.

Uma vez importado no Power Query, bastaria manipular os dados conforme necessário para ter a informação no formato que você quer (i.e.: 3 colunas). Fiz um teste aqui usando um conversor online PDF>TXT (https://www.pdf2go.com/pdf-to-text) e algumas manipulações no Power Query e já deu uma boa base:

image.png.5996d8d589f52a2c721802ef2744e8f1.png

Citar

let
    Source = File.Contents(output.txt)
    #"Filtered Nulls #Input" = Table.SelectRows(Source, each ([Input] <> "" and [Input] <> "#(000C)")),
    #"Trimmed Text #Input" = Table.TransformColumns(#"Filtered Nulls #Input",{{"Input", Text.Trim, type text}}),
    #"Added #Numero" = Table.AddColumn(#"Trimmed Text #Input", "Numero", each try Number.From(Text.BeforeDelimiter([Input], ".")) otherwise null, type number),
    #"Added #Pergunta" = Table.AddColumn(#"Added #Numero", "Pergunta", each if [Numero] <> null then Text.AfterDelimiter([Input], ". ") else null, type text),
    #"Added #Resposta" = Table.AddColumn(#"Added #Pergunta", "Resposta", each if [Numero] is null then Text.Trim([Input]) else null, type text),
    #"Filled Down" = Table.FillDown(#"Added #Resposta",{"Numero", "Pergunta"}),
    #"Filtered Nulls #Resposta" = Table.SelectRows(#"Filled Down", each ([Resposta] <> null))
in
    #"Filtered Nulls #Resposta"

Note que algumas resposta ficaram divididas em duas linhas. Essas quebras são facilmente identificáveis através do segundo caráter (= ".") então você pode criar alguma regra para tratar essas linhas de acordo com o que você quer como resultado (e.g.: mesclar com a linha de cima, remover da tabela...).

Espero que esses insights te ajudem a avançar no problema 😉

Abs!

  • Like 1
Link para o comentário
Compartilhar em outros sites

  • 0
  • Alunos
Em 28/01/2024 em 08:37, Joao Raulino disse:

Suave @Ezequiel Pedreira?

O Power Query não é muito otimizado para ler PDFs já que ele tenta sempre buscar por tabelas e qualquer quebra de linha pode gerar confusão nesse processo:

https://learn.microsoft.com/en-us/powerquery-m/pdf-tables

https://learn.microsoft.com/en-us/power-query/connectors/pdf?source=recommendations

A melhor solução seria primeiro fazer o tratamento do PDF para texto usando alguma ferramenta ou script externo (e.g.: Python, VBA, conversor online) e logo depois importar o resultado já em texto no Power Query.

Uma vez importado no Power Query, bastaria manipular os dados conforme necessário para ter a informação no formato que você quer (i.e.: 3 colunas). Fiz um teste aqui usando um conversor online PDF>TXT (https://www.pdf2go.com/pdf-to-text) e algumas manipulações no Power Query e já deu uma boa base:

image.png.5996d8d589f52a2c721802ef2744e8f1.png

Note que algumas resposta ficaram divididas em duas linhas. Essas quebras são facilmente identificáveis através do segundo caráter (= ".") então você pode criar alguma regra para tratar essas linhas de acordo com o que você quer como resultado (e.g.: mesclar com a linha de cima, remover da tabela...).

Espero que esses insights te ajudem a avançar no problema 😉

Abs!

Opa, vou tentar nessa linha, em breve volto pra dizer se deu certo! 

  • Like 1
Link para o comentário
Compartilhar em outros sites

  • 0
  • Alunos
Em 28/01/2024 em 08:37, Joao Raulino disse:

Suave @Ezequiel Pedreira?

O Power Query não é muito otimizado para ler PDFs já que ele tenta sempre buscar por tabelas e qualquer quebra de linha pode gerar confusão nesse processo:

https://learn.microsoft.com/en-us/powerquery-m/pdf-tables

https://learn.microsoft.com/en-us/power-query/connectors/pdf?source=recommendations

A melhor solução seria primeiro fazer o tratamento do PDF para texto usando alguma ferramenta ou script externo (e.g.: Python, VBA, conversor online) e logo depois importar o resultado já em texto no Power Query.

Uma vez importado no Power Query, bastaria manipular os dados conforme necessário para ter a informação no formato que você quer (i.e.: 3 colunas). Fiz um teste aqui usando um conversor online PDF>TXT (https://www.pdf2go.com/pdf-to-text) e algumas manipulações no Power Query e já deu uma boa base:

image.png.5996d8d589f52a2c721802ef2744e8f1.png

Note que algumas resposta ficaram divididas em duas linhas. Essas quebras são facilmente identificáveis através do segundo caráter (= ".") então você pode criar alguma regra para tratar essas linhas de acordo com o que você quer como resultado (e.g.: mesclar com a linha de cima, remover da tabela...).

Espero que esses insights te ajudem a avançar no problema 😉

Abs!

Fala mano @Joao Raulino, realmente o power query para leituras de arquivos PDF não é tão bom, gostei da idéia de conversão em texto, fiz as conversões nos meus modelos e está dando muito certo, valeu pela contribuição irmão! Tmj 👊👊

  • Like 1
Link para o comentário
Compartilhar em outros sites

Faça login para comentar

Você vai ser capaz de deixar um comentário após fazer o login



Entrar Agora
×
×
  • Criar Novo...