Projeto TING (Trybe is not Google)! :red_circle::yellow_circle::computer::green_circle::large_blue_circle:
Foi desenvolvida uma aplicação em Python que simula um algoritmo de indexação de documentos semelhante ao do Google, com capacidade para detectar ocorrências em arquivos TXT.
Objetivos de prática
- Manipular Pilhas
- Manipular Deque
- Manipular Nó & Listas Ligadas
- Manipular Listas Duplamente Ligadas
Rodando Localmente a Aplicação
Para executar a aplicação e os testes, siga os passos abaixo:
- Clone o projeto.
- Abra o terminal e navegue até a raiz do projeto.
- Crie o ambiente virtual com o comando
python3 -m venv .venv
. - Ative o ambiente virtual com o comando
source .venv/bin/activate
. - Instale as dependências com o comando
python3 -m pip install -r dev-requirements.txt
. - Para executar todos os testes, execute o comando
python3 -m pytest
na raiz do projeto.
A seguir estão os exemplos para executar a aplicação, descritos no arquivo main.py. Para executar a aplicação, digite o seguinte comando: python3 -m main
- Para criar uma instância da classe Queue e adicionar informações presentes nos arquivos TXT localizados no diretório 'statics':
queue = Queue()
process('statics/arquivo_teste.txt', queue)
process('statics/nome_pedro.txt', queue)
print('--> Primeiro Elemento da Fila:', queue.search(0))
print('--> Segundo Elemento da Fila:', queue.search(1))
- Para localizar as informações por meio do índice usando a função 'file_metadata':
file_metadata(queue, 0)
- Retorna o primeiro elementofile_metadata(queue, 1)
- Retorna o segundo elementofile_metadata(queue, 99)
- Retorna "Posição inválida"
- Para criar um relatório de busca de palavras presentes na instância usando as funções 'exists_word' e 'search_by_word':
print(exists_word('adoção', queue))
- Retorno: [ { 'palavra': 'adoção', 'arquivo': 'statics/arquivo_teste.txt, 'ocorrencias': [ {'linha': 2}, ], }, ]
print(search_by_word('adoção', queue))
- Retorno: [ { 'palavra': 'adoção', 'arquivo': 'statics/arquivo_teste.txt, 'ocorrencias': [ { 'linha': 2, 'conteudo': 'é fundamental ressaltar que a adoção de políticas descentralizadoras nos obriga' }, ], }, ]
- Para remover as informações presentes na instância criada, use a função 'remove':
remove(queue)
- Arquivo statics/arquivo_teste.txt removido com sucessoremove(queue)
- Arquivo statics/nome_pedro.txt removido com sucessofile_metadata(queue, 0)
- Retorna "Posição inválida"
Estrutura do Projeto
.
├──statics
│ ├──🔸arquivo_teste.csv
│ ├──🔸arquivo_teste.txt
│ ├──🔸nome_pedro.txt
│ ├──🔸novo_paradigma_globalizado-min.txt
│ └──🔸novo_paradigma_globalizado.txt
├──tests
│ ├──priority_queue
│ │ ├──🔹test_priority_queue.py
│ │ └──🔸__init__.py
│ └──🔸__init__.py
├──ting_file_management
│ ├──🔸__init__.py
│ ├──🔸abstract_queue.py
│ ├──🔹file_management.py
│ ├──🔹file_process.py
│ ├──🔸priority_queue.py
│ └──🔹queue.py
├──ting_word_searches
│ ├──🔸__init__.py
│ └──🔹word_search.py
├──🔸dev-requirements.txt
├──🔹main.py
├── 🔸pyproject.toml
├── 🔹README.md
├── 🔸requirements.txt
├── 🔸setup.cfg
└── 🔸setup.py
Legenda:
🔸Arquivos de propriedade intelectual da Trybe
🔹Arquivos desenvolvidos por mim
Detalhes sobre Teste Desenvolvido
tests/priority_queue/test_priority_queue.py
- Implementação dos testes para a classe PriorityQueue
- Garante que arquivos com menos de 5 linhas são armazenados de forma prioritária na fila.
Detalhes sobre Classes Desenvolvidos
ting_file_management/queue.py
- Classe criada para armazenamento de arquivos por filas
ting_file_management/file_management.py
- Função capaz de ler os arquivos TXT e retorna em formato de array/lista
ting_file_management/file_process.py
- Função
process
- importa informações do arquivo TXT e adicionar na instância da Classe Queue informada
- Função
remove
- remove o primeiro arquivo presente na instância informada
- Função
file_metadata
- encontra um dado presente na instância atráves do index informado
ting_word_searches/word_search.py
- Função
exists_word
- verifica existência de uma palavra em todos os arquivos processados, retornando um relatório simplificado
- Função
search_by_word
- verifica existência de uma palavra em todos os arquivos processados, retornando um relatório completo