quinta-feira, 24 de setembro de 2009

FOX - Um framework de indexação e recuperação de informação textual desenvolvido em Java

1. INTRODUÇÃO

A construção de sistemas de recuperação de informação (SRI) é uma tarefa complexa e trabalhosa, pois envolve conceitos difíceis de ser representados por um modelo computacional. Mesmo com o avanço das bibliotecas de recuperação de informação, que auxiliam na construção dos SRI, o tempo gasto pelos desenvolvedores para construir novos sistemas é alto.

Diante deste contexto, este trabalho objetiva apresentar uma ferramenta capaz de simplificar a construção de aplicações que necessitem de motores de recuperação de informação para prover recursos avançados de busca.

Neste artigo falaremos sobre um pequeno e simples framework de indexação e busca chamado FOX – Framework of Objects IndeXing[i]. Detalharemos sua arquitetura e apresentaremos suas principais funcionalidades. No final serão disponibilizados os links para downloads e para um exemplo prático de uso.

2. O QUE É O FOX?

O FOX é um framework de domínio de aplicação especializado em indexar e recuperar objetos Java. O framework pode ser visto como uma abstração de alto nível de bibliotecas de recuperação de informação que são responsáveis por realizarem as operações de baixo nível.

As configurações do FOX são mantidas em um único arquivo XML que centraliza todas as definições de funcionamento do framework como o local de armazenamento dos arquivos do índice, as classes de análises de idiomas e os mapeamentos de classes dos objetos a serem indexados.

O FOX não é responsável por persistir o estado dos objetos que ele processa, tal responsabilidade é da aplicação. Assim, o resultado de uma busca retorna instâncias de classes com apenas os campos mapeados, preenchidos com os valores encontrados no índice. Estas instâncias de classes são chamadas de objetos fantasmas, pois o estado do objeto restaurado, geralmente, não corresponde ao estado atual do objeto na aplicação.

3. ARQUITETURA DO FOX

A arquitetura do FOX é dividida em quatro camadas, conforme figura 1:

· Camada de aplicação – camada onde o desenvolvedor interage com o framework sem precisar conhecer as camadas subseqüentes. Nesta camada, o desenvolvedor apenas precisa definir as configurações do arquivo XML e usar a ‘fachada’ fornecida pelo FOX. Esta fachada possui os métodos indexar, pesquisar, alterar e excluir;

· Camada de motores – é o coração do framework, pois fornece as funcionalidades para a camada de aplicação e implementa os motores de recuperação de informação para uma biblioteca específica. A camada de motores processa as informações vindas da camada de aplicação e converte para um formato aceito pela camada de biblioteca.

· Camada de biblioteca (API) – camada responsável por fazer a indexação textual e recuperação das informações, executando todo o trabalho pesado e de baixo nível;

· Camada de persistência – camada de armazenamento das informações manipuladas pela camada de biblioteca.

Figura1: Estrutura de camadas do FOX.

4. As funcionalidades básicas do FOX

Como foi dito anteriormente, as principais funcionalidades do Fox framework são indexação, recuperação, atualização e exclusão de informações em arquivos de índice. A informação para o Fox é representada objetos Java, os chamados objetos indexáveis. A classe que publica estas funcionalidades é a br.ufal.npd.fox.Fox que possuir quatro métodos:

· index (Object object) – processa a indexação de um objeto no índice. Um exemplo de como seria para indexar um objeto da classe Documento seria:

Fox Fox = new FOX(“meu-config.xml”);

Documento documento = new Documento("dados//exemplo1_1.txt");

Fox.index(documento);

Caso acontece algum erro o método índex levantará um FoxException;

· search(String criterio) – localiza e recupera todos os objetos encontrados no índice que atendem ao critério de busca. Um trecho de código para localizar o texto “josé” seria:

Fox fox = new Fox(“meu-config.xml”);

Collection resultados = FOX.seach(“josé”);

//Varre a lista de resultados

for (Iterator iterResultados = resultados.iterator(); iterResultados.hasNext();) {

FoxResultIF FoxResult = (FoxResultIF) iterResultados.next();

Documento documento = (Documento)FoxResult.getObjet();

};

· update(Object object) - processa a reindexação de um objeto. Um exemplo de código da chamada do método de atualização seria:

FOX FOX = new FOX(“meu-config.xml”);

Documento documento = new Documento("dados//exemplo1_1.txt");

FOX.update(documento);

· delete(Object object) – excluí do índice um objeto indexado. Para excluir basta substituir o método update por delete.

Este pequeno conjunto de comandos simplifica consideravelmente o uso do Fox framework.

5. Por que usar o FOX?

As principais vantagens proporcionadas pelo uso do framework FOX são:

· Abstração da complexidade do uso de bibliotecas de recuperação de informação;

· Fácil configuração por intermédio de arquivos descritores XML.

· Alta velocidade no desenvolvimento de novas aplicações ou módulos de recuperação de informação;

· Suporte a diversos formatos de arquivos, possuindo suporte aos principais arquivos de texto do mercado, como PDF, DOC, HTML e RTF;

· Desenvolvido totalmente orientado a objetos. Alguns dos seus módulos têm independência funcional, podendo ser reutilizado isoladamente, como é o caso do módulo de documento representado pelo pacote document.

Outras vantagens serão percebidas com o tempo, principalmente, somando as vantagens citadas com técnicas de desenvolvimento obtidas com o uso do FOX.

6. CONCLUSÃO

É possível adicionar buscas inteligentes em aplicação sem dor? Sim! E o FOX permite isso com o mínimo de esforço e com baixo acoplamento da lógica do negócio com as funcionalidades de busca. Se a programação orientada a aspecto for utilizada, este acoplamento tende a zero.

7. REFERÊNCIAS

SILVA, Édle Márcio S. FOX: Framework de Indexação de Objetos Java. Trabalho de conclusão de Curso. Maceió/AL: UFAL, 2008.

8. LINKS

· Site do projeto do Fox Framework

URL: http://code.google.com/p/foxframework

· Exemplo prático do uso

URL: http://code.google.com/p/foxframework/wiki/ExemploBasico


[i] http://code.google.com/p/foxframework

Nenhum comentário:

Postar um comentário