Segundo Trabalho Prático

CI057 - 2023/2

André Guedes

Indexação de arquivos

O objetivo do trabalho é a implementação de uma base de dados para localização de palavras em um conjunto de arquivos.

Base de dados:

A base de dados conterá as palavras existentes nos arquivos organizadas usando árvores digitais (tries) possivelmente implementadas com remoção de nós com filho único. Cada registro (palavra) indicará a lista de arquivos onde a palavra acontece. A base deve ser guardada em arquivo para poder ser usada posteriormente.

Esse arquivo é de formato livre e deve conter a estrutura da árvore.

Aplicações:

Duas aplicações devem ser feitas.

A primeira aplicação será um pequeno programa, chamado insere, que recebe como parâmetro (linha de comando) os nomes de dois arquivos. O primeiro é o arquivo da base de dados e o segundo, um arquivo texto, onde as palavras serão procuradas. A chamada seria algo como:

> insere base arquivo-texto

As palavras encontradas no arquivo texto são inseridas na base já existente. Caso o arquivo da base não exista, ele é criado. Caso o arquivo de texto não exista, nada acontece (nem mensagem de erro).

As palavras a serem procuradas e armazenadas na base são definidas como:

[a-zA-Z][a-zA-Z][a-zA-Z][a-zA-Z]+

Ou seja, seqüencias maximais de letras com 4 ou mais símbolos. Assuma que caracteres acentuados não aparecem.

A segunda aplicação será uma ferramenta de busca, chamada procura, que recebe como parâmetro (linha de comando) o nome de um arquivo e uma string. O arquivo é o arquivo com a base de dados e a string é um prefixo. A chamada seria algo como:

> procura base prefixo

Esta ferramenta executa uma busca na base de dados e escreve na saída padrão (stdout) uma lista de arquivos que contém palavras que iniciem com o prefixo dado, um arquivo por linha. O nome de cada arquivo deve ser precedido do prefixo procurado e um espaço.

Nenhuma outra mensagem deve ser escrita na saída padrão (stdout). Caso o arquivo da base não exista ou algum parâmetro estiver faltando, uma mensagem apropriada deve ser escrita na saída padrão de erro (stderr). Se não for encontrada nenhuma palavra com o prefixo a ferramenta não escreve nada.

Requisitos mínimos:

O trabalho deve ser feito de forma que possa ser compilado e executado nas servidoras de computação do Departamento de Informática.

Não devem ter nenhuma opção de linha comando que não esteja especificada aqui.

O que deve ser entregue:

Além dos arquivos fonte, deve acompanhar um makefile e um arquivo README explicando o que foi feito e com o nome dos autores. Qualquer particularidade deve estar descrita neste texto, inclusive o formato do arquivo com a base de dados.

Para compilar vou usar o comando make (sem nenhum parâmetro), portanto preparem o Makefile para fazer isso.

Para testar vou rodar um script como o abaixo.

   insere base texto1
   insere base texto2
   ...
   insere base texton
   procura base prefixo1 > teste.out
   procura base prefixo2 >> teste.out
   ...
   procura base prefixok >> teste.out
   diff teste.sol teste.out

Caso o teste seja positivo (não imprime nada) será analisado o código fonte.

Forma de entrega:

O trabalho deve ser empacotado em um arquivo login1-login2.tar.gz, onde login1-login2 é uma string com os logins dos integrantes da equipe nas servidoras do DInf. Ao descompactar este arquivo o make e o script acima deverão funcionar dentro do diretório local (não em subdiretórios).

Este arquivo deve ser enviado por e-mail ao endereço do professor (andre) com o assunto "CI1057-trab2" (exatamente).

Equipe:

O trabalho pode ser feito em equipes de até 2 (dois) alunos.