indexação de arquivos texto: uma contribuição para o projeto

Propaganda
UNIVERSIDADE DO PLANALTO CATARINENSE
DEPARTAMENTO DE CIÊNCIAS EXATAS E TECNOLÓGICAS
CURSO DE INFORMÁTICA
(BACHARELADO)
INDEXAÇÃO DE ARQUIVOS TEXTO: UMA CONTRIBUIÇÃO PARA
O PROJETO OPENGED
Relatório do Trabalho de Conclusão de
Curso submetido à Universidade do
Planalto Catarinense para obtenção dos
créditos de disciplina com nome
equivalente no curso de Informática Bacharelado.
ISMAEL FRANCISCO ANTUNES DOS SANTOS
LAGES, NOVEMBRO DE 2002.
UNIVERSIDADE DO PLANALTO CATARINENSE
DEPARTAMENTO DE CIÊNCIAS EXATAS E TECNOLÓGICAS
CURSO DE INFORMÁTICA
(BACHARELADO)
INDEXAÇÃO DE ARQUIVOS TEXTO: UMA CONTRIBUIÇÃO PARA
O PROJETO OPENGED
Relatório do Trabalho de Conclusão de
Curso submetido à Universidade do
Planalto Catarinense para obtenção dos
créditos de disciplina com nome
equivalente no curso de Informática Bacharelado.
ISMAEL FRANCISCO ANTUENS DO SANTOS
Orientador: Prof. Angelo Augusto Frozza,
Esp.
LAGES, NOVEMBRO DE 2002.
INDEXAÇÃO DE ARQUIVOS TEXTO: UMA CONTRIBUIÇÃO PARA O
PROJETO OPENGED
ISMAEL FRANCISCO ANTUNES DOS SANTOS
ESTE RELATÓRIO, DO TRABALHO DE CONCLUSÃO DE CURSO, FOI
JULGADO ADEQUADO PARA OBTENÇÃO DOS CRÉDITOS DA
DISCIPLINA DE TRABALHO DE CONCLUSÃO DE CURSO DO VIII
SEMESTRE, OBRIGATÓRIA PARA OBTENÇÃO DO TÍTULO DE:
BACHAREL EM INFORMÁTICA
Prof. Angelo Augusto Frozza, Esp.
Orientador
BANCA EXAMINADORA:
Prof. Wilson Castello Branco Neto, M.
Eng.
UNIPLAC
Prof. João Soares de Oliveira Neto
UNIPLAC
Prof. Angelo Augusto Frozza, Esp.
Supervisor de TCC
Prof. Alexandre Perin de Souza
Coordenador de Curso
Lages, 27 de Novembro de 2002
iv
Dedico este trabalho a meus pais, pelo
apoio que me deram para a conclusão deste
curso, quando nos momentos difíceis me
falavam que o conhecimento é a maior
riqueza de um Homem.
Dedico também este trabalho aos membros
do Projeto OpenGED, que nos últimos dias
se dedicaram integralmente à conclusão do
Projeto.
Agradeço a toda a minha família, pelo
incentivo, e credibilidade que nas maiores
dificuldades jamais duvidaram do meu
potencial.
Agradeço a meu orientador, Prof. Angelo
Augusto Frozza pela paciência e auxílio na
elaboração deste trabalho.
SUMÁRIO
LISTA DE FIGURAS..............................................................................................VIII
LISTA DE QUADROS............................................................................................... IX
LISTA DE SIGLAS ......................................................................................................X
RESUMO ..................................................................................................................... XI
ABSTRACT................................................................................................................... 1
1. INTRODUÇÃO .............................................................................................................. 2
1.1. Apresentação............................................................................................................ 2
1.2. Definição do problema............................................................................................. 3
1.3. Justificativa .............................................................................................................. 4
1.4. Objetivo geral .......................................................................................................... 5
1.5. Objetivos específicos ............................................................................................... 5
1.6. Metodologia ............................................................................................................. 6
2. INDEXAÇÃO DE DOCUMENTOS................................................................................... 8
2.1. Problemas com a indexação..................................................................................... 8
2.2. Estruturas de armazenamento .................................................................................. 9
2.2.1. Arquivos Invertidos...........................................................................................................9
2.2.2. Árvores Trie ....................................................................................................................11
2.2.3. Árvores PAT....................................................................................................................11
2.2.4. Árvores RD-Tree.............................................................................................................12
2.3. Conclusão............................................................................................................... 16
3. O PROJETO OPENFTS............................................................................................. 18
3.1. Motivação .............................................................................................................. 18
3.2. Descrição do componente OpenFTS ..................................................................... 19
3.2.1. Requisitos de software ....................................................................................................20
3.2.2. Preparando o OpenFTS para o uso................................................................................22
3.2.3. Estrutura de uma base de dados do OpenFTS................................................................24
3.2.4. Parser..............................................................................................................................26
3.2.5. Dicionário .......................................................................................................................28
3.3. Conclusão............................................................................................................... 29
4. SINTAXE DE USO DO OPENFTS ............................................................................... 31
4.1. Preparando o banco de dados................................................................................. 31
vii
4.2. Indexando documentos .......................................................................................... 33
4.3. Pesquisando documentos indexados...................................................................... 34
4.4. Estatística de proximidade ..................................................................................... 35
4.5. Atualizando documentos indexados ...................................................................... 35
4.6. Conclusão............................................................................................................... 36
5. ANÁLISE DO FUNCIONAMENTO DO OPENFTS ...................................................... 38
5.1. Definição da base de dados.................................................................................... 38
5.2. Inicializando o banco de dados.............................................................................. 39
5.3. Indexando documentos .......................................................................................... 39
5.4. Analisando a pesquisa............................................................................................ 41
5.5. Conclusão............................................................................................................... 44
6. CONSIDERAÇÕES FINAIS .......................................................................................... 46
REFERÊNCIAS BIBLIOGRÁFICAS...................................................................... 48
LISTA DE FIGURAS
FIGURA 1
FIGURA 2
FIGURA 3
FIGURA 4
FIGURA 5
FIGURA 6
FIGURA 7
FIGURA 8
FIGURA 9
FIGURA 10
FIGURA 11
- Estrutura de arquivos invertidos ................................................
- Estrutura de uma árvore Trie .....................................................
- Estrutura de uma árvore PAT.....................................................
- Estrutura de uma árvore RD-Tree..............................................
- Arquitetura de acesso ao banco de dados PostgreSQL de uma
aplicação Perl...............................................................................
- Exemplo da execução do script init.pl ................................
- Número de lexemas indexados ..................................................
- Exemplo da execução do script index.pl ..............................
- Exemplo da execução do script search.pl ............................
- Exemplo da execução do script search.pl..............................
- Exemplo da execução do script search.pl..............................
9
10
11
12
21
40
40
41
42
42
43
LISTA DE QUADROS
QUADRO 1
QUADRO 2
QUADRO 3
QUADRO 4
QUADRO 5
QUADRO 6
QUADRO 7
QUADRO 8
- Estrutura da tabela txt........................................................... 24
- Estrutura da tabela index .......................................................24
- Estrutura da tabela fts_conf ............................................... 25
- Conteúdo da tabela fts_conf ................................................25
- Estrutura da tabela fts_unknown_lexem .......................... 26
- Descrição dos tipos de lexema reconhecidos pelo parser ........ 26
- Fragmento do script init.pl ............................................... 31
- Fragmento do script contendo a instrução SQL gerada para uma
requisição de consulta ..................................................................33
QUADRO 9 - Fragmento do script delete.pl .......................................... 35
QUADRO 10 - Resultados obtidos pelo script de consulta do OpenFTS ..........44
LISTA DE SIGLAS
AIIM
- Avant Imaging & Information Management Inc.
CD-R
- Compact Disk Read
CENADEM - Centro Nacional de Desenvolvimento do Gerenciamento da
Informação
CPAN
- Comprehensive Perl Archive Network
FSF
- Free Software Foundation
GED
- Gerenciamento Eletrônico de Documentos
GPL
- General Public License
HTML
- Hiper Text Mark up Language
MB
- Mega Bytes
PDF
- Portable Document Format
SGDB
- Sistema Gerenciador de Banco de Dados
SGBDOO - Sistema Gerenciador de Banco de Dados Orientado a Objetos
SGBDOR - Sistema Gerenciador de Banco de Dados Objeto/Relacional
SGBDR
- Sistema Gerenciador de Banco de Dados Relacional
RESUMO
Este trabalho tem como objetivo apresentar uma proposta de solução para
um dos principais problemas encontrados na definição do Projeto OpenGED: a
indexação de documentos. Para alcançar este objetivo, inicialmente foi realizada uma
pesquisa sobre sistemas de Gerenciamento Eletrônico de Documentos, o que
possibilitou conhecer melhor as tecnologias envolvidas. Em seguida, foi pesquisado
sobre a indexação de documentos, os problemas associados com a implementação
deste tipo de recurso e as facilidades que ele traz para um sistema de GED, tais como,
recuperação de informação e agilização dos processos que envolvem documentação
eletrônica. No estudo, foram identificadas várias estruturas e algoritmos utilizados para
implementar a indexação de documentos e, por sua vez, organizar as informações de
um sistema de GED. Assim, são apresentadas neste trabalho, as estruturas de arquivos
invertidos, árvores Trie, PAT e RD-Tree. Pela complexidade do tema, optou-se por
pesquisar ferramentas de indexação e busca de documentos já disponíveis. O OpenFTS
foi a ferramenta escolhida, por preencher os critérios de seleção definidos para o
projeto, principalmente por possuir livre distribuição, garantida pela General Public
Licence – GPL, como o OpenFTS implementa seu mecanismo de indexação baseado
em uma RD-Tree, foi necessário um estudo mais detalhado deste tipo de estrutura. Na
seqüência, foram feitos inúmeros testes, com a finalidade de entender como o
OpenFTS trabalha. A partir destes testes, da leitura da documentação e do estudo do
próprio código fonte, pôde-se descrever passo-a-passo como é feita a indexação e
busca de um documento. Outro importante resultado do trabalho foi a descrição
detalhada das tabelas criadas no banco de dados PostgreSQL, que são usadas para
implementar a RD-Tree. Um ponto negativo encontrado no OpenFTS é o fato dele
reconhecer somente arquivos com texto puro. Como o Projeto OpenGED prevê o uso
de arquivos PDF, foi necessário descobrir uma solução para esta limitação, que foi
resolvida pela conversão dos arquivos PDF originais em arquivos texto, com o uso do
utilitário pdftotext. Para finalizar, foram feitos novos testes para analisar a performance
do OpenFTS, sendo que o mesmo demonstrou ter um bom desempenho e que poderá
ser utilizado no Projeto OpenGED.
Palavras Chaves: OpenFTS; indexação; recuperação de informações; Software livre.
ABSTRACT
This paper aims to present a solution proposal for one of the main problems
found during OpenGED Project definition: the document indexation. To reach this
objective, initially a research on Electronic Document Management systems was
carried through, what made possible a better knowledge of involved technologies.
After that, a research was made about document indexing, the problems related to the
implementation of this feature and the easiness that it provides for a EDM system,
namely, recovery of information and acceleration of the processes involving electronic
documentation. During this study, some structures and algorithms used for document
indexation and to organize the information of an EDM system had been identified.
They are presented in this paper: the structures of inverted archives, Trie trees, PAT
and RD-Tree. Due to the subject complexity, already existing searching and indexing
tools were preferred. OpenFTS was the chosen tool; because it fills he defined criteria
for the project, mainly for possessing free distribution, guaranteed by General Public
License - GPL. As OpenFTS implements its indexation mechanism based on a RDTree, a detailed study of this type of structure was necessary. In the sequence, many
tests had been performed, with the purpose of understanding how OpenFTS works.
Due to these tests, the documentation reading and the study of the source code, it was
possible to make a detailed description of how indexation and documentation search
works. An important result of this paper was the detailed description of the tables
created in the PostgreSQL database used to implement the RD-Tree. A negative
feature found in OpenFTS is that it only recognizes pure text files. As OpenGED
Project foresees the use of PDF files, it was necessary to discover a solution for this
limitation, achieved by the conversion of original PDF files to text files, using the
pdftotext tool. Finally, tests to analyze the performance of OpenFTS had been
performed, and it demonstrated having a good performance and proving that it could
be used in the OpenGED Project.
Key Words: OpenFTS; indexation; information retrieve; free software.
2
1. INTRODUÇÃO
1.1. Apresentação
Atualmente, na sociedade em que vivemos, cresce cada vez mais o
volume de informações geradas pelas organizações, bem como, a necessidade de se
ter acesso a estas informações no menor tempo possível. No entanto, boa parte
destas informações ainda é armazenada em papel. Segundo a Avant Imaging &
Information Management Inc. - AIIM, em 1990 nos Estados Unidos, 95% dos
documentos das organizações ainda eram impressos e armazenados em papel
(CENADEM, 2002; AIIM, 2002).
Com a evolução da informática, passou-se a buscar novas formas de
armazenar e gerenciar documentos impressos. Uma das soluções criadas foi o
Gerenciamento Eletrônico de Documentos - GED. De acordo com o Centro
Nacional de Desenvolvimento do Gerenciamento da Informação – CENADEM
(2002), o GED consiste em converter informações de diferentes mídias para forma
digital, tornando a sua recuperação rápida e segura.
Nos últimos anos, a humanidade vem gerando informações de forma
exponencial. Essa avalanche de informações fez com que o mercado de GED
permanecesse em constante crescimento. Um exemplo de seu potencial é obtido
quando se compara um arquivo de quatro gavetas, que comporta em média 10 mil
imagens de documentos, e um CD-R, que pode armazenar 650 MB de informações,
o que corresponde a 13 mil páginas.
Conhecendo este potencial, formou-se um grupo de trabalho para
3
desenvolver o protótipo de uma solução para GED, com base no uso de ferramentas
de livre distribuição disponíveis no mercado, o qual esta sendo chamado de Projeto
OpenGED.
Devido à quantidade de tecnologias envolvidas e à complexidade inerente
a este tipo de sistema, optou-se por dividir o projeto inicial em três trabalhos
distintos:
a) Conceituação, análise de ferramentas disponíveis no mercado, descrição de
um projeto para desenvolvimento de aplicações em GED e elaboração de
estudos de casos sobre a utilização do mesmo;
b) Estudo sobre indexação de documentos e proposta de uma solução para
indexação de arquivos textuais a ser usada no Projeto OpenGED;
c) Implementação de uma aplicação utilizando os conceitos abordados no
Projeto.
O presente trabalho irá tratar sobre a questão da indexação de
documentos, que consiste basicamente na formulação de um dicionário de palavras
contidas nos documentos, a partir do qual será feita a recuperação da informação. A
indexação deve ser projetada de maneira lógica, estudando-se métodos de pesquisa
e diferentes estruturas de dados, procurando oferecer o menor tempo de resposta ao
usuário e uma maior confiabilidade dos dados apresentados.
Como os estudos estão sendo desenvolvidos em equipe, CENCI (2002)
aborda os conceitos relacionados ao GED e a descrição do Projeto OpenGED.
OLIVEIRA FILHO (2002), por sua vez, aborda o projeto e a implementação de
uma aplicação de GED, construída com softwares de livre distribuição.
1.2. Definição do problema
Um dos pontos críticos em sistemas de Gerenciamento Eletrônico de
Documentos é o método de recuperação da informação em documentos textuais. A
eficiência da recuperação da informação está associada às técnicas de indexação e
pesquisa utilizadas.
4
No contexto do Projeto OpenGED, o problema deste trabalho consiste em
propor uma solução para indexação de documentos textuais, a qual permita a
extração das palavras e posterior armazenamento em um banco de dados.
1.3. Justificativa
A cada dia, é gerado nas organizações um volume muito grande de
informações. Segundo o Centro Nacional de Desenvolvimento do Gerenciamento
da Informação (CENADEM, 2002), “A humanidade gerou a mesma quantidade de
informação nos últimos 50 anos que nos 5 mil anteriores. Esse número duplicou em
agosto de 2001. Em 2010, a informação duplicará a cada 11 horas”.
Estas informações armazenadas apenas em papel trazem grandes
problemas, tanto em relação ao espaço necessário para armazenamento, quanto para
o meio ambiente de onde vem o papel. Por isso, o Gerenciamento Eletrônico de
Documentos - GED, como ferramenta para recuperação de informações de forma
rápida, consistente e precisa, a cada dia vem chamando mais a atenção das
empresas. Assim, o GED deixou de ser apenas uma ferramenta para redução de
espaço físico e acesso simultâneo às informações, uma vez que também tem por
objetivo agilizar a recuperação de informações e a tomada de decisão.
Uma empresa que opta por uma solução de GED busca, principalmente,
controle absoluto nos processos de negócios, alta velocidade e precisão na
localização de documentos. Isto é imprescindível nos dias de hoje, onde questões de
minutos podem definir um grande negócio ou um grande fracasso. Até mesmo em
empresas de menor porte não se pode deixar um cliente esperando até que se
encontre um determinado documento guardado em alguma gaveta.
Conforme colocado por CENCI (2002), soluções de GED ainda têm um
custo bastante elevado, tornando-se inviáveis para a maioria das médias e pequenas
empresas. Além de investimentos em hardware e software, existe o custo associado
à contratação de uma empresa que faça a implantação/personalização do sistema de
GED.
5
O Projeto OpenGED preocupa-se em oferecer uma solução para
Gerenciamento Eletrônico de Documentos mais acessível às médias e pequenas
empresas, através da redução do investimento em software. Para tal, serão
pesquisadas ferramentas distribuídas na forma de software livre.
Segundo a Free Software Foundation (FSF, 2002), "software livre" se
refere à liberdade dos usuários executarem, copiarem, distribuírem, estudarem,
modificarem e aperfeiçoarem o software. O Projeto OpenGED usará software com
licença pública não só pelo fator financeiro, pois o software livre pode até não ter
custo, mas também, pela facilidade na adaptação de um software a uma determina
tarefa, uma vez que, tendo acesso aos arquivos fontes, qualquer alteração ou nova
funcionalidade poderá ser adicionada.
A indexação é de fundamental importância dentro de um sistema GED,
pois é através da indexação que as informações vão ser recuperadas, oferecendo
uma das grandes facilidades que um sistema de GED traz para seus clientes, que é o
acesso às informações em um menor tempo. Portanto, o estudo e implementação de
uma forma de indexação têm um papel vital na construção de uma ferramenta de
gerenciamento de documentos eletrônicos.
1.4. Objetivo geral
Contribuir para o desenvolvimento do Projeto OpenGED, propondo uma
solução para o problema da indexação de documentos, que ofereça recuperação de
informação de forma rápida e confiável, utilizando ferramentas de livre distribuição.
1.5. Objetivos específicos
Os objetivos específicos do trabalho são:
a) Identificar os principais processos de indexação de documentos usados em
sistemas de Gerenciamento Eletrônico de Documentos;
b) Propor uma ferramenta para a indexação de documentos, no contexto do Projeto
6
OpenGED;
c) Descrever o funcionamento e interfaces da ferramenta proposta;
d) Avaliar a performance da solução proposta.
1.6. Metodologia
O embasamento teórico deste trabalho foi adquirido através da leitura de
artigos sobre: GED, estrutura de arquivos PDF, extração de palavras em arquivos
PDF, indexação, entre outros, disponíveis em livros técnicos, sites de fornecedores
de tecnologia, revistas e manuais.
Uma vez compreendido como funciona o processo de indexação e busca
em documentos textuais, procurou-se encontrar ferramentas já desenvolvidas e
distribuídas na forma de software livre, para que pudessem integrar o Projeto
OpenGED. Previu-se, também, a possibilidade de não ser encontrada uma solução
pronta, caso em que deveria ser avaliada a hipótese de se implementar uma
ferramenta de indexação.
Entre várias ferramentas pesquisadas, optou-se por utilizar o OpenFTS,
distribuído gratuitamente sob a General Public Licence – GPL (OPENFTS, 2002).
Com a decisão de adotar esta ferramenta, iniciou-se o estudo da mesma,
os requisitos do ambiente necessários para a instalação e configuração, a forma
como as informações são armazenadas e os algoritmos utilizados para a indexação e
recuperação de informações.
Em uma etapa seguinte, foi feita a instalação da ferramenta escolhida em
um servidor de testes para avaliar o desempenho da mesma. Os documentos que
formaram o banco de testes foram obtidos na Internet.
Com os testes, procurou-se verificar se o OpenFTS é uma ferramenta de
indexação de documentos funcional, com interfaces de gerenciamento e consulta
simples e, se pode ser distribuída sem custos, sob a General Public License - GPL,
da Free Software Fundation (FSF, 2002).
O Projeto OpenGED está sendo disponibilizado gratuitamente no site
7
http://codigolivre.org.br, que é um repositório de projetos de software livre,
podendo ser acessado pelo endereço http://openged.codigolivre.org.br.
2. INDEXAÇÃO DE DOCUMENTOS
Uma empresa que utiliza um sistema de GED, não procura apenas a
redução de papel ou o controle do fluxo de documentos. Um dos principais motivos
para adesão a um sistema de GED é ter informações, que antes demoravam um
grande período de tempo para serem encontradas, disponíveis em segundos.
A indexação é o mecanismo usado pelos sistemas de GED para oferecer
esta facilidade aos seus clientes, ou seja, um bom sistema de indexação é um
recurso imprescindível em um sistema de GED.
Este capítulo apresenta o conceito de indexação textual e os principais
problemas relacionados com o tema. Aborda, ainda, algumas estruturas de
armazenamento mais utilizadas por produtos de GED.
2.1. Problemas com a indexação
Quando documentos impressos são recebidos por uma empresa, eles
devem ser organizados para serem utilizados. Esta organização normalmente
consiste em etiquetar, grampear e arquivar documentos em pastas ou armários. Sem
este processo, seria bastante difícil encontrar um documento em especial dentre
tantos outros. Em um sistema eletrônico o princípio é o mesmo, ou seja, um sistema
de GED deve fornecer uma estrutura para armazenar e organizar documentos.
O objetivo da indexação é, de uma maneira funcional e com uma estrutura
de fácil entendimento, organizar os documentos que são inseridos no sistema, da
mesma forma que uma pessoa arquiva documentos, organizando-os de maneira que
possa encontrá-los em poucos instantes. Um sistema de GED também deve ter a
9
mesma facilidade de recuperar informações em segundos, independente do tamanho
ou da complexidade do documento a ser recuperado.
Denomina-se indexação ao processo de criação de uma representação de um documento
para tornar sua manipulação mais fácil e rápida. Um sistema de recuperação de
documentos automatizado retorna um conjunto de documentos como resposta a uma
eventual consulta. Este sistema, contudo, pode não processar cada documento na forma
de linguagem natural. Ao invés disso, ele utiliza estruturas representativas de cada
documento que podem ter sido produzidas manual ou automaticamente. Em virtude da
complexidade da operação de indexação, tal operação realizada automaticamente será
invariavelmente imperfeita em comparação com a indexação feita por agentes humanos.
(SILVA, 1996)
Para se criar uma estrutura de indexação é necessário tomar alguns
cuidados, principalmente com o espaço ocupado pelos arquivos de índice. Em
determinadas situações, dependendo do algoritmo a ser utilizado para indexar, os
arquivos de índices podem ocupar até 100% do tamanho dos arquivos originais, o
que torna uma estrutura de indexação inviável quando se tem um grande número de
documentos. Outro problema é a complexidade que estes arquivos de índices vão
adquirindo com o aumento significativo do volume de documentos armazenados,
prejudicando a performance do sistema para indexar e recuperar documentos.
2.2. Estruturas de armazenamento
Cada vez mais, estão sendo pesquisadas novas formas de armazenamento
para índices de arquivos textuais. Entre as diversas técnicas existentes, as mais
utilizadas são os Arquivos Invertidos (WIVES, 2002), as árvores Trie e PAT
(NEUBERT, 1999) e árvores RD-Tree (HELLERSTEIN e PFEFFER, 2000).
Esta seção faz uma rápida apresentação destas estruturas para criação de
índices, dando especial atenção à RD-Tree.
2.2.1. Arquivos Invertidos
Os arquivos invertidos são as estruturas mais utilizadas para indexação de
arquivos textuais, devido a sua simplicidade e eficiência na busca, bem como, pela
possibilidade de compressão, o que pode oferecer uma considerável redução nos
10
custos adicionais com espaço para armazenamento.
A estrutura de um arquivo invertido, conforme mostrado na Figura 1,
geralmente é composta por três entidades relacionadas:
• Dicionário: é uma lista de todas as palavras indexadas;
• Lista de inversão: contém a identificação das palavras com ponteiros para os
documentos; e,
• Documentos indexados.
FIGURA 1 – Estrutura de arquivos invertidos.
Fonte: (WIVES, 2002).
Para cada palavra do dicionário, existirá uma lista invertida contendo
ponteiros para todas as ocorrências da palavra nos documentos indexados.
Existe, também, a necessidade da criação de uma lista de stop words, que
contém a relação de palavras que não precisam ser indexadas, pelo fato de sua
ocorrência ser bastante comum ou irrelevante, como é o caso das preposições, ou
mesmo, palavras que aparecem praticamente em todos os documentos. Se estas
palavras fossem indexadas, não estariam auxiliando a filtragem dos documentos,
além de deixar o processo de recuperação de informações mais lento.
Apesar de possuir uma estrutura simples, os arquivos invertidos, segundo
WIVES (2002), podem ocupar de 50% a 100% do tamanho do documento original.
No entanto, se forem utilizados algoritmos de compressão, pode-se reduzir este
gasto com espaço para valores menores do que 10%.
11
2.2.2. Árvores Trie
Árvores Trie são estruturas de árvores criadas especialmente para indexar
palavras. Sua principal utilização se dá em arquivos cujo objetivo é armazenar
palavras. Nessa estrutura, cada nodo é um vetor contento 27 componentes que
correspondem às letras do alfabeto (NEUBERT, 1999).
As árvores Trie geralmente são usadas quando se tem grande quantidade
de textos estáticos, ou seja, textos que não mudam ou quando não são inseridos
novos documentos. Por exemplo, a indexação de dicionário ou livros.
FIGURA 2 – Estrutura de uma árvore Trie.
Fonte: (NEUBERT, 1999).
2.2.3. Árvores PAT
Segundo NEUBERT (1999), As árvores PAT são bastante semelhantes às
árvores Trie, porém, são árvores binárias e trabalham com um esquema de
codificação binária das palavras. Figura 3.
Nesse tipo de estrutura o documento é visto como uma cadeia de
caracteres (uma grande string) onde cada uma de suas posições pode ser um ponto
de entrada (um ponto de busca). Cada posição da string define uma substring que
começa nesse ponto e vai até o final do documento, incluindo todo o texto
intermediário.
12
FIGURA 3 – Estrutura de uma árvore PAT.
Fonte: (NEUBERT, 1999).
Na árvore PAT, os índices referenciam seqüências de caracteres no texto.
Deve haver um apontador para cada caractere do texto, o qual começa uma nova
palavra ou sub-palavra.
Para que se possa fazer uma consulta nesse tipo de árvore, a expressão
desejada também deve ser codificada para uma sentença binária, utilizando-se o
mesmo padrão empregado no momento da indexação. Os bits individuais do código
são utilizados para definir o caminho a ser percorrido, onde zero indica os ramos à
esquerda e um indica os ramos à direita.
2.2.4. Árvores RD-Tree
Uma árvore RD-Tree trabalha com um sistema de indexação por
conjuntos ou blocos. Através deste mecanismo de indexação por blocos, reduz-se o
tamanho dos arquivos de índice, o que pode ser considerado uma vantagem sobre os
demais métodos. O uso da RD-Tree possibilita que a indexação de texto tenha uma
boa performance. Na recuperação de documentos indexados também se pode ter
ganhos em tempo de resposta ao usuário.
A Figura 4 mostra a estrutura de uma árvore RD-Tree. A estrutura deste
tipo de árvore é similar à árvore R-Tree, que é uma estrutura popular para
13
armazenamento de dados espaciais, como retângulos e polígonos.
FIGURA 4 – Estrutura de uma árvore RD-Tree.
Fonte: (HELLERSTEIN e PFEFFER, 2000).
Na RD-Tree, o conjunto de dados que está sendo indexado é chamado de
conjunto base1, enquanto que os elementos pertencentes a este conjunto base são
chamados de elementos base2. O conjunto formado por todos os conjuntos base é
chamado de universo. Cada conjunto base está dentro de um conjunto limitador3
que, no contexto de árvores, é o nó “pai” (Figura 4). Um nó “pai” pode ter vários
filhos. A escolha do nó que vai receber um novo conjunto base ou a decisão de criar
um novo nó “pai” é feita por heurísticas (HELLERSTEIN e PFEFFER, 2000).
Um nó folha de uma RD-Tree contém as entradas de um conjunto base.
Um nó não folha contém as entradas de um conjunto limitador. Assim, o nó não
folha, que é um conjunto limitador, contém obrigatoriamente todas as entradas dos
nós filhos, representando a união de todos os seus nós filhos.
Para encontrar um determinado conjunto base, inicialmente é feita uma
consulta no nó raiz. Se o conjunto que está sendo procurado for um subconjunto do
1
Conjunto base – tradução do termo inglês base sets.
Elementos base – tradução do termo inglês base elements.
3
Conjunto limitador – tradução do termo inglês bounding set.
2
14
nó raiz, a busca deve continuar nos nós filhos do nó raiz. Esta operação deve ser
repetida até que se encontre um nó folha. Caso o conjunto procurado não seja
encontrado no nó raiz, ou em um nó não folha, ele não pertence à árvore formada
por todas as entradas descendentes deste nó, que podem ser descartadas.
Na inserção de um novo conjunto base, o nó escolhido para ser o “pai” do
novo nó é aquele cujo conjunto de entradas formam mais intersecções, ou seja,
procura-se o conjunto limitador mais parecido com o novo conjunto base, pois
posteriormente, os elementos base deste novo conjunto serão acrescentados ao
conjunto limitador.
2.2.4.1. Por que usar RD-Tree?
Gerenciadores de Bancos de Dados Relacionais (SGBDR) tradicionais
possuem excelente capacidade de processamento de consultas, mas sofrem com um
rígido e semanticamente empobrecido modelo de dados (HELLERSTEIN e
PFEFFER, 2000).
Gerenciadores de Bancos de Dados Orientados a Objetos (SGBDOO)
possuem um modelo de dados mais flexível, que permite a criação de tipos
complexos. Entre as facilidades deste modelo, está o suporte a atributos de
“conjunto valorados”4, os quais são elementos de registro do tipo conjunto-dex, onde x é algum tipo de dado conhecido do sistema. Estes conjuntos ocorrem
naturalmente na associação com objetos simples, como por exemplo, o conjunto das
disciplinas feitas por um acadêmico ou o conjunto de palavras-chave de um
documento (HELLERSTEIN e PFEFFER, 2000).
Gerenciadores de Bancos de Dados Objeto-Relacional (SGBDOR), tais
como o PostgreSQL, combinam a riqueza do modelo de dados dos SGBDOO com a
performance de processamento de consulta dos SGBDR. Essa flexibilidade em criar
novos e complexos tipos de dados permite, por exemplo, que um sistema de
Gerenciamento Eletrônico de Documentos, tenha uma classe definida como:
DOCUMENTO =[nome: texto; id: inteiro; palavras:conjunto-de4
Atributos de conjunto-valorados – tradução do termo inglês: set-valued attributes.
15
plavras-chaves],
onde, conjunto-de-plavras-chaves é tratado como um campo único da
tabela DOCUMENTO e cada palavra indexada representa um elemento deste
conjunto.
2.2.4.2. Um exemplo de indexação com RD-Tree
Neste item, será apresentado um exemplo bastante simples de indexação
usando uma árvore RD-Tree. Para um melhor entendimento, restringiu-se em dois o
número de entradas em cada nó. Na prática este número pode ser bem maior
(HELLERSTEIN e PFEFFER, 2000).
Neste exemplo, são utilizados sete conjuntos compostos por números
inteiros de 0 a 9, os quais são:
− S1 = {1,2,3,5,6,9};
− S2 = {1,2,5};
− S3 = {0,5,6,9};
− S4 = {1,4,5,8};
− S5 = {0,9};
− S6 = {3,5,6,7,8};
− S7 = {4,7,9};
A Figura 4 mostra como os conjuntos ficaram dispostos na árvore. Os
conjuntos S3, S2, S1e S5 são subconjuntos da entrada esquerda do nó raiz, portanto,
são inseridos à esquerda do nó raiz. Os conjuntos S4, S6 e S7 são subconjuntos da
entrada direita da raiz.
Para encontrar o conjunto S2, por exemplo, os conjuntos descendentes da
entrada direita seriam descartados no momento da busca.
Uma busca por todos os conjuntos que contenham os sub-conjunto {2, 9}
irá iniciar pelo nó raiz da árvore. Uma vez que o conjunto {1, 3, 4, 5, 6, 7, 8, 9}
(entrada direita do nó raiz) não é um super-conjunto5 de {2,9}, a sub-árvore da
direita é descartada. {0, 1, 2, 3, 5, 6, 9} é um super-conjunto de {2, 9}, portanto, o
16
lado esquerdo da raiz é examinada. {0, 5, 6, 9} é rejeitado, por não ser um
superconjunto de {2, 9}, mas {1, 2, 3, 5, 6, 9} é um superconjunto e seus nós filhos
são examinados, e assim por diante.
2.3. Conclusão
A indexação é uma técnica utilizada para que informações sejam
recuperadas rapidamente. Aplicada aos sistemas de GED, a indexação foi um dos
fatores que impulsionaram estes sistemas no mercado.
Através da indexação de textos, um sistema de GED pode fazer com que
uma empresa agilize todos os processos que envolvam documentação eletrônica.
As estruturas de armazenamento indicam como as informações são
organizadas em mídia eletrônica. A escolha por uma ferramenta de indexação que
possua uma boa estrutura de armazenamento é de vital importância para um sistema
de GED, pois, pode determinar até mesmo se vai ser necessário utilizar um
computador mais potente, refletindo assim em gastos extras para a empresa que está
implantando o sistema de GED.
Neste
capítulo,
procurou-se
dar
uma
idéia
das
estruturas
de
armazenamento usadas pelas ferramentas de indexação pesquisadas. Na literatura,
nota-se a preferência pelo uso de arquivos invertidos em função de sua
simplicidade. Diversos estudos apresentam soluções alternativas, algumas vezes
preocupadas em otimizar o tamanho dos índices, outras vezes otimizando o
desempenho dos algoritmos de indexação e busca.
O detalhamento da árvore RD-Tree justificou-se, uma vez que é a
estrutura utilizada pelo mecanismo de indexação OpenFTS, utilizado no Projeto
OpenGED.
Nesta etapa do trabalho, a equipe do Projeto fez uma extensa pesquisa por
mecanismos de indexação que pudessem ser utilizados em ambiente GNU/Linux.
Diversas ferramentas foram encontradas, porém, com restrições de uso,
5
Isto é, o conjunto {2, 9} não está contido no conjunto {0,1,3,4,5,6,7,8,9}.
17
principalmente em aplicações comerciais.
Antes de encontrar o OpenFTS, a equipe cogitou, inclusive, implementar
um mecanismo de indexação baseados em arquivos invertidos. Optou-se pelo
OpenFTS por este ser de livre distribuição e porque, tendo uma ferramenta de
indexação pronta, a equipe poderia avançar nos objetivos do Projeto OpenGED,
descritos em CENCI (2002).
3. O PROJETO OPENFTS
Neste capítulo é apresentado o OpenFTS, que é a ferramenta de indexação
e busca textual adotada para o Projeto OpenGED. Inicialmente são feitos
comentários sobre a motivação que levou à escolha do OpenFTS para,
posteriormente, descrever em detalhes como esta ferramenta está estruturada.
3.1. Motivação
Sendo o problema da indexação de documentos um ponto crítico para o
Projeto OpenGED, a princípio levantou-se duas possíveis soluções:
a) Encontrar uma ferramenta de indexação distribuída sob a licença GPL;
b) Desenvolver uma ferramenta para indexação e pesquisa de arquivos
textos.
Em função da complexidade inerente a um sistema de indexação e ao
tempo disponível para desenvolver o trabalho, a primeira solução mostrou-se como
a mais adequada.
Em CENCI (2002), definiu-se que o Projeto OpenGED seria construído a
partir de softwares distribuídos sob a General Public License - GPL (FSF, 2002).
Assim, optou-se pela procura de softwares de indexação já existentes, sendo
analisados entre outros, os seguintes produtos:
• Glimpse: é uma ferramenta para uso em ambiente GNU/Linux, de livre
distribuição para fins educacionais e em organizações não governamentais,
porém, exige aquisição de licença para uso comercial (GLIMPSE, 2002). O
Glimpse trabalha de forma semelhante ao comando grep existente no Unix,
19
ou seja, procura uma determina palavra ou um conjunto de palavras dentro
de arquivos texto previamente indexados. A velocidade de indexação e
procura no texto depende do tamanho dos arquivos. Segundo MAMBER
(1993), uma das grandes vantagens do Glimpse é o fato que seus arquivos de
índices serem relativamente pequenos cerca de 2% a 4% dos arquivos
originais. O Glimpse utiliza arquivos invertidos como estrutura de
armazenamento6.
• OpenFTS: construído para trabalhar com o banco de dados PostgreSQL,
permite a indexação e recuperação de informação em documentos textuais.
Possibilita a indexação on-line, ou seja, à medida que os documentos são
inseridos no sistema, também podem passar pelo processo de indexação. O
OpenFTS oferece, ainda, funções de ranqueamento7, que possibilitam uma
probabilidade de acerto na pesquisa bem maior (OPENFTS, 2002).
3.2. Descrição do componente OpenFTS
O OpenFTS é uma aplicação que trabalha sobre o banco de dados
PostgreSQL, oferecendo um mecanismo de indexação e busca em documentos
textuais. Possui recursos avançados, tais como: indexação on-line, estatísticas sobre os
dados e suporte para múltiplas línguas. Além disso, o OpenFTS é distribuído sob a
General Public License - GPL, o que, entre outras vantagens, permite a redução dos
custos de aquisição de software e a possibilidade de modificação do código pelo
próprio usuário (OPENFTS, 2002; FSF, 2002).
O OpenFTS, para atingir uma melhor performance, faz a implementação de
uma árvore RD-Tree em um banco de dados relacional-objeto. As árvores RD-Tree,
descritas na seção 2.2.4, são estruturas de dados que se mostraram bastante eficientes
tanto no armazenamento, como no processo de recuperação de informação
(OPENFTS, 2002).
6
7
Maiores informações sobre o produto podem ser encontradas em http://webglimpse.net.
Ranqueamento: forma de classificação obedecendo algum critério pré-definido.
20
3.2.1. Requisitos de software
O OpenFTS foi desenvolvido para ser executado sobre o Sistema Operacional
GNU/Linux. Nas seções seguintes, são relacionados os demais softwares e recursos
necessários para a instalação e utilização do OpenFTS, os quais também são
distribuídos sob a GPL.
3.2.1.1. Perl
Perl é a linguagem de programação usada na implementação do OpenFTS.
Sua sigla significa "Practical Extraction and Report Language", originalmente
desenvolvida
para
realizar
tarefas
de
administração
de
sistema
(WALL,
CHRISTIANSEN e ORWANT, 2001).
Pode ser utilizado em ambiente GNU/Linux e demais sistemas operacionais
compatíveis com Unix, bem como, no Windows8.
3.2.1.2. PostgreSQL
Sistema de Gerenciamento de Banco de Dados Relacional-Objeto, de livre
distribuição para o ambiente GNU/Linux (POSTGRESQL, 2002). Segundo
GREENSPUN (2002), a escolha do PostgreSQL para construção do OpenFTS se deve
por ser um SGDB completo, com índices, triggers, store procedures e se apresentar
como um banco de dados bastante seguro. Complementando, ainda, o PostgreSQL
possui flexibilidade no armazenamento de informações, possibilitando a criação de
campos com tamanhos dinâmicos9.
3.2.1.3. Tsearch
O Tsearch é um componente distribuído como uma extensão do PostgreSQL,
desenvolvido por Teodor Sigaev e Oleg Bartunov, que permite uma melhor integração
entre o banco de dados PostgreSQL e o OpenFTS. O Tsearch acrescenta um novo tipo
de dado ao PostgresSQL, denominado txtidx, que permite acesso ao conteúdo de
8
Maiores informações, código fonte e binários para instalação, podem ser encontrados no site oficial do produto:
http://www.perl.org.
21
forma indexada. Com ele, a busca de uma determinada palavra, mesmo em um grande
universo de palavras, é realizada em um intervalo de tempo pequeno.
Foi inserido na versão 0.33 do OpenFTS, substituindo o pacote GIST10
anteriormente utilizado para implementar as estruturas dos índices de indexação e
busca, tipos de dado e interface dos dicionários (OPENFTS, 2002; GIST, 2002).
Os fontes do Tsearch são distribuídos juntamente com os fontes do
PostgreSQL, sendo encontrados no sub-diretório contrib11.
3.2.1.4. DBI
O DBI é a camada de acesso à base de dados para a linguagem de
programação Perl. Nele, está definido um conjunto de métodos, variáveis e
convenções, que fornecem uma relação com a base de dados de forma consistente,
independente da base de dados real que está sendo usada (CPAN, 2002).
No entanto, o DBI12 é apenas uma camada que faz a interface entre a
aplicação Perl e o driver da base de dados (Figura 5). No caso do OpenFTS, que
utiliza o banco de dados PostgreSQL, o driver utilizado é o DBD::Pg.
FIGURA 5 – Arquitetura de acesso ao banco de dados PostgreSQL de uma aplicação Perl.
3.2.1.5. DBD::Pg
Conforme mencionado na seção anterior, o DBD::Pg é o driver que
9
Maiores informações podem ser obtidas no site do produto em: http://www.postgres.org.
Generalized Search Tree – Permite a criação estruturas de dados para acessar uma base de dados
11
A localização do diretório depende de como foram instaladas os fontes no computador do usuário, por
exemplo, /usr/local/postgresql-7.2.2/contrib.
12
O DBI pode ser encontrado no site http://search.cpan.org/author/TIMB/DBI-1.30/DBI.pm.
10
22
permite a uma aplicação Perl, através da interface DBI, trabalhar com os dados
contidos em uma base de dados PostgreSQL13.
3.2.2. Preparando o OpenFTS para o uso
Durante a realização do trabalho, as maiores dificuldades foram encontradas
no processo de instalação e configuração do OpenFTS. Diversas tentativas, sem êxito,
foram realizadas usando-se a versão 0.32 do produto. Com o lançamento da versão
0.33, que trouxe alterações nos tipos de dados, nas estruturas das tabelas de índices e
nas interfaces com os dicionários, obteve-se sucesso, uma vez que houve substituições
de componentes e o sistema se tornou mais estável. Atualmente está sendo utilizada a
versão 0.34.
Nesta seção serão descritos, de forma detalhada, os passos necessários para a
instalação e configuração do OpenFTS, versão 0.34. Esta seqüência pode ser utilizada
como guia de instalação para outras versões, mas, há necessidade de se consultar a
documentação de cada versão.
3.2.2.1. Instalação e configuração
Para instalar o OpenFTS, deve-se observar a existência de uma dependência
entre aplicativos, ou seja, um aplicativo depende que um outro já esteja instalado. Na
ordem, deve-se fazer a instalação dos seguintes aplicativos:
• Perl;
• PostgreSQL;
• Tsearch;
• DBI;
• DBD::Pg;
• OpenFTS.
Como diversos desses componentes possuem atualização regular e novas
versões são distribuídas com freqüência, recomenda-se que sejam seguidos os
13
O DBD::Pg pode ser obtido no site http://search.cpan.org/author/JBAKER/DBD-Pg-1.13/Pg.pm.
23
procedimentos de instalação contidos na documentação que acompanha os códigos
fonte dos programas, uma vez que as instruções contidas nos sites e/ou livros podem
pertencer a versões diferentes. Geralmente, essa documentação encontra-se nos
arquivos INSTALL e README.
Todo o processo de instalação do OpenFTS é descrito na documentação que
acompanha
o
software,
mais
especificamente
nos
arquivos
INSTALL
e
primer.html, consistindo basicamente nos seguintes passos:
• Descompactar os arquivos do OpenFTS com o comando tar –xzvf Search0.33.tar.gz;
• Mudar para o diretório criado, com o comando cd Search-OpenFTS-034;
• Executar o script Perl, que prepara o ambiente para instalação, com o comando
perl Makefile.PL;
• Recompilar os fontes com o comando make;
•
Fazer a instalação com o comando make install;
• Copiar o diretório pgsql_contrib_openfts para o diretório contrib que
se encontra dentro do diretório de instalação do PostgreSQL, por exemplo:
cp –r pgsql_contrib_openfts
/usr/local/pgsql/PostgreSQL7.2.2/contrib
• Mudar para o diretório pgsql_contrib_openfts anteriormente copiado:
cd
/usr/local/pgsql/PostgreSQL7.2.2/contrib/pgsql_contri
b_openfts
• Executar os comandos: make e, em seguida: make install.
Com o OpenFTS já instalado é necessário criar um banco de dados onde vão
ser armazenadas todas as informações e índices utilizados pelo mecanismo de
indexação. No PostgreSQL, este comando é createdb [nome do banco], onde
[nome do banco] corresponde ao nome dado à base de dados, por exemplo:
createdb teste_fts.
Na seqüência, é necessário executar o arquivo de script tsearch.sql
24
que se encontra juntamente com os códigos fonte do PostgreSQL, no subdiretório
tsearch. Este script irá incluir as configurações do Tsearch no banco de dados. O
comando para executar este script é psql
[nome
do
banco]
<
tsearch.sql.
Também é necessário executar o arquivo de script openfts.sql para
incluir as funções de ranqueamento e busca por aproximação. Este arquivo encontra-se
com os fontes do PostgreSQL, no subdiretório pgsql_contrib_openfts. O
comando para executar este script é psql
[nome
do
banco]
<
openfts.sql.
3.2.3. Estrutura de uma base de dados do OpenFTS
No processo de instalação e configuração do OpenFTS são criadas diversas
tabelas para armazenar as informações dos documentos indexados, as quais são
descritas nas seções seguintes.
3.2.3.1. Tabela txt
É a tabela onde são armazenadas as informações de cadastro dos documentos
já indexados. Compõe-se de três campos, conforme mostrado no Quadro 1:
QUADRO 1 – Estrutura da tabela txt
Nome
Tipo de dado
Descrição
tid
Inteiro não nulo
Identificador único para cada documento
indexado. É a chave primária.
path
fts_index
Caractere, de tamanho
Identifica o caminho físico do documento.
variável
txtidx
14
Contém, em ordem alfabética, todos
lexemas extraídos do texto pelo parser15
O Campo mais importante desta tabela é o fts_index, que representa o
conjunto de todos os lexemas extraídos de um documento. Lexema é o termo utilizado
para definir um elemento do texto que pode ser indexado. Indica uma palavra simples,
14
txtidx é um tipo especial, definido pelo componente Tsearch conforme descrito na seção 3.2.1.3, que
representa um conjunto de lexemas.
15
Parser é o “motor” do sistema OpenFTS, responsável pelo reconhecimento de lexemas de um documento.
Será melhor explicado na seção 3.2.4.
25
uma URL ou outra estrutura do texto. No Quadro 6 da seção 3.2.4, estão todos os tipos
de lexemas reconhecidos pelo parser do OpenFTS.
3.2.3.2. Tabela index
É a tabela que contém a posição de todas as ocorrências dos lexemas dentro
do documento.
Existem 10 tabelas de índices, iniciando na tabela index1 até a index10,
que são constituídas pelos campos mostrados no Quadro 2.
QUADRO 2 – Estrutura da tabela index
Nome
Tipo de dado
Descrição
lexem
Caractere, de tamanho
variável
Contém o lexema em si.
tid
Inteiro não nulo
Identifica o documento.
pos
Conjunto de inteiros
Identifica a posição de cada ocorrência do
lexema no documento.
Sua chave de acesso (chave primária) é composta pelos campos lexem e
tid.
3.2.3.3. Tabela fts_conf
Tabela que possui as configurações do OpenFTS, como dicionários usados e
stop words. Compõe-se dos campos mostrados no Quadro 3.
Nome
QUADRO 3 – Estrutura da tabela fts_conf
Tipo de dado
Descrição
name
Caractere, de tamanho
variável
Nome do item de configuração.
did
Inteiro não nulo
Identifica a seqüência do item de
configuração (padrão –1)
param
Caractere, de tamanho
variável
Parâmetros da configuração.
mod
Caractere variável
Identifica o módulo da configuração.
Por exemplo, na configuração básica do OpenFTS encontram-se os registros
mostrados no Quadro 4.
26
Name
QUADRO 4 – Conteúdo da tabela fts_conf.
Did
Mod
map
-1
parser
-1
Search::OpenFTS::Parser
ignore_id_index
-1
7 13 14 12 23
ignore_headline
-1
13 15 16 17 5
Txtidx_field
-1
fts_index
use_index_table
-1
1
numbergroup
-1
10
txttid
-1
txt.tid
dict
0
Search::OpenFTS::Dict::
param
{ '4'=>[1], 5=>[1],
6=>[1], 8=>[1], 18=>[1],
19=>[1],}
PorterEng
dict
1
Search::OpenFTS::Dict::
UnknownDict
{table =>
'fts_unknown_lexem'}
A tabela fts_conf contém os parâmetros passados para a função de
inicialização do OpenFTS, a qual será melhor explicada na seção 4.1.
3.2.3.4. Tabela fts_unknown_lexem
Tabela para armazenar os lexemas que o parser não reconheceu. Compõe-se
apenas de um campo, conforme mostrado no Quadro 5.
Nome
Lexem
QUADRO 5 – Estrutura da tabela fts_unknown_lexem
Tipo de dado
Descrição
Caractere, de tamanho
variável
Contém um lexema que o parser não
conseguiu reconhecer.
Os lexemas que poderão ser aceitos por esta tabela são definidos na
inicialização do banco de dados, conforme será descrito no próximo capítulo.
3.2.4. Parser
Parser é o “motor” de um mecanismo de indexação, ou seja, é a parte do
software que separa e identifica os lexemas de um documento.
O OpenFTS utiliza o parser para:
a) Extrair lexemas de um documento contendo texto;
27
b) Extrair lexemas de uma requisição de consulta.
Em ambos os casos, o parser cria uma seqüência de lexemas16 a serem
pesquisados. Pode-se utilizar diferentes parsers em diferentes tipos de projetos
(OPENFTS, 2002), por exemplo, pode-se construir um parser específico para
documentos do Word ou para arquivos de áudio.
O parser distribuído com o OpenFTS reconhece vinte e três tipos de lexemas
em arquivos de texto puro (sem formatação ou caracteres especiais), conforme mostra
o Quadro 6.
QUADRO 6 – Descrição dos tipos de lexemas reconhecidos pelo parser do OpenFTS
Tipo de Lexema
ID
Descrição de lexemas
Exemplo
LATWORD
1
latin Word
Alou
CYRWORD
2
cyrillic word
…
UWORD
3
mixed word
…
EMAIL
4
Email address
[email protected]
FURL
5
full URL
http://www.uniplac.net
HOST
6
host name
…
SCIENTIFIC
7
number in scientific notation
-0.12345e+15
VERSIONNUMBER
8
integer or version number
3
7.1.2
PARTHYPHENWORD
9
part of mixed hyphenated word
…
CYRPARTHYPHENWORD
10
cyrillic part of hyphenated word
…
LATPARTHYPHENWORD
11
latin part of hyphenated word
multi in word multi-key
SPACE
12
Symbols
$#%^
SYMTAG
13
HTML tag
<b>
<table>
HTTP
14
HTTP
http://
HYPHENWORD
15
mixed hyphenated word
…
LATHYPHENWORD
16
latin hyphenated word
multi-key
CYRHYPHENWORD
17
cyrillic hyphenated word
…
URI
18
Uniform Resource Identifier
/index.html
FILEPATH
19
filename or path
example.txt
DECIMAL
20
number in decimal notation
10.345
SIGNEDINT
21
Integer
-4
16
Seqüência de lexemas - tradução do termo inglês: “stream of lexems”.
28
UNSIGNEDINT
22
unsigned integer
4
HTMLENTITY
23
HTML entity
4
Fonte: (OPENFTS, 2002)
3.2.5. Dicionário
De forma geral, um dicionário é utilizado para o reconhecimento de palavras
em uma determinada língua. No OpenFTS, o conceito é o mesmo. É utilizado um
dicionário para reconhecer as palavras (lexemas) do texto e, a partir deste
reconhecimento, definir o local de armazenamento da palavra em questão.
Um
dicionário
deve
possuir
dois
métodos
chamados
lemms
e
is_stoplexem. O método lemms retorna um conjunto de lexemas. O método
is_istoplexem é uma função “booleana” que, caso a palavra tratada seja uma stop
word, retorna verdadeiro (1), caso a palavra não seja uma stop word, retorna falso (0).
O OpenFTS possui interface para trabalhar com dicionários do tipo ISpell17
ou com algoritmos de stemming criados sob o projeto Snowball18.
No processo de instalação do OpenFTS, por padrão, é configurado um
dicionário para a língua inglesa. Para o Projeto OpenGED é necessário alterar este
dicionário
dicionário
para um dicionário que reconheça
pode
ser
encontrado
no
a língua portuguesa. Este novo
site
http://snowball.tartarus.org/
portuguese/stemmer.html.
O OpenFTS pode trabalhar com mais de um dicionário ao mesmo tempo,
assim como, podem ser criados dicionários personalizados ou para uso específico, por
exemplo, nas áreas jurídicas e médicas. A definição de qual dicionário será utilizado é
feita no momento da configuração do OpenFTS (que será tratada na seção 4.1).
A construção de um novo dicionário deve levar em consideração vários
fatores relevantes à língua que se deseja construir o dicionário. Para construir um
dicionário de língua portuguesa, por exemplo, é preciso implementar um algoritmo
17
Dicionários ISpell são gratuitos e disponíveis para muitas linguagens. São usados para retornar a forma básica
de uma palavra (OPENFTS, 2002).
18
Algoritmos de stemming são usados para identificar a raiz lingüística (stemmer) de uma palavra, eliminando os
sufixos e reduzindo o número de palavras indexadas. Por exemplo, as palavras teste e testando, seriam indexadas
apenas uma vez como teste (OPENFTS, 2002; SNOWBALL, 2002).
29
que reconheça: letras, sufixos e prefixos de palavras, terminações verbais, palavras
primitivas e derivadas. Assim, para as palavras química, químicas e químico, o
dicionário vai relacionar com a palavra quimic.
Conforme apresentado em SNOWBALL (2002), o stemming é parte de um
processo composto pela extração de palavras de um texto, seguida da indexação dos
termos em um sistema de recuperação de informações. Pela complexidade e
especialização, este assunto deve ser estudado de forma separada dos sistemas de
recuperação de informação.
3.3. Conclusão
Uma ferramenta de indexação e busca textual é a parte principal de um
sistema GED, ou seja, ela é responsável pela principal vantagem que uma empresa
procura em um sistema GED, que é encontrar informações em um tempo bastante
reduzido, mesmo quando se tem em um grande volume de documentos.
No estudo feito sobre o Glimpse houve uma grande dificuldade para
encontrar documentação, apesar do número de usuários do sistema. Porém, o principal
fator para que ele não fosse escolhido como ferramenta de busca e indexação do
OpenGED foi o fato do Glimpse ser gratuito apenas para uso educacional e
governamental, o que representaria uma desvantagem para aplicações em outras áreas.
O OpenFTS foi, então, escolhido como ferramenta de indexação e busca
textual para o Projeto OpenGED após uma longa etapa de pesquisa. Ele oferece
vantagens que, posteriormente, serão bastante úteis em um sistema de GED, como
indexação on-line, ranqueamento no resultado de pesquisa e, principalmente,
velocidade na indexação e na busca de informações.
Porém, o seu uso também trouxe vários desafios para a equipe envolvida no
Projeto. Estes desafios começaram pelo uso do “quase desconhecido” sistema
operacional GNU/Linux, passando pela instalação dos pacotes de software necessários,
até atingir o ponto onde o OpenFTS funcionou efetivamente, após várias tentativas
frustradas. Os testes foram realizados com versão 0.32, 0.33 e 0.34 do OpenFTS,
30
sendo as duas últimas responsáveis pelo sucesso da equipe.
Com o software funcionando, partiu-se para a tarefa de entender sua
operacionalização. Primeiro foram identificados e descritos todos os outros softwares e
extensões necessárias para instalação do OpenFTS. Em seguida, procurou-se entender
sua estrutura de índices, ou seja, as árvores RD-Tree descritas no capítulo 2. O
próximo passo foi entender como esta estrutura foi implementada no PostgreSQL,
resultando na descrição das tabelas apresentadas neste capítulo. Por último, procurouse estudar as interfaces do OpenFTS, ou seja, a forma de uso das funções por ele
disponibilizadas, que é o assunto do próximo capítulo.
4. SINTAXE DE USO DO OPENFTS
Neste capítulo é apresentado um tutorial de uso do OpenFTS e sua sintaxe.
Procurou-se descrever detalhadamente cada função, bem como, o objetivo de cada
parâmetro passado às mesmas. É conveniente lembrar que esta descrição baseia-se nas
versões 0.33 e 0.34 do software, podendo ter algumas diferenças em relação a outras
versões anteriores.
4.1. Preparando o banco de dados
O OpenFTS oferece uma série de funções para indexação e pesquisa de
documentos textuais. Originalmente, o sistema traz vários scripts em linguagem Perl,
que são usados para demonstrar o uso de suas funções. Conforme a necessidade de
cada desenvolvedor, esses scripts podem ser remodelados em outras linguagens, como
o PHP.
Antes de iniciar o processo de indexação pela primeira vez, em um banco de
dados recém criado, é necessário executar a função
Search::OpenFTS::Index->init
para configurar o banco de dados, de acordo com as necessidades do sistema e do
usuário. No Quadro 7 é mostrado um fragmento do código de um script que usa esta
função.
32
QUADRO 7 – Fragmento do script initi.pl
my $idx=Search::OpenFTS::Index->init(
dbi=>$dbi,
txttid=>'txt.tid',
use_index_table=>1,
txtidx_field=>'fts_index',
numbergroup=>10,
ignore_id_index=>[ qw( 7 13 14 12 23 ) ],
ignore_headline=>[ qw(13 15 16 17 5) ],
map=>'{ \'19\'=>[1], 18=>[1], 8=>[1], 7=>[1], 6=>[1],
5=>[1], 4=>[1],}',
dict=>[
'Search::OpenFTS::Dict::PorterEng',
'Search::OpenFTS::Dict::UnknownDict',
]
);
Fonte: (OPENFTS, 2002).
Vários parâmetros são passados à função Search::OpenFTS::Index->init, os
quais são descritos abaixo:
• dbi=>$dbi - especifica o nome do banco de dados utilizado ($dbi);
• txttid=>'txt.tid' – identifica o nome da tabela de cadastro de documentos
e sua chave primária ('txt.tid');
• use_index_table=>1 - informa se vão ser usadas as tabelas de índice (1) ou
não (0);
• txtidx_field=>'fts_index'
–
indica
o
nome
do
campo
('fts_index'), do tipo txtidx, onde serão armazenados os lexemas extraídos
do documento pelo parser;
• numbergroup=>10 – indica o número de tabelas de índices a serem criadas;
• ignore_id_index=>[ qw( 7 13 14 12 23 ) ] - informa o tipo de
lexemas ignorados pelo algoritmo de indexação;
• ignore_headline=>[ qw(13 15 16 17 5) ] – informa os tipos de
lexemas que serão ignorados quando se processa uma requisição de consulta;
• map=>'{ \'19\'=>[1], 18=>[1], 8=>[1], 7=>[1], 6=>[1],
5=>[1], 4=>[1], }' - mapeia os lexemas que serão indexados por cada
dicionário, por exemplo, 6=>[1] indica que os lexemas do tipo 6 (FURL)serão
processados pelo dicionário 1, no caso UnknownDict. Este parâmetro serve para
33
otimizar a busca/indexação e suporte a multiplas línguas;
• dict=>[Search::OpenFTS::Dict::PorterEng',
'Search::OpenFTS::Dict::UnknownDict']) – Indica os dicionários a
serem usados (PorterEng e UnknowDict).
Todos os parâmetros da configuração são armazenados na tabela
fts_conf, descrita na seção 3.2.3.3.
Pode-se criar mais de uma instância19 do OpenFTS, passando um parâmetro
juntamente com a função de inicialização. Este parâmetro deve estar entre os
caracteres de “a” até “z”. Por exemplo, para criar a instância “a” seria utilizado o
seguinte comando: ./init.pl [nome do banco]:a. Com este comando as
tabelas criadas terão o prefixo “a_” no seu nome (a_txt,a_index1,
a_fts_conf, a_fts_unknown_lexem).
A divisão da base de dados em instâncias serve, principalmente, para
organizar e otimizar o processo de indexação e de busca, pois uma busca pode se
restringir apenas a uma instância desejada.
A função de inicialização cria, também, a tabela fts_unknown_lexem,
onde são armazenados os lexemas não reconhecidos pelo parser durante o processo de
indexação.
4.2. Indexando documentos
Após inicializar o banco de dados, os documentos já podem ser indexados. A
indexação é feita basicamente passando para função
Search::OpenFTS::Index->index
a seqüência de lexemas extraídos pelo parser.
Como exemplo, a documentação do OpenFTS apresenta o script
index.pl, que pode ser utilizado para fazer a indexação:
perl index.pl < [nome do(s) arquivo(s) a ser(em) indexados]
19
Instância significa ter várias cópias do mesmo banco de dados, usadas para fins diferentes (p. ex. jurídico e
médico).
34
4.3. Pesquisando documentos indexados
Quando uma requisição de consulta é recebida (função de busca), está é
convertida pelo parser em uma cadeia de lexemas e, então, é construída uma SQL de
consulta.
Por exemplo, para se pesquisar a palavra “uniplac” é gerado o script de
consulta mostrado no Quadro 8.
QUADRO 8 – Fragmento do script contendo a instrução SQL gerada para uma requisição de consulta.
SELECT
txt.tid,
relkov( 1.0, 0.01, 0, txt.tid, txt.tid % 10 + 1 ,
'{"uniplac"}' ) as pos
FROM
txt
WHERE
txt.fts_index @@ '\'uniplac\''
ORDER BY pos desc
Uma pequena explicação desta instrução é :
• SELECT
txt.tid,
relkov( 1.0, 0.01, 0, txt.tid, txt.tid % 10 + 1 ,
'{"uniplac"}' ) as pos
indica que serão selecionados o campo tid da tabela txt e o resultado da
função relor estará na variável pos;
• A função
relkov(1.0,
0.01,
0,
txt.tid,
txt.tid
%
10
+
1
,
'{"uniplac"}'), é usada para o ranqueamento dos resultados da busca:
− os primeiros dois argumentos denotam os pesos para palavras encontradas no
título20 e no corpo do documento, respectivamente (1.0, 0.01);
− o terceiro argumento é o prefixo que denota que instância do OpenFTS usar (0);
− o quarto argumento é o nome da tabela onde estão cadastrados os documentos e
20
Título – é definido como as primeiras linhas do documento.
35
sua chave primária (txt.tid);
− o quinto argumento é o número da tabela do índice (txt.tid % 10 + 1) a ser
usada, equivalente a expressão: tid mod21 10 + 1;
− por último, o sexto argumento corresponde à cadeia de lexemas a ser pesquisada,
no caso deste exemplo, apenas o lexema {"uniplac"} é solicitado.
• WHERE
txt.fts_index @@ '\'uniplac\'' – informa que a tabela será
filtrada, ou seja, somente serão apresentados os registros que contiverem no campo
fts_index o lexema desejado;
• ORDER BY pos desc – informa que os resultado serão apresentados em ordem
decrescente pelo valor do campo pos.
4.4. Estatística de proximidade
É a função relkov, que fornece estatísticas sobre o documento, de acordo
com as palavras pesquisadas. Esta função é implementada mantendo-se informações
sobre as coordenadas de cada ocorrência de um lexema em um documento indexado.
O valor de um documento é dinâmico, ou seja, a cada nova consulta
realizada, os documentos resultantes tem seu valor calculado em função dos lexemas
pesquisados. Este valor é calculado seguindo a fórmula:
• para cada palavra encontrada no documento é atribuído um valor;
• se a palavra for encontrada no título do documento este valor é 1; e,
• se encontrada no corpo do documento, o valor atribuído é 0,01.
O resultado do cálculo efetuado em cada documento é utilizado pelo
OpenFTS para fazer a classificação dos resultados, ou seja, o ranqueamento (ranking).
4.5. Atualizando documentos indexados
O OpenFTS não possui funções de atualização e exclusão de documentos
21
Mod - função que retorna o resto de uma divisão.
36
indexados, ou seja, se um documento original é alterado, não é possível apenas
atualizar no OpenFTS as mudanças deste documento.
A solução encontrada foi a exclusão do documento e suas respectivas entradas
de índices. Toda vez que o usuário deseja atualizar um documento que já tenha sido
indexado deve ser feita a exclusão do documento original da base de dados do
OpenFTS para, em seguida, indexar o documento atualizado, que receberá um novo
identificador.
Um fragmento do script construído para exclusão de documentos é mostrado no
Quadro 9.
QUADRO 9 – Fragmento do script delete.pl
my $ftsi=Search::OpenFTS::index->new(..);
$ftsi->delete( $iddoc_for_delete );
$dbh->do("delete from txt where txt.tid=$iddoc_for_delete;");
• my $ftsi=Search::OpenFTS::index->new(..); indica que a variável
$ftsi vai ser o ponto de acesso às funções do OpenFTS;
• $ftsi->delete( $iddoc_for_delete ); indica a exclusão dos índices
relacionados com o documento a ser excluído;
• $dbh->do("delete from txt where txt.tid=
$iddoc_for_delete;"); exclui o documento da tabela txt.
4.6. Conclusão
O conhecimento das funções apresentado neste capítulo é de fundamental
importância para o uso correto do OpenFTS.
Um dos fatores para escolha do OpenFTS como ferramenta de indexação
para o Projeto OpenGED foi por ele ser razoavelmente fácil de utilizar, possuir
mecanismo de otimização, como a possibilidade de dividir a base de dados em várias
instâncias, possibilitando assim indexação e pesquisa em menor tempo.
Porém, descrever o funcionamento de cada operação não foi uma tarefa fácil,
uma vez que estas informações não são detalhadas na documentação.
37
Para poder redigir este capítulo, a equipe precisou realizar vários testes,
procurando entender o que o OpenFTS fazia a cada comando executado. Novamente o
pouco conhecimento sobre o sistema operacional GNU/Linux, somado ao banco de
dados PostgreSQL e à linguagem Perl, foram os principais obstáculos encontrados.
Uma parte considerável das dúvidas e detalhes de funcionamento do programa foi
descoberta pela interação com os criadores do OpenFTS (Oleg Bartunov, Neophytos
Demetriou, Teodor Sigaev e Daniel Wickstram), através da lista de discussão
disponível no site do projeto, em http://openfts.sourceforge.net.
Com certeza, não foi possível estudar todo o potencial do OpenFTS, mas,
procurou-se esclarecer os pontos básicos relacionados a inicialização do banco de
dados e à indexação e pesquisa de documentos. A exclusão de documentos é um
exemplo de solução obtida através da lista de discussão do OpenFTS.
Ainda, a equipe acredita que a tradução dos capítulo 3 e 4 para a língua
inglesa representarão uma excelente contribuição para o site do OpenFTS, uma vez
que contém informações importantes para os usuários iniciantes.
5. ANÁLISE DO FUNCIONAMENTO DO OPENFTS
Neste capítulo serão mostrados os resultado dos testes feitos com o
OpenFTS, onde se procurou observar a velocidade de indexação e recuperação de
informações, o espaço utilizado tanto pelos arquivos originais em formato PDF, como
pelos arquivos texto gerados a partir dos originais.
5.1. Definição da base de dados
Para os testes foram utilizados arquivos no formato PDF. Em CENCI (2002),
são mostradas várias vantagens na utilização deste formato de arquivo, como
segurança, arquivos com tamanho reduzido, cópia fiel do documento original, entre
outras. Como o OpenFTS não trabalha diretamente com arquivos PDF, foi necessário
convertê-los para arquivos do tipo texto. Utilizou-se para fazer esta conversão o
programa pdftotext que é distribuído sob a licença GPL, juntamente com o pacote
XPDF22.
Os documentos utilizados foram os Trabalhos de Conclusão do Curso de
Informática. Ao todo, 37 trabalhos foram convertidos de sua forma original para
arquivos PDF, utilizando-se a ferramenta Acrobat Distiller disponibilizada pela
UNIPLAC.
O tamanho médio de cada arquivo no formato PDF ficou em 1 MB, sendo
que, no formato original (.DOC ou .SDW) o tamanho médio era de 3,27 MB. Ainda,
cada documento possuía aproximadamente 11 mil palavras. Os arquivos texto gerados
através do pdftotext, ocupam em média um espaço de 120 KB, esta redução se deve
22
Maiores informações sobre o XPDF podem ser encontradas em http://www.foolabs.com/xpdf/.
39
principalmente pelo foto que nos arquivos texto não são armazenadas as imagens e
configuração existentes no formato PDF.
5.2. Inicializando o banco de dados
Definiu-se o nome do banco de dados como Teste_OpenGED, então foi
executado o script init.pl para criação das tabelas, conforme mostrado na Figura 6.
Este processo não foi monitorado, pois, será executado apenas uma vez.
Foi utilizado o dicionário padrão instalado juntamente com o OpenFTS, o qual
é otimizado para a língua inglesa, mas consegue indexar satisfatoriamente documentos
em outras línguas.
A Figura 6 mostra a inicialização do banco de dados onde, na primeira linha,
mostra a chamado do script init.pl e, nas demais linhas, mostra mensagens de
sucesso na criação das tabelas, índices e chaves primárias.
FIGURA 6 – Exemplo da execução do script init.pl.
5.3. Indexando documentos
Após a inicialização da base de dados, passou-se para a etapa de indexação dos
documentos. Para analisar os dados armazenados nas tabelas, antes de indexar todos os
arquivos foi indexado apenas um documento.
Este documento, no formato original, continha 11.210 palavras. No processo de
indexação foram eliminadas as stop words e as palavras repetidas, restando apenas
40
2.184 lexemas para indexar. A Figura 7 mostra uma instrução SQL que apresenta o
número total de lexemas indexados na tabela index2 (que é a tabela onde foram
armazenados os lexemas indexados para este documento).
FIGURA 7: Número de lexemas indexados.
Na Figura 8 é mostrada a chamada ao script que dispara a indexação, bem
como, a confirmação da indexação de cada arquivo. Ao final, é apresentado o tempo
total de processamento para indexar os 37 arquivos, que foi de 66,59 segundos, ou
seja, um tempo bastante pequeno considerando a quantidade de informação. Em
média, o tempo de indexação de cada documento ficou em 1,8 segundos.
41
FIGURA 8: Exemplo da execução do script index.pl.
5.4. Analisando a pesquisa
Nesta seção será mostrado o resultado de uma pesquisa simples.
Na Figura 9 é mostrada a execução do script search.pl, onde foi passado
como lexema de pesquisa a palavra cluster. O tempo para o OpenFTS responder foi de
apenas seis centésimos de segundo, resultando em 8 documentos encontrados. Na
resposta são apresentados, ainda, os id dos documentos (código de identificação de
cada documento na tabela txt).
42
FIGURA 9: Exemplo da execução do script search.pl.
Em uma nova pesquisa, a palavra turismo foi pesquisada, conforme mostrado
na Figura 10. Nota-se que o tempo para a resposta foi o de cinco centésimos de
segundo, praticamente o mesmo da pesquisa anterior, retornando três documentos.
FIGURA 10: Exemplo da execução do script search.pl.
Executando uma pesquisa um pouco mais complexa, foram passados como
parâmetros de consulta as palavras UNIVERSIDADE e orientador. Também foi
solicitado que o OpenFTS apresentasse partes do texto encontrado, conforme é
apresentado na Figura 11. O tempo de resposta foi de quinze centésimos de segundo.
Neste teste, nota-se que a opção de mostrar partes do texto na tela faz com que o
sistema tenha um tempo de resposta um pouco maior. Isto se deve ao fato dele ter que
montar a parte do texto a ser mostrada, ou seja, é necessário encontrar algumas
palavras anteriores e posteriores àquelas pesquisadas. Este recurso, embora tenha um
tempo de resposta maior que as pesquisas anteriores, é bastante útil uma vez que
auxilia na filtragem dos documentos.
43
FIGURA 11: Exemplo da execução do script search.pl.
No Quadro 10 é mostrado alguns resultados do script de pesquisa do
OpenFTS, usando por base a chamada ./search.pl
–p
Teste_OpenGED
[palavra1,palavra2,...,palavraN]. Através deste quadro, pode-se observar
que o OpenFTS tem boa performance para consultas nos dados indexados e que pode
suprir todas as necessidades do OpenGED
44
QUADRO 10: Resultados obtidos pelo script de consulta do OpenFTS.
Palavras pesquisadas
Tempo de
Nº de documentos
Documentos encontrados
resposta
encontrados
(segundos)
Universidade, Lages,
orientador
0,08
37
1,2,3,4,5,6,7,8,9,10,11,
12,13,14,15,16,17,18,19,20,
21,22,23,24,25,26,27,28,29,
30,31,32,33,34,35,36,37
Processador, memória
0,10
1
12
Software, Hardware
0,08
23
19,26,30,6,15,35,
9,8,10,3,23,24,31,28,21,
11,19,2,27,5,16,14,32
Redes, cabeamento
0,05
1
28
Informática, educação
0,07
16
23,19,4,7,33,14,15,32,22,1,2,
29,6,25,31,20
Informática, agricultura
0,06
1
1
Java, delphi,
ferramentas
0,05
6
14,6,31,36,11,27
Software, legislação
0,06
5
26,19,16,35,15
Processamento,
paralelo
0,05
3
8,26,29
Processamento,
distribuído
0,05
1
6
ATM, Ethernet
0,05
4
18,35,32,28
Automóvel,
alimentação
0,04
0
--
5.5. Conclusão
Neste capítulo foram mostrados alguns testes feitos com o OpenFTS, o que
mostrou que a ferramenta tem uma boa performance, tanto na indexação como na
busca de informações.
A preocupação com o desempenho do OpenFTS é justificada, por ele ser a
ferramenta de busca e indexação que vai ser utilizada no Projeto OpenGED, ou seja,
ele será o mecanismo que vai fornecer ao Projeto um diferencial no que diz respeito ao
acesso às informações.
A velocidade na indexação é de grande importância, pois, um sistema que tem
45
um tempo muito alto de indexação certamente vai ser cansativo para o usuário final,
ou mesmo, se for necessário indexar uma grande quantidade de documentos, este
tempo poderá comprometer o desempenho de um sistema de GED. No OpenFTS este
tempo é bastante reduzido: para indexar um documento com mais de 11.000 palavras
ele levou menos de 2 segundos.
A recuperação de informações é hoje a principal impulsionadora dos sistemas
de GED, ou seja, o grande interesse de uma empresa é ter suas informações
disponíveis no menor tempo possível, podendo, então, uma ferramenta de indexação
ser agregada a outras funcionalidades de um sistema de GED, auxiliando até mesmo
em processos de grande importância para uma empresa como, auditorias e tomadas de
decisões.
Em todos os testes feitos com o OpenFTS, o tempo para encontrar palavras nos
documentos indexados foi muito pequeno, portanto, pode-se concluir que o OpenFTS
irá suprir perfeitamente a necessidade do Projeto OpenGED, como ferramenta de
busca e indexação de texto.
No Projeto OpenGED, a equipe optou pelo armazenamento de dois arquivos: o
original em formato PDF e outro em formato texto. Esta foi uma maneira de garantir a
integridade do documento original, pois, toda parte de indexação e consulta será feita a
partir do documento texto. Nota-se que este novo arquivo texto terá um tamanho bem
menor que o arquivo original. Portanto, está técnica não acarretará em um custo
elevado para o armazenamento de documentos.
6. CONSIDERAÇÕES FINAIS
O Projeto OpenGED nasceu da idéia de oferecer às instituições de ensino e
às pequenas empresas a possibilidade de utilizar ferramentas de GED, hoje largamente
utilizadas por grandes empresas.
Sem dúvida, o Projeto trouxe mais consciência sobre software livre, pois, a
distribuição sem custo não é a única vantagem destes programas. O Projeto OpenGED
só pôde ser concretizado pela existência dos softwares livres, distribuídos com seus
códigos fontes. Isto possibilitou à equipe do Projeto alterar e adaptar estes programas
conforme a necessidade. O OpenGED é totalmente adepto à filosofia de software livre
e será disponibilizado sob a licença GPL.
Um estudo sobre Gerenciamento Eletrônico de Documentos foi feito antes de
se dividir os trabalhos. Este estudo possibilitou o conhecimento das tecnologias que
envolvem o GED, que vão deste a digitalização de documentos até a recuperação das
informações. Além disso, possibilitou o amadurecimento das idéias para definição do
Projeto e possíveis problemas, destacando-se como encontrar uma solução para a
busca textual, quesito imprescindível nos sistemas de GED, e como desenvolver uma
aplicação prática para aplicar os conhecimentos adquiridos.
Possibilitou, também, o conhecimento sobre a realidade dos sistemas de
GED no Brasil e no mundo. Hoje, eles têm destacada importância nas grandes
empresas e nos grandes sistemas de informação, chamados ERPs, que já se integram
aos sistemas de GED.
A equipe do Projeto dividiu-se em três trabalhos: um estudo teórico sobre os
sistemas de GED, um estudo sobre indexação de documentos texto, que é o presente
trabalho e o desenvolvimento de uma aplicação prática.
47
A motivação para um estudo sobre indexação de documentos justifica-se por
esta ser o “motor” do GED. Além de ser um estudo bastante interessante, pois envolve
várias matérias vistas no decorrer do curso, como: algoritmos, técnicas de
programação, estruturas de dados, sistemas operacionais, redes de computadores,
engenharia de software, entre outras.
Inicialmente um estudo sobre estruturas de armazenamento foi feito para,
através do embasamento teórico, optar por uma estrutura que pudesse suprir todas as
necessidades do Projeto. Neste estudo encontraram-se algumas dificuldades, pois, a
maioria dos materiais estava na língua inglesa ou até mesmo em outras línguas, por
exemplo, o russo.
Para definição de uma ferramenta de indexação no início havia duas
alternativas: implementar uma ferramenta ou encontrar uma proposta que fosse
distribuída sob a licença GPL. Após varias pesquisas, foi encontrado o OpenFTS e,
então, optou-se pela segunda alternativa.
O OpenFTS é um sistema desenvolvido na Rússia, que agrega ao
PostgreSQL funções para trabalhar especificamente com textos. O OpenFTS
implementa uma árvore RD-Tree para fazer a indexação de documentos, por causa
disso, no capítulo 2 fez-se uma descrição mais detalhada apenas desta estrutura.
A equipe teve um grande trabalho para a instalação e configuração do
software, sendo a utilização do sistema operacional GNU/Linux um obstáculo.
Nos testes realizados com o OpenFTS, o desempenho do mesmo agradou
bastante, se comparando aos sistemas de indexação de soluções de GED comerciais,
que até então pareciam inalcançáveis.
Este trabalho visa contribuir tanto para o Projeto OpenGED como para o
crescimento de soluções de software livre. Como trabalhos futuros, ficam as sugestões:
construção de novos parsers, que poderiam ser utilizados no reconhecimento de outros
tipos de lexemas, trazendo assim uma possível melhoria de performance para
aplicações específicas; construção de novos dicionários para aplicações em áreas
específicas, como por exemplo, a construção de um dicionário que reconhecesse
termos relacionados à área de medicina ou área musical, entre outras.
REFERÊNCIAS BIBLIOGRÁFICAS
AIIM. Avant Imaging & Information Management Inc. Organização internacional
que oferece soluções para GED, workflow, impressão etc. Disponível em:
<http://www.aiim.com.br>. Acesso em: 02 mar. 2002.
CENADEM. Cenadem.com.br - O portal de GED do Brasil. Site desenvolvido pelo
Centro Nacional de Desenvolvimento do Gerenciamento da Informação.
Apresenta informações gerais sobre GED. Disponível em:
<http://www.cenadem.com.br>. Acessado em: 22 jun. 2002.
CENCI, J. A. Gerenciamento Eletrônico de Documentos: um estudo teórico para
definição do Projeto OpenGED. 2002. Trabalho de Conclusão de Curso
(Bacharelado em Informática) – Departamento de Ciência Exatas e Tecnológicas,
Universidade do Planalto Catarinense, Lages.
CPAN. Comprehensive Perl Archive Network. Disponibiliza módulos para a
linguagem Perl. Disponível em: <http://www.cpan.org>. Acessado em: 20 ago. 2002.
FSF. Free Software Foundation. Apresenta a filosofia do software livre e a licença
GPL. Disponível em: <http://www.fsf.org> . Acessado em: 01 abr. 2002.
GIST. The GiST Indexing Project. Apresenta o projeto GiST, dedicado ao estudo das
características de engenharia e matemática, associadas à indexação de grandes
quantidades de objetos complexos (por exemplo, um documento de texto). Disponível
em: <http://gist.cs.berkeley.edu/>. Acessado em: 12 ago. 2002.
GLIMPSE. Sistema de Pesquisa.Apresenta o site oficial do sistema de indexação e
pesquisa em arquivos textos. Disponível em: <http://www.webglimpse.net>. Acessado
em: 10 jun. 2002.
GREENSPUN, Philip. Chapter 12: Database Management Systems. Descreve
características de sistemas de banco de dados e exemplos de implementação de
sistemas de busca. Disponível em <http://philip.greenspun.com/panda/databaseschoosing.html>. Acessado em 05 Set. 2002.
HELLERSTEIN, J. M.; PFEFFER, A. The RD-Tree: an index struct for sets. 2000.
Disponível em: <http://db.cs.berkeley.edu/papers/UW-CS-TR-1252.pdf>. Acessado
em: 26 mai. 2002.
MAMBER, U. Glimpse: A Tool to Search Through Entire File System. 1993.
Apresenta um estudo sobre o Glimpse. Disponível em
49
<ftp://ftp.cs.arizona.edu/reports/1993/TR93-34.os.Z>. Acessado em: 12 out. 2002.
NEUBERT M. S. Recuperação aproximada de informações em textos comprimidos e
indexados. In: SEMANA DE PÓS-GRADUAÇÃO, 3., 1999, Belo Horizonte. Anais ...
Belo Horizonte: UFMG, 1999. Disponível em:
<http://www.dcc.ufmg.br/pos/html/spg99/anais/marden/marden.html>. Acessado em:
01 abr. 2002.
OLIVEIRA FILHO, F. M. Biblioteca On-line para Trabalhos de Conclusão de
Curso: uma aplicação desenvolvida sob o Projeto OpenGED. 2002. Trabalho de
Conclusão de Curso (Bacharelado em Informática) – Departamento de Ciências Exatas
e Tecnológicas, Universidade do Planalto Catarinense, Lages. (Em andamento).
OPENFTS. Open Source Full Text Search Engine. Apresenta o site oficial do
sistema de indexação e busca textual.Disponível em: <http://openfts.sourceforge.net>.
Acessado em: 01 mai. 2002.
POSTGRESQL. Sistema Gerenciador de Banco de Dados Objeto-Relacional.
Apresenta o site oficial do PostgreSQL. Disponível em: <http://postgres.org>.
Acessado em: 26 mai. 2002.
SILBERSCHATZ, A.; KORTH, H. F.; SUDARSHAN, S. Sistema de Banco de
Dados.3.ed. Trad.Marilia G. Pinheiro e Claudio C. Canhette. São Paulo: Makron
Books, 1999. 778 p.
SILVA, E. B. da. Uma Ferramenta de Auxílio à Busca e Recuperação de
Documentos. Disponível em:
<http://www.cos.ufrj.br/~bezerra/publications/pf/PF.html>. Acessado em: 10 mai.
2002.
SNOWBALL.Snowball. Apresenta o projeto Snowball, que é uma linguagem de
processamento de texto usada na recuperação de informações. Disponível em:
<http://snowball.tartarus.org>. Acessado em: 05 Nov. 2002.
WALL, L.; CHRISTIANSEN, T.; ORWANT, J. Programação Perl. 3. ed. Trad.
Daniel Vieira. Rio de Janeiro: Campus, 2001. 1084 p.
WIVES, L. K. Tecnologia de Descoberta de Conhecimentos em Textos Aplicada a
Inteligência Competitiva. 2002. (Exame de Qualificação) – Programa de PósGraduação em Computação, Universidade Federal do Rio Grande do Sul. Disponível
em: <http://www.inf.ufrgs.br/~wives/publicacoes/eq.pdf>. Acessado em: 14 set. 2002.
Download