Skip to content

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.

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages