Skip to content

O projeto implementa um pipeline automatizado para processamento de documentos PDF, utilizando serviços AWS e armazenamento PostgreSQL.

Notifications You must be signed in to change notification settings

tsffarias/DocStream

Repository files navigation

DocStream

DocStream é uma solução de engenharia de dados desenvolvida para automatizar a extração e o processamento de dados contidos em arquivos PDF. Este sistema elimina a necessidade de digitação manual, reduzindo custos e aumentando a eficiência operacional das empresas que lidam com grandes volumes de documentos PDF diariamente.


Este projeto automatiza a extração de dados de arquivos PDF, eliminando a necessidade de processos manuais de digitação de notas fiscais ou documentos semelhantes. Os arquivos são carregados em um bucket S3, uma fila SQS detecta novos uploads e um processo (executando em uma instância EC2 ou em outro servidor) extrai e insere os dados no PostgreSQL.

Principais Funcionalidades e Fluxo de Processamento

  1. Upload: O PDF é carregado no bucket S3.
  2. Notificação: O S3 envia um evento para o SQS, informando o nome e a extensão do arquivo.
  3. Consulta Regular: Verificação da fila SQS a cada 2 minutos por um processo dedicado (EC2 ou ambiente similar)
  4. Extração: Se houver mensagem na fila SQS, inicia a extração de dados (dois métodos que podemos escolher):
    • Extração de PDF de forma gráfica (por exemplo, via Camelot ou Tabula).
    • Extração de PDF de forma textual (via Regex ou PyPDF2).
  5. Armazenamento em PostgreSQL: Todos os dados extraídos são inseridos em uma base de dados relacional.
  6. Transformação e Carga: Os dados são transformados e gravados no PostgreSQL.


Tecnologias Utilizadas

PostgreSQL

  • Descrição: O PostgreSQL é um dos bancos de dados relacionais de código aberto mais robustos e amplamente adotados no mercado.
  • Uso no Projeto: Armazenamento principal dos dados extraídos, com suporte a alto volume de consultas analíticas.

AWS EC2

  • Descrição: Serviço de computação em nuvem que oferece servidores virtuais escaláveis.
  • Uso no Projeto: Hospeda o processo que verifica a fila SQS e executa as rotinas de extração de dados.

AWS S3

  • Descrição: Serviço de armazenamento de objetos altamente escalável.
  • Uso no Projeto: Armazena os PDFs enviados para posterior extração de dados.

AWS SQS

  • Descrição: Fila de mensagens totalmente gerenciada que desacopla sistemas e coordena fluxos de trabalho assíncronos.
  • Uso no Projeto: Detecta uploads de PDFs no S3 e notifica o processo de extração.

Streamlit

  • Descrição: Streamlit é uma biblioteca Python de código aberto que permite a criação de aplicativos web interativos de forma rápida e fácil. Utilizado principalmente para construir dashboards e interfaces de dados, o Streamlit é ideal para prototipagem rápida e visualização de dados sem a necessidade de conhecimentos avançados em desenvolvimento web.
  • Uso no Projeto: Utilizado para construir o frontend da aplicação, permitindo que os usuários façam o upload dos PDFs de forma interativa e visualizem os resultados diretamente na interface, por meio de um dashboard.

Dashboard Streamlit KPIs

Comando:

  streamlit run src/frontend/app.py 

DBT

  • Descrição: DBT (Data Build Tool) é uma ferramenta de transformação de dados que permite a construção de modelos SQL e a aplicação de boas práticas de desenvolvimento de software ao ETL.
  • Uso no Projeto: Utilizado para transformar os dados das camadas Bronze e Silver, preparando-os para a camada Gold, onde estarão prontos para consumo pelos analistas.

Requisitos

  • Python 3.x
  • Bibliotecas:
    • camelot-py ou tabula-py para extração de tabelas
    • PyPDF2 para extração de texto
    • boto3 para interagir com S3 e SQS
    • psycopg2 para conexão com PostgreSQL
  • Banco de Dados:
    • PostgreSQL

Como Usar

  1. Clone o Repositório

    git clone https://github.com/seu_usuario/pdf-data-extractor.git
    cd pdf-data-extractor
  2. Instale as Dependências

    pip install -r requirements.txt

    ou

    poetry shell
    poetry install
  3. Configure as Variáveis de Ambiente

    • Credenciais AWS:
      export AWS_ACCESS_KEY_ID=SEU_ACCESS_KEY
      export AWS_SECRET_ACCESS_KEY=SUA_SECRET_KEY
      export AWS_REGION=us-east-1
      export S3_BUCKET=nome-do-seu-bucket
      export SQS_QUEUE_URL=url-da-sua-fila
    • Banco de Dados:
      export DB_NAME=nome_do_banco
      export DB_USER=usuario
      export DB_PASSWORD=senha
      export DB_HOST=host_do_banco
      export DB_PORT=5432
  4. Execute o Processamento

    python ./src/__init__.py

    O script verificará a fila SQS, fará o download do PDF do S3 e executará as rotinas de extração. Caso encontre dados, insere-os no PostgreSQL.

  5. Execute o Dashboard Streamlit

    streamlit run src/frontend/app.py 
  6. Faça o upload dos pdfs contidos na pasta 'jornada' (caso queira fazer o upload dos 'redrex', basta alterar no arquivo src/init.py a variável rule_name para rule_name='redrex'):

    src/files/pdf/jornada/
  7. Execute o dbt para atualizar a tabela gold:

    cd src/dbt_dw/
    dbt debug
    dbt run

Contribuição

Contribuições são bem-vindas! Por favor, siga os passos:

  1. Faça um fork do projeto
  2. Crie uma branch para sua feature (git checkout -b feature/nova-funcionalidade)
  3. Commit suas mudanças (git commit -m 'Adiciona nova funcionalidade')
  4. Push para a branch (git push origin feature/nova-funcionalidade)
  5. Abra um Pull Request

About

O projeto implementa um pipeline automatizado para processamento de documentos PDF, utilizando serviços AWS e armazenamento PostgreSQL.

Topics

Resources

Stars

Watchers

Forks