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.
- Upload: O PDF é carregado no bucket S3.
- Notificação: O S3 envia um evento para o SQS, informando o nome e a extensão do arquivo.
- Consulta Regular: Verificação da fila SQS a cada 2 minutos por um processo dedicado (EC2 ou ambiente similar)
- 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).
- Armazenamento em PostgreSQL: Todos os dados extraídos são inseridos em uma base de dados relacional.
- Transformação e Carga: Os dados são transformados e gravados no 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.
- 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.
- Descrição: Serviço de armazenamento de objetos altamente escalável.
- Uso no Projeto: Armazena os PDFs enviados para posterior extração de dados.
- 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.
- 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.
Comando:
streamlit run src/frontend/app.py
- 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.
- Python 3.x
- Bibliotecas:
camelot-py
outabula-py
para extração de tabelasPyPDF2
para extração de textoboto3
para interagir com S3 e SQSpsycopg2
para conexão com PostgreSQL
- Banco de Dados:
- PostgreSQL
-
Clone o Repositório
git clone https://github.com/seu_usuario/pdf-data-extractor.git cd pdf-data-extractor
-
Instale as Dependências
pip install -r requirements.txt
ou
poetry shell poetry install
-
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
- Credenciais AWS:
-
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.
-
Execute o Dashboard Streamlit
streamlit run src/frontend/app.py
-
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/
-
Execute o dbt para atualizar a tabela gold:
cd src/dbt_dw/ dbt debug dbt run
Contribuições são bem-vindas! Por favor, siga os passos:
- Faça um fork do projeto
- Crie uma branch para sua feature (
git checkout -b feature/nova-funcionalidade
) - Commit suas mudanças (
git commit -m 'Adiciona nova funcionalidade'
) - Push para a branch (
git push origin feature/nova-funcionalidade
) - Abra um Pull Request