renankalfa / pdf-text-extract

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Extração de Dados da Cartilha em PDF

Este repositório tem como objetivo apresentar uma solução desenvolvida por mim para uma fase piloto de um projeto de pesquisa. fluxo geral

1. Problema de Negócio

Com o objetivo de mapear as redes estaduais e locais de enfrentamento à violência contra as mulheres, em uma fase piloto, precisaríamos levantar essas redes para o Distrito Federal.

2. Resultados Obtidos

Foi encontrado a cartilha da redes de proteção à mulher feita, em 2021, pelo Tribunal de Justiça do Distrito Federal e dos Territórios. Com isso, aproveitamos esse trabalho, extraímos os dados do arquivo pdf fornecido e criamos um dashboard.

2.1. Menu

image

2.2 Consulta das Redes

consulta redesss

2.3 Análise das Redes

analise redesss

3. Processo Desenvolvido

  1. Analise do arquivo pdf (formato das informações, campos possíveis, padrões e possíveis dificuldades).

  2. Criação e extração das informações do pdf por meio de um script Python.

    • Função destaque: por meio de um trecho de texto que se refere a uma instituição, ela trata e retorna um dicionário formatado da melhor forma.
def get_dic_v2(t1):
    categorias = ['Endereço', 'Telefones Gerais', 'Fax', 'E-mail', 'Observações', 
                  'Observação', 'Atendimento', 'Horário', 'Público', 'Bens e Serviços',
                  'Bens e serviços', 'Critérios', 'Critério']
    l = []

    # Busca os índices de todos os tipos de informações
    for c in categorias:
        if c == 'Atendimento':
            l.append(t1.find(c, 30))
        else:
            l.append(t1.find(c))

    # Dicionário apenas com os tipos de informações presentes
    dic_contem = {}
    for c in range(len(l)):
        if l[c] != -1:
            dic_contem[categorias[c]] = l[c]
    dic_contem = dict(sorted(dic_contem.items(), key=lambda item: item[1]))

    # Coleta as informações de cada tipo de informações e transforma em um dicionário
    cont, dic_final= 0, {}
    nome, indice = '', 0
    for key, value in dic_contem.items():
        if cont != 0:
            dic_final[nome] = [t1[indice + len(nome):value]]
        else:
            dic_final['Instituição'] = [t1[:value]]
            indice = value
        cont = 1
        nome = key
        indice = value
    dic_final[nome] = [t1[indice + len(nome):]]
    return dic_final
  1. Criação do dashboard por meio do Power BI.

4. Próximos Passos

  1. Implementações de melhorias na limpeza do texto extraído do pdf.
  2. Implementações de melhorias no campo "endereço".

5. Ferramentas Utilizadas

  • Python (3.9.6)
  • Jupyter Notebook (6.4.8)
  • Power BI (2.111)
  • Bibliotecas Python
    • Pandas (1.5.3)
    • PyPDF2 (3.1.0)

Back to top

About

License:MIT License


Languages

Language:Jupyter Notebook 100.0%