Folders and files
| Name | Name | Last commit date | ||
|---|---|---|---|---|
Repository files navigation
O que e:
Um programa de linha de comando que le um livro (.txt), conta quantas
vezes cada palavra aparece e gera um CSV com as palavras em ordem
alfabetica e suas frequencias. A contagem pode ser feita com 4 estruturas
de dados diferentes (AVL, Rubro-Negra, Hash por encadeamento e Hash por
enderecamento aberto), e o programa mostra metricas de cada uma.
1. REQUISITOS
- Um compilador C++ com suporte a C++17 (g++ 7 ou mais novo).
- O utilitario "make" (opcional, mas facilita).
NAO precisa de nenhuma biblioteca externa. O programa usa apenas a
biblioteca padrao do C++ (STL).
Para garantir que tem g++ e make instalados,
rode no terminal:
sudo apt update
sudo apt install build-essential
2. COMO COMPILAR
Abra o terminal na pasta do projeto e rode:
make
Isso gera o executavel "freq".
Se preferir nao usar o make, compile na mao:
g++ -std=c++17 -O2 main.cpp -o freq
3. COMO EXECUTAR
Formato:
./freq <estrutura> <arquivo.txt> [saida.csv]
Onde <estrutura> e uma destas:
avl -> Arvore AVL
rb -> Arvore Rubro-Negra
hash_enc -> Tabela hash (encadeamento exterior)
hash_aberto -> Tabela hash (enderecamento aberto / sondagem linear)
Se voce nao passar o nome do CSV de saida, ele usa "frequencias.csv".
Para ver a ajuda:
./freq --help
Exemplo rapido (da pra usar o proprio README.txt como livro de teste):
./freq avl README.txt
Tambem da pra rodar o teste pronto pelo make:
make exemplo
4. O QUE SAI
- Um arquivo CSV no formato:
palavra,frequencia
mais,1
oito,1
quatro,2
sao,1
- E, no terminal, um relatorio com as metricas daquela estrutura:
numero de palavras lidas, palavras distintas, comparacoes de chaves,
rotacoes (nas arvores) e tempo de montagem da tabela.
Trocando so a estrutura (avl, rb, hash_enc, hash_aberto), o CSV sai
identico - o que muda sao as metricas. Isso da pra comparar o desempenho
de cada estrutura no mesmo livro.
5. QUE ARQUIVOS ELE PROCESSA
- Qualquer arquivo de texto .txt.
- O ideal e que o arquivo esteja em UTF-8. Assim os
acentos (a, e, c...) sao preservados e a pontuacao tipografica de livros
(travessao "—", reticencias "…", aspas curvas) e descartada corretamente.
Na leitura o programa:
- junta as palavras ignorando espacos e pontuacao;
- converte tudo para minusculo;
- mantem o hifen interno (ex.: "mostra-lo" conta como uma palavra so),
mas descarta o hifen/travessao de fala que fica solto.
6. LIMITACOES CONHECIDAS
- Letras ACENTUADAS em MAIUSCULA (ex.: "Aguia") nao sao convertidas para
minuscula, porque isso exigiria uma biblioteca Unicode. Letras acentuadas
minusculas e palavras normais funcionam sem problema.
- O arquivo precisa estar em UTF-8 para o tratamento de acentos/pontuacao
funcionar como descrito.