- Gabriel de Oliveira Maciel
- José Ricardo Sampaio Coutinho II
- Juliana Pereira de Magalhães
Abra o console nesse diretório e execute o seguinto comando:
gcc **/*.c -o program -lm && ./program < arquivo_entrada > arquivo_saida
Onde arquivo_entrada
corresponde ao nome do arquivo de entrada, e arquivo_saida
corresponde ao nome do arquivo de saida
Exemplo:
gcc **/*.c -o program.o -lm && ./program.o < bases-dicionario/Aventuras.base > saida.out
-
Implementamos um
dicionário estático
responsável por conter asstopwords
. Odicionário estático
foi escolhido por motivos simples:-
As
stopwords
só serão lidas uma vez e não serão modificadas, ou seja, não há necessidade de operações deinserção
ouremoção
otimizadas. -
A busca será constantemente demandada, ou seja, precisamo de uma estrutura de dados rápida para consulta, e um
dicionário dinâmico
é o ideal para isso, uma vez que a busca no mesmo está implementada com um algoritmos debusca binária
, contando com um tempoO(log(n))
, bem melhor que umabusca sequencial
quem tem tempoO(n)
.
-
-
O arquivo
stopwords_br_sorted.txt
foi preveamente ordenado, como sugere a descrição do trabalho.
- Implementamos um
dicionário dinâmico
responsável por conter todas as palavras que não são stopwords. No dicionário, cada palavra é umaTAD TPalavra
, que associa: palavra, chave, e páginas onde a palavra ocorre.
-
Como o trabalho pede para que exibamos apenas as 5 ocorrências mais importante de uma palavra, implementamos a função
buscarPalavra
que é responsável por buscar se a palavra existe no dicionário e imprimir as 5 ocorrências mais significativas. -
Para calcular quais são as 5 ocorrências mais significativas, implementamos a solução da seguinte maneira:
-
Verificar se a palavra existe no dicionário
-
Se a palavra existe, precisamos ordenar as ocorrências pela ordem de importância, para isso:
-
Calculamos a o
tf-idf
da palavra em cada uma das páginas em que ela aparece e salvamos esse valor juntamente com os dados da ocorrência em umvetor dinâmico
. (Optamos por um vetor dinâmico por que seria mais fácil para ordenar do que uma lista encadeada). -
Depois de termos terminado de preencher o VD, o ordenamos (usando
quickSort
) pela ordem de importância
-
-
Agora que temos o vetor ordenado, mostramos apenas até no máximo as 5 ocorrências (em ordem decrescente de importância)
-
As análises ainda não foram realizadas