Download PDF
ads:
FUNDAÇÃO EDUCACIONAL EDSON QUEIROZ
UNIVERSIDADE DE FORTALEZA – UNIFOR
Jansley Nobre da Fonsêca
UM MODELO DE INDEXAÇÃO SEMÂNTICA
PARA INTRANET
Fortaleza
Junho/2002
ads:
Livros Grátis
http://www.livrosgratis.com.br
Milhares de livros grátis para download.
FUNDAÇÃO EDUCACIONAL EDSON QUEIROZ
UNIVERSIDADE DE FORTALEZA – UNIFOR
Jansley Nobre da Fonsêca
UM MODELO DE INDEXAÇÃO SEMÂNTICA
PARA INTRANET
Dissertação apresentada ao Curso de Mestrado
em Informática Aplicada da Universidade de
Fortaleza como requisito para obtenção de
Título de Mestre em Informática
Orientador: Prof. Dr. Pedro Porfírio Muniz Farias
Fortaleza
Junho/2002
ads:
UM MODELO DE INDEXAÇÃO SEMÂNTICA
PARA INTRANET
BANCA EXAMINADORA:
Do Curso
Prof. Orientador Dr. Pedro Porfírio Muniz Farias
Prof. Dr. José Bezerra da Silva Filho
Prof. Dr. João José Vasco Furtado
Convidado
Prof. Dr. Cláudio César Sá (UDESC – SC)
iv
À minha família que me incentivou desde o início,
sempre acreditando na minha capacidade e sempre me
fornecendo a tranquilidade necessária nos momentos
difíceis dessa exaustiva e recompensante caminhada.
v
AGRADECIMENTOS
Agradeço primeiramente a Deus por me proporcionar condições para tornar esse sonho uma
realidade. “Senhor, fazei de mim um instrumento para os seus desígnios.”
Agradecimentos sinceros:
Aos meus pais que me concederam o maior bem que eu tenho: a vida.
Aos meus irmãos que procuram enxergar em mim uma inspiração de sucesso.
Ao meu falecido tio Edésio que teria muita honra em participar desse momento.
Ao meu orientador por me mostrar a melhor forma de percorrer o caminho.
Ao coordenador do mestrado que sempre acreditou no nosso potencial e que nunca pára de
nos transmitir força e coragem.
Aos demais professores do mestrado pelo exemplo que representam.
Aos colegas de turma pela união e esperança.
Aos colegas de trabalho que sempre estiveram a disposição para prestar qualquer apoio.
A todos aqueles que acreditaram e que não acreditaram em mim.
À Universidade de Fortaleza pela sua estrutura.
Ao Tribunal Regional Eleitoral do Ceará – TRE-CE pelas facilidades que me dispôs.
Ao III Seminário de Informática da Justiça Eleitoral – Bento Gonçalves – RS – junho/2001,
que me proporciou uma oportunidade de apresentar, para todos os TREs do Brasil e para o
Tribunal Superior Eleitoral – TSE, o programa protótipo descrito nesta publicação.
Enfim, a todos que de uma forma direta ou indireta contribuíram para o sucesso dessa
caminhada.
Muito obrigado.
vi
Para refletir...
THE GOLDEN AGE OF LEISURE
Whatever happend to the promises?
The golden age of leisure is not here.
We were promised more free time,
We were promised less work.
We work harder and longer than ever before,
We are more insecure,
We worry about our jobs,
We have all this tecnology,
Yet we use it to work longer.
It does not make us stronger.
There is no pleasure
In the golden age of leisure.
(By Richard Murch, in Intelligent Software Agents)
Tradução...
OS ANOS DOURADOS DO TEMPO LIVRE
O que aconteceu às promessas?
Os anos dourados do tempo livre não estão aqui.
Prometeram-nos mais tempo livre,
Prometeram-nos menos trabalho.
Trabalhamos pesado e por muito mais tempo do que antes,
Estamos mais inseguros,
Nos preocupamos sobre nossos empregos,
Temos toda essa tecnologia,
Mesmo assim a usamos para trabalhar por mais tempo.
Ela não nos faz mais fortes.
Não existe prazer
Nos anos dourados do tempo livre.
(Traduzido por Jansley Fonsêca)
vii
ABSTRACT
This work presents a study about information search in intranet sites, using semantic
indexing and intelligent agent tecnology concepts.
The necessity of major users, in intranets, for information search tools that contain
reliable catalogs, easy to look their terms up, is the main question responsible for this study.
Details about the modern Web information indexing tecnology are described to make an
analogy study with the indexing model proposed.
Initiating this work, the benefits and limitations of semantic indexing are showed to
justify why this kind of indexing was choiced to insert the links in catalog created.
A special chapter is dedicated to study the intelligent agent tecnology, where the state of
the art is analyzed. A software agent prototype was developed to prove the efficiency of this
tecnology in information search.
All the stages to construct the semantic index by software agent, as well as the way to
look sites up in the index, are showed too. The objective is to let all researchers in this area to
know the implementation of the studied model.
Ending this work, there is a description of how the prototype was tested, of what results
were achieved and, finally, what conclusions were obtained.
viii
RESUMO
Este trabalho apresenta um estudo sobre busca de informação em sites de intranet,
utilizando conceitos de indexação semântica e da tecnologia de agentes inteligentes.
A verificação da necessidade da maioria dos usuários, em redes intranet, por
ferramentas de busca de informação que contenham catálogos confiáveis e fáceis de consultar
é encarada como a questão principal responsável pela realização desse estudo.
Detalhes sobre a atual tecnologia de indexação de informação na Web são apresentados
para que, a partir dos mesmos, se possa fazer uma analogia com o modelo de indexação
proposto.
Iniciando o trabalho, os benefícios e as limitações da indexação semântica são
esclarecidos para justificar o porque da sua escolha e da sua aplicabilidade nesse caso.
Um capítulo especial é dedicado ao estudo da tecnologia de agentes inteligentes, no qual
é realizado um levantamento completo sobre o estado da arte em que se encontra seu atual
desenvolvimento. Baseando-se nesse levantamento, está demonstrada a criação de um
protótipo de programa agente, utilizado para gerar subsídios que comprovem a eficiência
dessa tecnologia na busca de informação.
Todas as etapas para a construção de um índice semântico pelo programa agente, bem
como a forma de se consultar o índice, também estão descritas. O objetivo é permitir que
outros pesquisadores conheçam a forma de implementação do modelo estudado.
Fechando o trabalho, existe uma descrição de como o protótipo foi testado, de quais
foram os resultados alcançados e, finalmente, de quais foram as conclusões obtidas.
ix
SUMÁRIO
1 INTRODUÇÃO
1.1 Considerações Gerais 15
1.1.1 Alguns Sites de Busca na Web 18
1.2 Particularidades da Busca na Intranet 19
1.3 Ontologia 20
1.3.1 Representação de Ontologias em RDF 20
1.4 A Tecnologia de Agentes Inteligentes 21
1.5 Indexação Semântica 22
1.6 Web Semântica 23
1.7 Detalhamento do Problema Estudado 24
1.8 Objetivos 25
1.8.1 Objetivo Geral 25
1.8.2 Objetivos Específicos 25
1.9 Abrangência do Trabalho 25
1.10 Estrutura do Trabalho 26
2 TECNOLOGIA DE AGENTES - ESTADO DA ARTE
2.1 O Surgimento de Agentes 28
2.2 A Necessidade de Agentes 29
2.3 Definição de Agentes 31
2.4 Agência (Sociabilidade) 35
2.5 Modelo de Agentes 37
2.6 Taxonomia de Agentes 39
2.7 O Desenvolvimento da Tecnologia de Agentes Inteligentes 41
2.8 Grau de Realidade da Aplicação dos Agentes 43
2.9 Armadilhas no Desenvolvimento de Programas Agentes 43
2.10 Áreas Relacionadas 46
2.11 Aplicações Gerais de Agentes 47
2.12 Exemplos de Agentes 48
2.13 Algumas Barreiras para Aceitação de Agentes 50
2.14 Benefícios da Tecnologia de Agentes 51
x
3 INDEXAÇÃO DE HIPERTEXTOS – CONCEITOS GERAIS
3.1 Apresentação 53
3.2 Navegando em Hipertextos 53
3.2.1 Navegação Semântica 54
3.3 Busca de Informação em Hipertextos 55
3.3.1 Consulta por Palavra-chave 56
3.3.2 Consulta por Casamento de Padrões 57
3.4 Desafios na Indexação de Hipertextos 57
3.5 A Técnica de Indexação “Arquivos Invertidos” 59
3.5.1 Adaptando ao Índice de Hyperlinks 61
3.6 Percorrendo os Hyperlinks durante a Indexação 61
3.7 Definindo um Ranking para Consultar o Índice 62
3.7.1 Inserindo Semântica na Definição do Ranking 63
3.8 Formas de Indexação 63
3.8.1 Indexação Centralizada 64
3.8.2 Indexação Descentralizada 65
4 PROPOSTA DE INDEXAÇÃO SEMÂNTICA
4.1 Modelo Proposto 67
4.2 Metodologia Adotada 67
4.3 Composição das Partes 68
4.3.1 Criação de Um Índice Semântico 69
4.3.1.1 Definição dos Assuntos 71
4.3.1.2 Identificação dos Assuntos nas Páginas 72
4.3.1.3 Cálculo da Probabilidade 74
4.3.1.4 Inserção do Registro no Índice 75
4.3.2 Verificação de Endereços 77
4.3.3 Manutenção do Índice Existente 78
4.3.4 Exibição dos Resultados Encontrados 79
4.3.5 Interação com o Usuário 81
4.4 Integração das Partes 82
4.5 Recursos Utilizados na Implementação 83
4.6 Protótipo Desenvolvido 83
4.7 Limitações do Protótipo 85
xi
5 ESTUDO DE CASO
5.1 Contextualização 87
5.2 Perfil do Problema 88
5.3 Solução Proposta 89
5.4 Benefícios a serem Alcançados 90
5.5 Testando o Protótipo Desenvolvido 91
5.6 Metodologia para Aplicação dos Testes 91
5.7 Amostragem 93
5.8 Relevância dos Testes 93
5.9 Aplicação dos Testes 94
5.10 Avaliação dos Usuários 95
5.11 Tabulação dos Resultados 96
6 CONCLUSÕES E TRABALHOS FUTUROS
6.1 Resumo da Proposta Apresentada 99
6.2 A Implementação do Modelo 100
6.3 O Diferencial da Indexação Semântica 100
6.4 Análise dos Resultados Alcançados 101
6.5 Trabalhos Futuros 101
BIBLIOGRAFIA 104
ANEXO 1: Ontologia 109
ANEXO 2: Modelo e Sintaxe RDF 113
ANEXO 3: Fontes do Programa Agente 123
QUESTIONÁRIO 1: Aplicado Antes do Experimento 165
QUESTIONÁRIO 2: Aplicado Após o Experimento 167
xii
LISTA DE ILUSTRAÇÕES
FIGURAS
1.1.1 Acesso à Internet 15
1.1.2 Processo de realização de uma busca 17
1.1.3 Busca na Web – Altavista 18
1.1.4 Busca na Web – Yahoo! 19
2.3 Tipologia de agentes 35
2.4.1 Escopo de agentes inteligentes 36
2.4.2 Limite de agência inteligente 37
2.5 Modelo de agente 38
2.6.1 Taxonomia de agentes 39
2.6.2 Classificação de agentes de informação 40
2.10 Campos influenciando agentes inteligentes 47
3.1 Navegação semântica 55
3.2 Exemplificação da técnica “arquivo invertido” 60
3.3 Adaptação da técnica “arquivo invertido” 61
3.4 Arquitetura de indexação centralizada 64
4.3.1 Estrutura do Índice 71
4.3.2 Exemplo do algoritmo de busca em largura 74
4.3.4 Modelo de layout para exibição de resultados 80
4.4 Integração das partes do programa agente 82
4.6.1 Tela inicial do protótipo 84
4.6.2 Tela de resultados encontrados 84
4.6.3 Tela de solicitação de exibição de mais resultados 85
5.1 Hierarquia da Justiça Eleitoral 87
TABELAS
2.3 Características dos agentes 34
2.6 Taxonomia de agentes para usuário final 40
2.10 POO x POA 46
2.11 Aplicações gerais de agentes 48
2.14 Benefícios dos agentes 51
xiii
4.3.1 Probabilidade de encontro de informação 75
5.1 Respostas Questionário1 96
5.2 Respostas Questionário2 97
GLOSSÁRIO
Background – Modo de execução interna de um programa, transparente ao usuário;
Browser – Programa navegador para Internet/Intranet, permite a exibição de páginas Web;
Feedback – Retorno (impressões) sobre algo;
Frame – Mecanismo de divisão de uma página Web em duas ou mais partes;
Hyperlinks – São expressões geralmente sublinhadas dentro de hipertextos (páginas Web) que
quando clicadas conduzem o usuário a um novo segmento do hipertexto ou a uma nova
página Web;
Links – Endereços de páginas da Internet;
Ranking – Lista ordenada pelos principais registros de uma categoria, de acordo com critérios
pré-estabelecidos;
Site – Conjunto de páginas da Internet pertencentes a uma entidade, inter-relacionadas, com o
mesmo objetivo, e geralmente residentes em um mesmo provedor;
Tags – Comandos de linguagens de desenvolvimento de páginas Web para especificação ao
browser de como ele deve se comportar frente aos diversos tipos de conteúdo (cabeçalho,
texto, imagem, som, etc) ou referências a conteúdos;
Thesaurus – Conjunto de conceitos inter-relacionados em uma espécie de dicionário;
Web – Também conhecida como World Wide Web, representa o universo onde estão
hospedadas todas as páginas da Internet do planeta;
Zoom – Técnica para se aproximar ou se distanciar de um ponto fixo em uma imagem.
UM MODELO DE INDEXAÇÃO SEMÂNTICA
PARA INTRANET
CAPÍTULO 1: Introdução
15
1 INTRODUÇÃO
“Ele não sabia que era impossível. Foi lá e fez.”
(Luiz Almeida Marins Filho)
1.1 CONSIDERAÇÕES GERAIS
O grande número de novos usuários que se conectam, diariamente, à Internet tem
evidenciado uma crescente necessidade por ferramentas de orientação e apoio à navegação,
que proporcionem catálogos de endereços simples e fáceis de usar.
Figura 1.1.1 – Acesso à Internet
A figura 1.1.1 tenta descrever como geralmente ocorre o acesso dos usuários à rede
mundial de computadores, procurando enfatizar uma necessidade evidente dos usuários
novatos ao terem os primeiros contatos com a Internet.
Segundo CESÁRIO
1
et. al., o ponto de partida da navegação na Internet de boa parte
dos usuários, principalmente dos novatos, tem se tornado os sites de busca de informação que
estão se transformando em verdadeiros portais de entrada na rede.
Em contrapartida, já se observa uma tentativa de implantação de mecanismos de buscas
rudimentares nos sites dos grandes provedores brasileiros, que são tidos como portais de
acesso à Web, para evitar essa dispersão dos usuários. Por se tratar de um assunto ainda em
fase de estudo e evolução, nesse aspecto, esses sites não conseguem concorrer com os
chamados especialistas da área, os sites de busca.
Os sites de busca são páginas projetadas com a finalidade básica de catalogar os
endereços de todas as páginas da Web, ou de pelo menos parte dela, com seus respectivos
1
CESÁRIO, M.; MEIRA, W. Jr.; FONSECA, R. e ZIVIANI, N. Melhorando a qualidade de serviços de busca
na Internet. Universidade Federal de Minas Gerais. Anais do XIX Congresso Nacional da Sociedade Brasileira
de Computação, 1998, Vol. I, p. 310.
outros sites
INTERNET: milhões de páginas do
mundo inteiro.
site
inicial
site de
busca
Provedor de
Acesso
Usuário
Como encontrar
uma informação ?
16
conteúdos para permitir que o usuário faça consultas nessa base de dados e consiga localizar a
página ou as páginas de seu interesse. É importante ressaltar que os índices são criados a
partir do conteúdo dos endereços visitados, ocorrendo, então, uma relação de dependência
total dos termos a serem catalogados.
O principal método de consulta aos catálogos da maioria dos sites de busca é a digitação
das palavras-chaves relacionadas com o assunto a ser pesquisado. Embora seja um método
rápido e de fácil utilização, na maioria das consultas em catálogos do tipo força bruta citados
acima, o usuário tem que se defrontar com milhares de endereços de páginas retornados,
tornando-se inviável qualquer tentativa de uma visualização global dessas páginas. A figura
1.1.2 demonstra o processo de realização de uma busca
Tentando minimizar o problema do retorno de vários endereços de páginas após uma
consulta, a maioria dos sites de busca possuem uma opção para refinamento. Entretanto,
quase nem sempre ela é utilizada pelo usuário, devido a sua complexidade de operação ou de
entendimento.
OLIVEIRA e DUARTE
2
comentam que a pesquisa por palavra-chave tem funcionado
bem em sistemas de informação de bibliotecas por décadas, mas quando aplicada à Internet
precisa de recursos adicionais para apresentar bons resultados.
Outra característica relacionada à busca de informação na Web se faz perceber durante a
visita a um site de muito conteúdo, embora sem ser portal de acesso, que possua uma enorme
estrutura hierárquica de hyperlinks, onde o usuário tem que sair abrindo várias páginas até
encontrar, com um pouco de sorte, aquela com conteúdo de seu interesse. Mecanismos de
busca também precisam ser implementados dentro desses sites para facilitar o acesso à
informação contida nos mesmos.
Na tentativa de superar os problemas atuais enfrentados pelo usuário em suas consultas,
um novo tipo de ferramenta de busca foi desenvolvida e batizada de máquina de meta-busca.
As máquinas de meta-busca são programas que realizam consultas simultâneas em vários sites
de busca, comparam e filtram os resultados, e definem um ranking com os principais
endereços encontrados, priorizando a exibição dos mais populares ao usuário. Retornos mais
precisos foram alcançados, porém não foi solucionado o problema da grande quantidade de
endereços retornados ao mesmo tempo em algumas consultas, justamente pela falta de um
tratamento semântico às palavras consultadas.
2
OLIVEIRA, Claudia. e DUARTE, Julio C. Data fusion in expert meta-searching the web. Instituto Militar de
Engenharia. Anais do XIX Congresso Nacional da Sociedade Brasileira de Computação, 1998, Vol. I, p. 195.
17
Figura 1.1.2 – Processo de realização de uma busca
Somente uma ferramenta de busca que possua conhecimento sobre todos os domínios de
interesse do usuário e que compreenda a intenção de cada consulta submetida poderá retornar
com exatidão os endereços que contenham a informação requerida. A indexação semântica do
conteúdo das páginas é uma das formas de se aproximar desse ideal.
Na indexação semântica, o catálogo é montado a partir de termos conhecidos e
relacionados que fazem parte de uma ontologia, ou seja, os termos são pré-definidos, cabendo
ao programa indexador a tarefa de localizar ocorrências dos mesmos nos sites. Portanto, a
consulta do usuário sempre retorna endereços de páginas com conteúdos, no mínimo,
relacionados.
Considerando o incremento diário na Internet de novos usuários com pouca experiência
em Informática; a falta de uma boa orientação ao usuário e uma maior precisão dos resultados
obtidos pelas consultas submetidas nos principais sites de busca ou meta-busca; a falta de
mecanismos simples de busca dentro da maioria dos sites extensos; e, principalmente, a
carência de uma indexação semântica para facilitar o encontro da informação, conclui-se que
existe uma necessidade real de aprofundamento das pesquisas nessa área.
TUDHOPE
3
ratifica o exposto acima, afirmando:
“Problemas de acesso à informação são enaltecidos pela falta de precisão da
tecnologia de recuperação de informação da Web atual e pela falta de familiaridade
dos usuários com as convenções de indexação. Existe uma necessidade crítica por
ferramentas que orientem usuários a formular e refinar as buscas, e a navegar pelo
hiperespaço.”
3
TUDHOPE, Douglas & CUNLIFFE, Daniel. Semantically indexed hypermedia: linking information
disciplines. ACM Computing Surveys, Vol. 31, Número 4es, dezembro 1999;
Máquina
de Busca
ÍNDICE
Banco de Dados
com Endereços
de Sites
Catalogados
Palavra-chave
Lista de Endereços
que contém a
palavra-chave
Palavra-chave
FILTRO
Usuário
18
1.1.1 ALGUNS SITES DE BUSCA NA WEB
Cada site de busca na Web possui estratégia própria de indexação. Entretanto, pode-se
observar tendências por dois caminhos: no primeiro a indexação seria realizada em todas as
etapas por programas de computador; enquanto no segundo haveria a necessidade de
intervação humana para tornar o índice organizado por categorias.
Segundo BRAY
4
, o catálogo pode ser construído manualmente, a partir do conceito de
metadados, com a inserção dos endereços no índice por assuntos ou categorias pré-definidos;
ou automaticamente por programas robôs que fazem a inserção dos endereços no índice,
geralmente, baseada na frequência e no posicionamento das palavras que pertencem à página
que está sendo catalogada. Essa última alternativa utiliza uma técnica de força bruta, portanto
torna-se menos eficaz no momento da consulta do usuário, retornando, geralmente, um
conjunto de páginas muito heterogêneo.
Dentre os sites de busca que adotam o processo totalmente automático na construção do
índice, pode-se citar o Altavista como um de seus representantes. A figura 1.1.3 exibe uma
consulta realizada em 13/05/2002, com a palavra-chave “urna eletrônica”.
Figura 1.1.3 – Busca na Web - Altavista
4
BRAY, Tim. What is RDF?. [on line] Disponível na Internet via WWW. URL:
http://www.xml.com/pub/a/2001/01/24/rdf.html, 2001;
19
Já o Yahoo! pode ser considerado o representante dos sites de busca que catalogam seus
registros de acordo com uma pré-definição de categorias. Veja a figura 1.1.4.
Figura 1.1.4 – Busca na Web – Yahoo!
Observa-se uma interface simples nos dois tipos de ferramentas visualizados acima, na
qual o usuário digita em um campo texto as palavras-chaves da informação de seu interesse e
clica em um botão submetendo a busca ao índice.
No conjunto-resposta verifica-se uma lista de endereços, ordenada por algum critério,
onde para cada endereço listado é exibido um mini-resumo com a palavra-chave em negrito,
que serve como guia de conteúdo para o usuário.
Diferencialmente no Yahoo!, também é informada ao usuário a categoria de origem do
endereço, possibilitando maior precisão no processo de busca.
1.2 PARTICULARIDADES DA BUSCA NA INTRANET
A intranet é definida como sendo uma rede de computadores com todas as
características da Internet, principalmente com relação aos protocolos de comunicação,
destinada especificamente ao uso particular por empresas ou entidades.
Logo, a busca de informação em páginas intranet deve ser submetida aos mesmos
processos de busca realizados em páginas Web.
A vantagem de se trabalhar com uma intranet decorre do conteúdo restrito existente nos
sites que por sua vez são, geralmente, em número bastante limitado.
20
A particularidade da busca de informação em domínios específicos possibilita a
construção de índices com recursos de localização de conteúdo mais eficientes. Os conceitos
importantes e seus relacionamentos podem ser identificados facilmente nas páginas dos
hipertextos, garantindo-se a indexação precisa dos mesmos.
Fazendo uma análise em cima desses aspectos, infere-se que o ambiente de intranet seja
altamente favorável a aplicação da indexação semântica. Sendo essa a motivação relevante da
sua escolha para aplicação do modelo proposto.
1.3 ONTOLOGIA
Define-se por ontologia uma coleção de informações ou definições sobre um
determinado contexto ou domínio. O termo ontologia vem do estudo de uma disciplina da
Filosofia que trata sobre a natureza da existência, procurando especificar cada ser vivo e seus
relacionamentos.
BERNERS-LEE
5
, conhecido como o inventor da Internet, afirma que os pesquisadores
de Inteligência Artificial e Web pegaram esse termo emprestado como seu próprio jargão, e
que para eles uma ontologia é um documento ou um arquivo que formalmente define as
relações entre termos.
As relações definidas em uma ontologia abrem espaço para que mecanismos de
inferência sejam utilizados com o intuito de proporcionar um certo de grau de “compreensão”
ao programa durante a manipulação dos termos.
1.3.1 REPRESENTAÇÃO DE ONTOLOGIAS EM RDF
Um dos formatos recentes para se representar ontologias na Web é o RDF. Abreviatura
de Resource Description Framework, RDF é um formato padrão para descrição e intercâmbio
de metadados, especificamente de metadados que descrevem onde se encontram os recursos
espalhados pela Web. Na definição desses metadados é utilizado um sistema de classes
similar ao da programação orientada a objetos.
5
BERNERS-LEE, Tim; HENDLER, James & LASSILA, Ora. The Semantic Web. [on line] Disponível na
Internet via WWW. URL: http://www.sciam.com/2001/0501issue/0501berners-lee.html, 2001.
21
O objetivo é permitir que os recursos existentes na Web sejam descritos em um formato
padronizado, tornando possível o intercâmbio dessas descrições entre qualquer aplicação.
LASSILA
6
cita as aplicações e os benefícios do uso de RDF para a implementação de
ontologias. Dentre as aplicações citadas, destacamos as seguintes:
Descoberta de recursos, provendo melhores capacidades para as máquinas de busca;
Geração de catálogo, descrevendo o conteúdo de um site particular e seus relacionamentos
com outros sites;
Agentes inteligentes, facilitando a troca e compartilhamento de conhecimento.
Com relação aos benefícios, afirma que o principal objetivo conquistado pelo RDF está
na definição de um mecanismo de descrição de recursos independente do domínio da
aplicação. Destaca também a capacidade para especificar semântica em dados baseados em
XML, permitindo interoperabilidade de aplicações.
Conclui-se que com a utilização do formato RDF a ontologia torna-se independente e
acessível para todos. A descrição do modelo e sintaxe RDF encontra-se no Anexo 2.
1.4 A TECNOLOGIA DE AGENTES INTELIGENTES
A tecnologia de agentes inteligentes se concentra no estudo de programas assistentes
capazes de perceber o ambiente no qual estão inseridos, de se comunicar com o usuário ou
outros programas, de compreender as necessidades do usuário e executar tarefas em
benefício do mesmo.
Uma das principais características dos agentes inteligentes é a capacidade de tomada de
decisão para executar tarefas a partir da utilização de mecanismos de inferência em uma base
de conhecimento (ontologia) sobre um domínio específico. Quanto maior for a base de
conhecimento do agente, mais “esperto” ele será.
Atuando dentro de uma aplicação com o papel de assistente, o programa agente pode ser
de grande valia para usuários novatos, guiando-os passo a passo, de forma interativa, no
caminho que deve ser seguido para a obtenção de resultados com sucesso.
Verifica-se, portanto, que a tecnologia de agentes aliada às ferramentas de busca na
Internet é um dos caminhos para facilitar o encontro da informação procurada pelo usuário,
6
LASSILA, Ora & SWICK, Ralph R. Resource Description Framework (RDF) Model and Syntax Specification.
W3C Recommendation. [on line] Disponível na Internet via WWW. URL: http://www.w3.org/TR/1999/REC-
rdf-syntax-19990222, 1999.
22
permitindo um retorno mais preciso de endereços de páginas referentes à consulta submetida,
através do conhecimento de ontologias tanto no momento da interação com o usuário quanto
no momento da construção de índices semânticos.
1.5 INDEXAÇÃO SEMÂNTICA
A indexação semântica é um conceito de indexação, proposto por TUDHOPE
7
, para
tornar mais precisa a busca do usuário em informações de formato texto, especialmente
páginas Web.
Uma das particularidades da indexação semântica é a associação de cada link indexado
com um ou mais termos descritos na ontologia. Sendo essa uma das garantias em se obter uma
representação semântica do conhecimento.
Tudhope cita dois benefícios provenientes da indexação semântica: a possibilidade de se
gerar um ranking para o resultado de uma consulta e a possibilidade de se sugerir
automaticamente termos equivalentes ou relacionados para enriquecer a consulta em
andamento.
Para RIJSBERGEN
8
os sistemas de indexação podem ser categorizados em três
dimensões, a saber:
1. Se os termos do índice são automaticamente ou manualmente definidos;
2. Se os termos do índice pertencem a um vocabulário controlado; e
3. Se os termos do índice representam conceitos únicos ou se vários termos podem ser
juntados para se responder determinada consulta.
Os sistemas de indexação semântica são aqueles que possuem um vocabulário
controlado ou um thesaurus, geralmente definido manualmente, com os termos do índice
representando conceitos únicos que se inter-relacionam.
A semântica entre os termos de um thesaurus está definida em três relacionamentos
principais: o de equivalência, o de hierarquia e o de associação. Nos relacionamentos de
equivalência são descritos os termos diferentes que possuem o mesmo significado. O
relacionamento hierárquico faz uma ligação vertical entre os termos que podem ser
conceituados dentro de uma mesma categoria, onde uns são mais abrangentes e outros mais
7
TUDHOPE, Douglas & CUNLIFFE, Daniel. Semantically indexed...;
8
RIJSBERGEN, Van. Information Retrieval. In TUDHOPE, Douglas & CUNLIFFE, Daniel. Semantically
indexed... .
23
específicos. Na associação são feitas as ligações entre os termos que representam conceitos
únicos que de certa forma estão relacionados.
Por depender de uma ontologia, seja ela expressa em um vocabulário controlado, em
um thesaurus ou em qualquer outro formato, a indexação semântica depara-se com o
problema da limitação da sua área de atuação, ou seja, dos conceitos por ela tratados.
Portanto, conclui-se que para a indexação semântica proporcionar os benefícios
pretendidos, faz-se necessária antecipadamente uma definição com clareza do domínio de
aplicação da sua ontologia.
1.6 WEB SEMÂNTICA
Uma visão geral sobre os conceitos expostos acima nos leva a um conceito bem mais
amplo proposto por BERNERS-LEE
9
, a Web semântica.
O conceito de Web semântica refere-se a um cenário no qual agentes inteligentes trocam
informações entre si e conseguem realizar operações em favor de seus usuários, a partir do
conhecimento disponível em ontologias acessíveis, que são garantidas por assinaturas digitais.
Dentre os empecilhos que ainda entravam tal realização, Berners-Lee cita um problema
de cunho evidentemente cultural na criação de páginas e sites da Internet:
“A maioria do conteúdo encontrado na Web atualmente é projetado para ser lido
apenas por seres humanos, e não para programas de computador manipular
significativamente. (...) aos computadores não é propiciado um meio para o
processamento semântico desse conteúdo...“
Como solução para tal problema, Berners-Lee aposta em duas tecnologias: o XML e o
RDF. O XML (eXtensible Markup Language) que representa um avanço em relação ao
HTML (Hypertext Markup Language) por permitir ao usuário a liberdade de criar suas
próprias tags, durante a criação das páginas Web. E o modelo RDF que, utilizando-se do
XML, adiciona conhecimento semântico ao conteúdo definido em cada tag de usuário.
A partir do momento da disponibilização de páginas Web com conteúdo semântico
implícito e acessível, torna-se possível a utilização de programas agentes que “interpretem” o
conteúdo explícito de cada página e atuem em favor de seus usuários.
9
BERNERS-LEE, Tim; HENDLER, James & LASSILA, Ora. The Semantic... .
24
Completando o cenário, as assinaturas digitais (chaves criptografadas) garantiriam a
confiabilidade e autenticidade das informações acessadas. Cada página, acessada por um
agente, teria embutida uma identificação digital que confirmasse a origem de suas
informações.
Percebe-se que para se chegar à Web semântica, é preciso um grande esforço por parte
de todos os projetistas e desenvolvedores de sites para tornar suas páginas legíveis tanto por
homens quanto por máquinas. Por ser a Internet uma rede de computadores descentralizada e
de livre expressão, a adoção dessa filosofia, em massa, só será possível com uma boa
divulgação dos benefícios a serem alcançados e com o surgimento de novas ferramentas que
facilitem a implementação desses novos modelos de página.
1.7 DETALHAMENTO DO PROBLEMA ESTUDADO
A dificuldade de acesso a informação dentro dos sites de uma rede intranet é o centro do
problema a ser estudado nessa pesquisa. A intranet, em estudo, possui uma dimensão
nacional, onde cada unidade da federação mantém um site, inexistindo qualquer mecanismo
de busca ao conteúdo dos mesmos.
Parte-de da premissa de que a falta de ferramentas de busca em qualquer base de dados,
seja ela estruturada ou não, reduz significativamente a utilidade da mesma.
A volatilidade e o dinamismo da informação que circula dentro das organizações,
principalmente após o surgimento da Internet, fazem com que ela seja necessária em um
espaço de tempo muito curto, pois caso ela não esteja disponível naquele momento, não terá
mais o seu devido valor. O usuário, portanto, passa a exigir que sistemas informatizados
tenham rápidos tempos de respostas e que atendam às suas necessidades.
Constata-se que a recuperação da informação é um assunto que merece destaque,
principalmente quando se trata de informação não estruturada, encontrada na maioria dos sites
de Internet/intranet.
A criação de um índice semântico, contendo a ligação dos termos e seus
relacionamentos, provenientes de uma ontologia, aos endereços das páginas dessa intranet,
será baseada no conteúdo disponível no formato HTML dos diversos sites que a constituem.
25
1.8 OBJETIVOS
1.8.1 OBJETIVO GERAL
O objetivo geral é explorar a tecnologia de busca de informação na Web, com ênfase
nos conceitos que envolvem a indexação semântica e a tecnologia de agentes.
A construção eficiente de índices para catalogar o conteúdo de hipertextos é o tema
principal do estudo em questão. Um modelo de indexação semântica é apresentado e proposto
através da implementação de um programa agente indexador em uma rede intranet.
O alvo a ser atingido (beneficiado) pela pesquisa é o usuário final de ferramentas de
busca em bases textuais. Pretende-se que ele efetue suas buscas com maior facilidade e
rapidez, sentindo-se sempre motivado a procurar por essas soluções.
1.8.2 OBJETIVOS ESPECÍFICOS
i. Demonstrar o desenvolvimento e implementação de mecanismos de indexação
semântica na intranet da Justiça Eleitoral brasileira;
ii. Contribuir com o estudo de tecnologias emergentes: Web semântica e agentes
inteligentes;
iii. Avaliar os benefícios produzidos pelo modelo de indexação proposto.
1.9 ABRANGÊNCIA DO TRABALHO
Este trabalho pretende demonstrar o impacto do uso da tecnologia de indexação
semântica em programas de busca de informação, do tipo agente, em uma intranet, avaliando
o ganho de produtividade do usuário.
Um protótipo de programa agente para auxiliar na criação do índice semântico e na
realização de buscas em páginas HTML de uma intranet foi implementado, permitindo que
testes reais pudessem ser realizados.
Foi adotado o uso de uma intranet principalmente pela definição de um domínio de
aplicação restrito; pela existência de usuários com o mesmo perfil, para a aplicação de testes
26
simulados; e pela facilidade de acesso aos recursos do servidor da rede durante a
implementação.
1.10 ESTRUTURA DA DISSERTAÇÃO
O capítulo inicial traz uma descrição genérica dos tópicos relacionados com o problema
a ser abordado, os objetivos a serem alcançados e o escopo do trabalho.
O segundo capítulo foi projetado para dar ao leitor uma visão geral sobre o estado da
arte em que se encontra a tecnologia de agentes inteligentes, possibilitando que ele se situe no
contexto para poder compreender melhor o restante do trabalho.
O capítulo 3 complementa a visão do leitor, apresentando alguns conceitos de indexação
que serão utilizados ao longo da explicação do modelo estudado.
Logo em seguida, o capítulo 4 descreve o desenvolvimento da arquitetura proposta de
um índice semântico, explicando a metodologia adotada e os passos para a implementação do
protótipo de um programa agente indexador.
O capítulo 5 traz um estudo de caso, descrevendo as necessidades do ambiente no qual o
protótipo foi testado, bem como os benefícios que seriam obtidos caso houvesse sua
implantação em definitivo, tomando por base a avaliação dos usuários que participaram dos
testes.
Finalmente, o capítulo 6 apresenta as conclusões e os trabalhos futuros.
UM MODELO DE INDEXAÇÃO SEMÂNTICA
PARA INTRANET
CAPÍTULO 2: Tecnologia de Agentes –
Estado da Arte
28
2 TECNOLOGIA DE AGENTES - ESTADO DA ARTE
“O homem que trabalha perde tempo precioso.”
(Domenico de Masi)
2.1 O SURGIMENTO DE AGENTES
Segundo MURCH
10
“o primeiro agente está perdido nas páginas da história da
humanidade”. Desde que o homem passou a viver em sociedade e dividir as tarefas, houve a
especialização das atividades desempenhadas por cada um. Assim, quando uma pessoa
necessitasse de um bem ou serviço, ela o solicitaria a um especialista naquela área para que
este agisse em seu favor.
Murch comenta ainda que:
“O único agente inteligente que as pessoas tinham era outro ser humano. Um ser
humano é atualmente a mais fina tecnologia de agentes no mundo, e de acordo com
o estado das pesquisas atuais, continuará a ser ainda por um bom período.”
Aplicando o conceito de agentes ao uso de computadores, podemos vislumbrar as raízes
desta tecnologia com os primeiros estudos na área de Inteligência Artificial. Por outro lado,
dando grande impulso ao desenvolvimento de programas agentes desde a década de 1950,
aparecem os visionários escritores de ficção científica responsáveis por popularizar o sonho
de máquinas realizando todo o trabalho dos homens de forma segura, rápida e eficiente. EM
1964, Arthur C. Clarke começou a escrever o livro que culminaria no filme “2001 – Uma
Odisséia no Espaço” tornando HAL (Heuristically Algorithmic Computer) um dos
imagináveis assistentes inteligentes mais conhecidos hoje.
De acordo com NORMAN
11
:
“Máquinas inteligentes tem existido de fato ou ficção por séculos. Talvez o mais
relevante predecessor aos agentes inteligentes de hoje são servomecanismos e outros
dispositivos de controle automáticos (...) Os agentes inteligentes são diferentes dos
dispositivos automáticos pelo poder computacional...”
Segundo KAY
12
:
“A idéia de um agente teve origem com John McCarthy em meados de 1950, e o
termo foi estabelecido por Oliver G. Selfridge poucos anos depois, quando os dois
10
MURCH, Richard. & JOHNSON, Tony. Intelligent software agents. Prentice Hall, 1999, p. 5;
11
NORMAN, D. A. How might people interact with agents ? In BRADSHAW, Jeffrey M. Software agents.
Second Edition, Calif.:AAAI Press, 1997, p. 49;
12
KAY, A. Computer software. Scientific American, 251(3):53-59, 1984. In BRADSHAW, Jeffrey M. Software
agents. Second Edition, Calif.:AAAI Press, 1997, p. 4.
29
estavam no Massachusetts Institute of Technology (...) Um agente seria um
programa robô vivendo e fazendo seu trabalho dentro do computador.”
Um terceiro fator incentivou a adoção definitiva da tecnologia de agentes no mundo da
computação: a Internet. Ela fez surgir várias aplicações para o uso de agentes, como o filtro
de informação e o comércio eletrônico.
MURCH
13
comenta que o filtro de informação tem emergido como um assunto chave
na medida em que as redes se tornam mais abertas para aplicações inteligentes e que através
da Internet empresas podem se comunicar com outras empresas e com os clientes on line.
Murch afirma ainda que:
“... o final do século vinte será marcado por pessoas sobrecarregadas de informação
de um lado, e ao mesmo tempo ansiosas por informações relevantes do outro.”
2.2 A NECESSIDADE DE AGENTES
A Internet com toda sua “magia” e utilidade tem sido um dos principais fatores de
incentivo à popularização do uso de computadores. Agora, todos querem estar ligados na rede
para ter acesso as informações que trafegam nessa super-estrada virtual. Com um custo
razoável de aquisição, o computador passou a ser um equipamento obrigatório nas empresas e
nos lares.
Segundo MAES
14
“computadores estão se tornando o veículo de várias atividades
diárias. Aquisição de notícias e informações, correio e até mesmo interações sociais e
entretenimento tornam-se mais e mais baseadas em computador”. Pode-se concluir que um
número cada vez maior de usuários inexperientes passam a ter contato com computadores.
Para que os computadores sejam tão fáceis de operar quanto uma televisão faz-se
necessário a implementação de interfaces simples e auto-explicativas. Hoje, ainda predomina
o conceito da manipulação direta estabelecido por SHNEIDERMAN
15
, onde o usuário tem o
controle absoluto da interface, iniciando e monitorando todas as tarefas. Esse conceito
funciona muito bem para usuários que no mínimo sabem que tarefa estão tentando executar.
Já os usuários sem nenhuma orientação, aqueles que simplesmente estão na frente do
13
MURCH, Richard. & JOHNSON, Tony. Intelligent software... p. 19;
14
MAES, Pattie. Agents that reduce work and information overload. In BRADSHAW, Jeffrey M. Software
agents. Second Edition, Calif.:AAAI Press, 1997, p. 145;
15
SHNEIDERMAN, Ben. Designing the user interface: strategies for effective human-computer interaction.
Third edition, Addison Wesley, 1998, p. 186.
30
computador pela primeira vez, precisam de um “empurrão inicial”, ou seja, de uma interface
interativa e inteligente que consiga orientá-los para a execução de uma tarefa.
MAES
16
defende que:
“Em vez do usuário iniciar a interação com a interface via comandos e/ou
manipulação direta, ele é engajado em um processo cooperativo no qual usuário e
agentes ambos iniciam a comunicação, monitoram eventos e executam as tarefas.”
Observando sobre esta óptica, conclui-se que a tecnologia de agentes pode ser
empregada para melhorar a interação usuário-computador.
Outra necessidade surge na realização de tarefas complexas, repetitivas, tediosas ou de
longa duração. Agentes podem realizá-las em background e apresentar os resultados ao
usuário. BRADSHAW
17
comenta que “... existe um desejo de abstrair os detalhes do usuário
programar a interface pela delegação aos agentes dos detalhes de especificar e executar tarefas
complexas”.
Com relação ao acesso a informação, surge a necessidade do usuário de encontrar
informação relevante no menor espaço de tempo numa gigantesca e heterogênea base de
dados, a Internet. Para WATSON
18
essa é uma das principais áreas para a expansão da
tecnologia de agentes, pois, segundo ele, as máquinas de busca de informação convencionais
que trabalham com busca de texto por palavra-chave ainda não são hábeis suficientes para
encontrar informação relevante na World Wide Web.
LIEBERMAN
19
comenta que:
“A crescente complexidade das fontes de informação e as necessidades dos usuários
por informação está rapidamente mudando as interfaces de busca e exibição manual
do passado. Uma aproximação à complexidade do problema é projetar agentes de
informação inteligentes que proporcionem assistência ativa no processo de encontrar
e organizar informação.”
Para OLIVEIRA
20
“qualquer usuário da WEB está dolorosamente certo de que busca
por palavra-chave é uma tarefa particularmente desafiadora, devido ao enorme volume de
informação que pode ser retornado”.
16
MAES, Pattie. Agents that reduce work ... p. 145;
17
BRADSHAW, Jeffrey M. Software agents. Second Edition, Calif.:AAAI Press, 1997, p. 12;
18
WATSON, Mark. Intelligent Java applications for the Internet and intranets. Morgan Kaufmann Publishers,
1997, p. 121;
19
LIEBERMAN, H. Personal assistants for the Web: a MIT perspective. In KLUSH, Matthias. Intelligent
Information Agents: agent-based information discovery and management on the Internet. Berlin: Springer-
Verlag, 1999, p. 279;
20
OLIVEIRA, Claudia. e DUARTE, Julio C. Data fusion in expert meta-searching the web. Instituto Militar de
Engenharia. Anais do XIX Congresso Nacional da Sociedade Brasileira de Computação, 1998, Vol. I, p.195.
31
Uma necessidade emergente ao uso de agentes é a do comércio eletrônico pela Internet.
Agentes futuramente farão o papel de intermediários entre entre clientes e empresas,
coletando e negociando menores preços, reservando bilhetes, localizando e sugerindo
produtos, avisando sobre ofertas, etc.
Uma necessidade crítica para a aplicação da tecnologia de agentes está envolvida com a
declaração universal dos direitos humanos. Assistir os deficientes físicos quanto ao uso de
computadores e permitir que eles tenham acesso a esse incrível mundo eletrônico. MURCH
21
comenta que:
“Computadores ajudam a dar aos deficientes físicos o que eles mais procuram –
independência. Computadores permitem que os deficientes se conectem a um mundo
que poderia ser inacessível a eles. Do conforto de seus lares, eles podem fazer
pesquisa, conduzir negócios, fazer compras, ou conversar com outras pessoas em
várias partes do mundo.”
Sintetizando, a tecnologia de agentes pode ser utilizada para melhorar a interação
usuário computador; realizar tarefas complexas, repetitivas, tediosas ou de longa duração;
facilitar busca de informação na Internet; incrementar o comércio eletrônico; e assistir
deficientes físicos quanto ao uso de computadores.
2.3 DEFINIÇÃO DE AGENTES
A definição de programas agentes ainda não se tornou um consenso entre os principais
pesquisadores da área. Cada um tem tentado lançar sua própria definição de acordo com a
abordagem de pesquisa focada.
Para se chegar a uma aproximação da definição é preciso analisar os vários pontos de
vista dos pesquisadores e tentar mesclar seus conceitos.
RUSSEL & NORVIG
22
afirmam que “um agente é qualquer coisa que pode ser vista
como percebendo seu ambiente através de sensores e agindo sobre ele através de effectors.
Um agente humano tem olhos, ouvidos e outros órgãos como sensores, e mãos, pernas, boca e
outras partes do corpo como effectors”. Comentam
23
ainda que o trabalho da Inteligência
Artificial é implementar no programa agente um função que transforme as percepções em
ações.
21
MURCH, Richard. & JOHNSON, Tony. Intelligent software... p. 23;
22
RUSSEL, Stuart. & NORVIG, Peter. Artificial intelligence: a modern approach. Prentice Hall, 1995, p. 31;
23
_______, p. 35.
32
Esta definição deixa bem claro que para ser agente, um programa tem que executar em
um ambiente, percebendo e transformando o mesmo.
MAES
24
define que “agentes autônomos são sistemas computacionais que habitam
algum ambiente dinâmico complexo, sentem e agem autonomamente nesse ambiente, e
realizam um conjunto de metas ou tarefas para as quais eles foram projetados”.
Percebe-se um acréscimo na definição anterior: autonomia do agente, ou seja, executar
livremente quando achar necessário; e agente orientado a objetivos, ou seja, o agente deve
procurar atingir objetivos previamente estabelecidos.
GILBERT
25
et al. (IBM) define que “agentes inteligentes são entidades de software que
realizam algum conjunto de operações em benefício de um usuário ou de outro programa com
certo grau de independência ou autonomia, e fazendo isso, empregam algum conhecimento ou
representação dos objetivos ou desejos do usuário”.
Acrescenta-se o conceito de que o agente deve procurar satisfazer às necessidades do
usuário agindo em seu nome, onde para isso ocorrer deve existir um certo grau de confiança
no agente por parte do usuário. Outro aspecto é o da cooperatividade entre agentes na qual um
agente pode agir em benefício de outro. Por último, observa-se que para executar uma ação o
agente deve empregar algum mecanismo de inferência em uma base de conhecimento.
A definição de WOOLDRIDGE & JENNINGS
26
diz que o agente deve ser autônomo,
ter habilidade social, ser reativo e pró-ativo.
Com isso duas novas características são apresentadas: a habilidade social do agente, ou
seja, a capacidade de comunicação do agente com outros agentes ou com o usuário; e a pró-
atividade do agente, ou seja, capacidade de tomar iniciativa para tentar maximizar os seus
objetivos.
Para FRANKLIN & GRAESSER
27
“um agente autônomo é um sistema situado dentro
e fora de um ambiente que sente aquele ambiente e age sobre ele, continuamente, possuindo
sua própria agenda e capaz de predizer futuras ações”.
Essa visão enfoca que o agente está sempre “acordado”, isto é que ele age
continuamente sobre seu ambiente. A inteligência do agente também é ressaltada quando se
afirma que ele deve ser capaz de manter sua própria agenda e antecipar futuras ações.
24
MAES, Pattie. Designing autonomous agents. In FRANKLIN, S. & GRAESSER, A. It`s an agent or just a
program ?: A Taxonomy for autonomous agents. [on line] Disponível na Internet via WWW. URL:
http://www.msci.memphis.edu/~franklin/AgentProg.html, 1996;
25
GILBERT, D. et al. IBM Intelligent agent strategy white paper. In FRANKLIN, S. & GRAESSER, A. It`s an
agent ...;
26
WOOLDRIDGE, M. & JENNINGS, N. R. Agent theories, architectures, and languages: a survey. In
FRANKLIN, S. & GRAESSER, A. It`s an agent ...;
33
BRADSHAW
28
comenta que uma das definições de agentes mais aceitas pela maioria
dos pesquisadores é: “uma entidade de software que funciona continuamente e
autonomamente em um ambiente particular, geralmente habitado por outros agentes e
processos”.
Nota-se nessa definição que um ambiente deve permitir a coexistência de vários
agentes, propiciando então a implementação de sistemas multi-agentes, onde vários agentes
trabalham em conjunto para a execução de um mesmo objetivo.
SHOHAM
29
define que “um agente é uma entidade cujo estado é visto como
consistindo de componentes mentais tais como crenças, capacidades, escolhas, e
compromissos”.
O agente deve também possuir capacidade de aprendizado para se adaptar a novas
situações e melhorar seu comportamento. Ele deve guardar um estado “mental” de si próprio e
do ambiente no qual está inserido, realizando auto-avaliações constantes.
NWANA
30
prefere dizer que o termo agente é muito amplo e que pode ser subdividido
em vários tipos de agentes específicos. Entretanto ressalta que “um agente é um componente
de software e/ou hardware que é capaz de agir exatamente como ordenado para realizar
tarefas em benefício do usuário”.
Apesar de todas as características que distinguem um programa agente de um programa
convencional, ambos devem agir de acordo com as necessidades do usuário.
Finalizando os conceitos que envolvem os agentes, KOTZ & GRAY
31
comentam que:
“A rápida evolução das redes de computadores e da tecnologia de computação,
aliada ao crescimento exponencial de serviços e informações disponíveis na Internet,
acarretará em centenas de milhões de pessoas tendo acesso rápido e contínuo a uma
grande quantidade de informação (...) de qualquer lugar e a qualquer hora. Código
móvel, e em particular agentes móveis, representará uma ferramenta essencial para
permitir tal acesso.”
Kotz & Gray defendem a mobilidade dos agentes dentro das redes de computadores,
onde os mesmos migrariam de servidor em servidor na hora e para o destino que eles próprios
desejassem. Ele acrescenta ainda como seria possível tal mobilidade: “o estado de execução
27
FRANKLIN, S. & GRAESSER, A. It`s an agent ...;
28
BRADSHAW, Jeffrey M. Software agents. Second Edition, Calif.:AAAI Press, 1997, p. 7.
29
SHOHAM, Yoav. An overview of agent-oriented programming. In BRADSHAW, Jeffrey M. Software
agents. Second Edition, Calif.:AAAI Press, 1997, p. 272;
30
NWANA, Hyacinth S. Software agents: an overview. British Telecommunications Laboratories, [on line]
Disponível na Internet via WWW. URL: http://www.labs.bt.com/projects/agents/publish/papers.htm , 1996;
31
KOTZ, David & GRAY, Robert S. Mobile agents and the future of the Internet. [on line] Disponível na
Internet via WWW. URL: http://www.cs.dartmouth.edu/~dfk/papers/kotz:future2/, 1999.
34
do programa é salvo, transportado para o novo servidor, e restaurado, permitindo ao programa
continuar a partir do ponto em que havia parado”.
Analizando as definições apresentadas, verifica-se algumas características pertinentes
aos agentes na tabela 2.3.
CARACTERÍSTICA SIGNIFICADO
1. Perceptivo Percebe o que acontece no ambiente
2. Atuante Capaz de transformar o ambiente
3. Reativo Age imediatamente ao sentir alguma mudança
4. Autônomo Executa independentemente, controla suas próprias ações
5. Orientado a objetivo Toma decisões baseado na meta a ser alcançada
6. Confiável Age de forma transparente, dando explicações ao usuário se
necessário
7. Cooperativo Ajuda outros agentes Quando solicitado
8. Racional Utiliza-se de um conhecimento prévio ou adquirido para tomar
decisões, aumentando a flexibilidade de suas ações
9. Comunicativo É capaz de se comunicar com outros agentes ou com o usuário
10. Pró-ativo Toma iniciativa para agir quando achar adequado
11. Persistente Executa continuamente no ambiente, mantendo estado de alerta
12. Adaptativo Capaz de aprender através de suas experiências e se adaptar ao
ambiente, melhorando seu comportamento
13. Emotivo Possui “personalidade” gerada a partir de suas crenças
14. Móvel Capaz de se deslocar entre servidores para alcançar seu objetivo
Tabela 2.3 – Características dos agentes
A combinação de algumas dessas propriedades dão origem a vários tipos de agentes,
dentre eles: agentes inteligentes, agentes autônomos, agentes móveis, agentes de aprendizado,
agentes de interface, agentes cooperativos e agentes antropomórficos.
Cada tipo tem sua especialidade, embora todos tenham propriedades em comum.
NWANA
32
define autonomia, aprendizado e cooperação como as três propriedades básicas
dos agentes e a partir delas deriva uma tipologia de acordo com a figura 2.3.
32
NWANA, Hyacinth S. Software agents: an ... .
35
Figura 2.3 – Tipologia de agentes (Nwana)
Observa-se que devido a falta de padronização dos conceitos, torna-se difícil emitir uma
definição simples, clara e precisa sem personalizá-la. Portanto, do ponto de vista do estudo em
questão, o agente pode ser considerado um programa autônomo que age em benefício do
usuário ou de outros agentes continuamente em um ambiente de forma racional de acordo
com sua base de conhecimento e com as metas para as quais ele foi projetado.
FRANKLIN & GRAESSER
33
afirmam que os agentes diferem dos programas normais
pelo fato de que suas ações sobre o ambiente podem efetar seu comportamento futuro e pelo
fato de que os agentes mantém um estado contínuo de execução. Comentam ainda que:
“Um agente não precisa ser um programa; ele pode ser um robô ou um professor de
escola. Programas agentes são, por definição, programas, mas um programa deve
preencher vários quesitos para ser um agente.”
Programas agentes também têm sido chamados de softbots, um termo que surgiu da
combinação das palavras software e robot significando programa robô. E dependendo da
tarefa que o softbot executa, ele ganha um novo nome mantendo apenas a terminação bot.
Dentre os mais conhecidos, estão os Mailbots que são agentes que gerenciam e filtram o
correio eletrônico do usuário; os Chatterbots que são agentes de bate-papo na Web; e os
Searchbots que são agentes de busca na Web.
2.4 AGÊNCIA (SOCIABILIDADE)
Agência, como pressupõe o próprio nome, é a capacidade que o agente possui de
interagir com outros programas e agentes, a qualquer instante, para realizar tarefas em
33
FRANKLIN, S. & GRAESSER, A. It`s an agent ... .
Autônomo
AprendeCoopera
Agentes
Inteligentes
Agentes
Colaborativos
Agentes de
Aprendizado
Colaborativo
Agentes de
Interface
36
benefício do usuário. Quanto maior o número de programas com os quais o agente é capaz de
interagir, maior será seu grau de agência.
Para alguns autores, a agência faz parte de uma das dimensões que mede o grau de
inteligência dos agentes. GILBERT
34
define três dimensões para caracterizar os agentes
inteligentes: agência, inteligência e mobilidade.
Figura 2.41 – Escopo de agentes inteligentes (adaptado de Gilbert et al. por Bradshaw)
Gilbert afirma que o grau de agência é medido pela interação entre o agente e outras
entidades no sistema, o grau de inteligência é medido pelo raciocínio e aprendizagem do
agente, e o grau de mobilidade é medido pela capacidade de locomoção do agente entre
servidores de uma rede, tendo maior grau de mobilidade aquele que se transporta para outra
máquina no meio da execução, levando os dados de estado acumulados com ele. A figura 2.41
exibe essa definição.
Para CAGLAYAN & HARRISON
35
apenas duas dimensões são suficientes para
caracterizar os agentes inteligentes: inteligência e agência. A figura 2.42 ilustra essas
dimensões.
Caglayan & Harrison comentam que “a dimensão da inteligência significa o grau no
qual a aplicação emprega raciocínio, aprendizagem, e outras técnicas para interpretar
informação ou conhecimento ao qual ele tem acesso ou é apresentado a ele”.
Com relação a agência comentam:
34
GILBERT, D. et al. IBM Intelligent agent strategy white paper. In BRADSHAW, Jeffrey M. Software agents.
Second Edition, Calif.:AAAI Press, 1997, p. 9;
35
CAGLAYAN, A. & HARRINSON, C. Agent sourcebook: a complete guide to desktop, Internet and intranet
agents. John Wiley & Sons, 1997, p. 124.
Sistemas Especialistas
Agência
Inteligência
Mobilidade
Agentes
Inteligentes
Estáticos
Roteiros móveis
Objetos móveis
Preferências
Raciocínio
Planejamento
Aprendizagem
Interatividade de serviço
Interatividade de
aplicação
Interatividade de dados
Representação do
usuário
Assincronia
Agentes de
função-fixa
37
“A dimensão de agência começa com o conceito de assincronia, que é o grau para o
qual pode ser dada uma tarefa para a aplicação e ela executar assincronamente com
relação a requisição do usuário. (...) O grau seguinte nesta dimensão se refere ao
agente ser capaz de perceber ou acessar dados externos sozinho (interatividade de
dados), depois ser capaz de agir sobre e responder a outras aplicações locais
(interatividade de aplicação) e coleções de aplicações que fazem parte de um serviço
(interatividade de serviço). O último grau é a interatividade de agente, no qual
agentes de aplicações independentes são capazes de se comunicar e de interagir.”
Figura 2.42 – Limite de agência inteligente (Caglayan & Harrison)
Nota-se que há uma proximidade maior, por parte dos pesquisadores, quanto ao
conceito de agência, pois o mesmo nos permite fazer uma diferenciação fundamental entre
programas agentes e outras aplicações.
2.5 MODELO DE AGENTES
Para que a natureza de um programa agente seja facilmente visualizada são criados
modelos gráficos por alguns pesquisadores. Esses modelos além de servirem como
demonstradores da tecnologia de agentes, também servem como guias na concepção e no
desenvolvimento dos respectivos programas.
A figura 2.5 exibe o modelo definido por CAGLAYAN & HARRINSON
36
. Nele um
agente deve ser projetado a partir de três atributos:
36
CAGLAYAN, A. & HARRINSON, C. Agent sourcebook: a complete guide ..., p. 7.
Agência
Inteligência
Agentes
Inteligentes
Preferências
Raciocínio
Aprendizagem
Interatividade de agente
Interatividade de serviço
Interatividade de
aplicação
Interatividade de dados
Representação do
usuário
Assincronia
38
Habilidade para executar tarefas;
Conhecimento;
Habilidade de comunicação.
Figura 2.5 – Modelo de agente (Caglayan & Harrison)
A habilidade para executar tarefas requer que o agente seja capaz de perceber o
ambiente no qual está inserido e de agir sobre o mesmo para cumprir seus objetivos.
O conhecimento se refere às regras seguidas pelo agente para tomar suas decisões. Ele
pode ser de dois tipos: fixo e evolutivo. O conhecimento fixo é previamente embutido no
agente durante a fase de implementação ou customização, onde uma vez definido
permanecerá constante até a próxima redefinição. Já o conhecimento evolutivo permite que o
agente adquira novos conhecimentos a partir de suas experiências e consiga melhorar seu
desempenho no decorrer da sua utilização.
A habilidade de comunicação do agente pode ser medida pela sua capacidade de
interação com o usuário e com outros agentes.
Observando-se esse modelo é possível constatar rapidamente se um programa possui
características de agente e em que nível de agência ele se encontra.
AGENTE
Conhecimento Habilidade
Comunicação
Habilidade
Tarefas
tarefa Prévio Aprendi
zagem
Com
Usuário
Com
Agentes
Recuperação de
informação
Filtro de
informação
Treinamento
Especific. pelo
desenvolvedor
Especific. pelo
Usuário
Especific. pelo
Sistema
Baseado em
Diálogo
Baseado em
Memória
Redes Neurais
Baseado em
Casos
Especialista
Neural
Interface
Fala
Social
Linguagem
de
Comunicação
entre agentes
39
2.6 TAXONOMIA DE AGENTES
Embora programas agentes possam ser classificados de várias formas, a maioria dos
pesquisadores aceita a classificação estabelecida por FRANKLIN & GRAESSER
37
,
demonstrada na figura 2.61. Eles procuraram fazer uma analogia com a classificação
biológica dos seres vivos na qual se colocam os tipos de criatura na raiz da árvore e as
espécies individuais nas folhas.
Franklin & Graesser afirmam que “qualquer cultura e até mesmo crianças de pouca
idade facilmente conseguem fazer distinção entre organismos animados, artefatos e conceitos
abstratos”.
Figura 2.61 – Taxonomia de agentes (Franklin & Graesser)
Essa classificação caracteriza-se por ser genérica, englobando qualquer tipo de agente
autônomo, seja ele um ser humano, um robô ou um programa de computador. Observa-se
também nessa classificação a figura do vírus de computador como um programa agente
especial, pois apesar de possuir várias propriedades de agente age em malefício do usuário.
KLUSH
38
aproveitou essa classificação e inseriu uma extensão na mesma para que ela
se adequasse aos agentes de informação estudados em seu livro. A figura 2.62 mostra a
classificação ampliada.
37
FRANKLIN, S. & GRAESSER, A. It`s an agent ... ;
38
KLUSH, Matthias. Intelligent Information Agents: agent-based information discovery and management on the
Internet. Berlin: Springer-Verlag, 1999, prefácio p. X.
Agentes Autônomos
Agentes Biológicos Agentes Robóticos Agentes Computacionais
Programas Agentes Agentes de Vida Artificial
Agentes de Tarefas Específicas Agentes de Entretenimento Vírus
40
Figura 2.62 – Classificação de agentes de informação (Klush)
Outro tipo de taxonomia de agentes foi proposta por CAGLAYAN & HARRISON
39
para tentar facilitar o entendimento do usuário com relação aos termos técnicos e de
marketing utilizados para nomear programas agentes na literatura. A intenção dessa
taxonomia foi permitir que o usuário conseguisse diferenciar rapidamente os vários tipos de
agentes existentes. Ela foi chamada de taxonomia de agentes para usuário final.
A taxonomia de agentes para usuário final baseou-se principalmente no ambiente no
qual os agentes são executados. Foram definidas três categorias de agentes: agentes de
desktop, agentes de Internet e agentes de intranet. Dentro de cada categoria os agentes foram
subdivididos de acordo com as tarefas específicas que realizam. Veja a tabela 2.6.
AGENTES DE DESKTOP AGENTES DE INTERNET AGENTES DE INTRANET
Sistema operacional Busca na Web Customização
Aplicação Servidor da Web Automação de processos
Conjunto de aplicações Filtro de informação Banco de dados
Recuperação de informação Alocação de recursos
Notificação
Serviço
Móveis
Tabela 2.6 – Taxonomia de agentes para usuário final (Caglayan & Harrison)
39
CAGLAYAN, A. & HARRINSON, C. Agent sourcebook: a complete guide ..., p. 9.
Agentes Autônomos
Agentes Biológicos Agentes Computacionais Agentes Robóticos
Programas Agentes Agentes de Vida Artificial
Vírus Agentes de Tarefas Específicas Agentes de Entretenimento
Agentes de Informação
Não Cooperativos
Cooperativos
Adaptativo Racional Móvel Adaptativo Racional Móvel
41
2.7 O DESENVOLVIMENTO DA TECNOLOGIA DE AGENTES INTELIGENTES
A tecnologia de agentes inteligentes tem sido bastante estudada nos últimos cinco anos,
tanto pelo surgimento ou aperfeiçoamento de outras tecnologias que possibilitam o seu
desenvolvimento quanto pela vantagem competitiva que ela poderá produzir para as
empresas.
Alguns dos principais centros de pesquisa do mundo tem aberto espaço ao estudo da
tecnologia de agentes. A criação desses grupos de pesquisa juntamente com a criação de
fundações e consórcios internacionais para o estabelecimento de padrões na área de agentes
confirmam o interesse global para o desenvolvimento dessa tecnologia.
NEGROPONTE
40
comenta que “a tecnologia usualmente não se desenvolve sem uma
necessidade, e existe certamente uma necessidade para mais agentes inteligentes nos ajudar a
lidar com grandes quantidades de informação”.
MURCH & JOHNSON41 comentam sobre a necessidade do desenvolvimento da
tecnologia de agentes:
“Nós precisamos de tecnologias como os agentes de computadores que podem
trabalhar como se fossem nossos assistentes; trabalhar em missões que nós
delegamos a eles; realizar muitas daquelas tarefas diárias repetitivas; enviar e
pesquisar informação; tomar decisões; e trabalhar em nosso benefício.”
Para CAGLAYAN & HARRISON
42
a evolução da tecnologia de agentes terá grande
semelhança com a evolução da tecnologia de interface gráfica do usuário (GUI) que para ser
definitivamente implantada precisou unir várias outras tecnologias, como monitores de alta
resolução, imagem colorida, endereçamento de todos os pontos da tela com impressão
correspondente, fontes escaláveis, dispositivos de apontamento e manipulação direta, editores
gráficos e WYSIWYG, etc. Entretanto, o seu desenvolvimento não implicará numa revolução
como aconteceu com a GUI, pois os agentes serão embutidos nas aplicações existentes
aumentando a usabilidade e a qualidade das mesmas.
Apesar da soma dos esforços voltados para o desenvolvimento da tecnologia de agentes,
algumas limitações ainda precisam ser totalmente superadas para a afirmação dessa
tecnologia. Verifica-se a necessidade de melhorar a integração das tecnologias existentes, de
aprofundar as pesquisas atuais e de unificar os conceitos e visões.
40
NEGROPONTE, N. Being digital. In WATSON, Mark. Intelligent Java applications for the Internet and
intranets. Morgan Kaufmann Publishers, 1997, p. 121;
41
MURCH, Richard. & JOHNSON, Tony. Intelligent software..., p. xiii;
42
CAGLAYAN, A. & HARRINSON, C. Agent sourcebook: a complete guide ..., p. 120;
42
Para WATSON
43
três tecnologias precisam ser aprimoradas e integradas para o
amadurecimento da tecnologia de agentes, são elas:
- Sistemas especialistas em processamento de linguagem natural com ontologias
específicas;
- Redes com alta largura de banda; e
- Interfaces de software universais.
HENDLER
44
acha que o fator chave limitante da tecnologia de agentes está na
construção e manutenção de ontologias que expressem conhecimento suficiente ao agente
para que ele possa tomar decisões corretas e solucionar o problema da melhor forma possível.
Mas, para Hendler as ferramentas existentes estão se tornando mais capazes e acessíveis,
tratando-se apenas de uma questão de tempo para que essa limitação seja superada.
KOTZ & GRAY
45
comentam sobre as tendências que estão afetando a Internet,
defendendo uma futura utilização de agentes móveis. Para eles as principais tendências são:
- Alta largura de banda devido ao crescimento exponencial da Internet;
- Dispositivos móveis acessando a Internet;
- Usuários móveis acessando a Internet de qualquer computador ou dispositivo;
- Intranets melhorando a distribuição de informação dentro da empresa;
- Sobrecarga de informação aos usuários;
- Customização de acesso a Internet para cada usuário; e
- Proxy sites reduzindo sobrecarga de informação e customizando acesso a serviços,
principalmente para dispositivos portáteis.
MURCH & JOHNSON
46
comentam que o futuro da tecnologia de agentes é promissor.
Dizem que ela continuará a permanecer como uma tecnologia integrada com a Internet e terá
acréscimo de inteligência e sofisticação. Na visão deles, os agentes estarão presentes
futuramente em aplicações de computador de vestir e de comércio eletrônico.
Hendler também expressa uma visão otimista com relação ao futuro da tecnologia de
agentes, afirmando:
“Os fatores limitantes na construção de tais sistemas estão sendo superados, e novas
aproximações estão emergindo de laboratórios de pesquisa em tecnologia de
43
WATSON, Mark. Intelligent Java applications ..., p. 121;
44
HENDLER, James. Is there an intelligent agent in your future ? [on line] Disponível na Internet via WWW.
URL: http://helix.nature.com/webmatters/agents/agents.html, 1999;
45
KOTZ, David & GRAY, Robert S. Mobile agents and the future of the Internet. [on line] Disponível na
Internet via WWW. URL: http://www.cs.dartmouth.edu/~dfk/papers/kotz:future2/, 1999;
46
MURCH, Richard. & JOHNSON, Tony. Intelligent software..., p. 181.
43
informação ao redor do mundo. Resumindo, se você não está agora usando
tecnologia baseada em agentes, não se preocupe, você logo estará.”
2.8 GRAU DE REALIDADE DA APLICAÇÃO DOS AGENTES
Como citado anteriormente, a tecnologia de agentes ainda se encontra em fase de
pesquisa tentando se afirmar, mesmo com a existência de alguns protótipos demonstrando
bons resultados na realização de tarefas específicas.
NWANA & NDUMU
47
lançaram um artigo em 1999 com uma avaliação das promessas
feitas desde 1994 quando o assunto agentes veio à tona em vários congressos e feiras
internacionais. Eles chegaram a conclusão que pouco foi cumprido, principalmente porque os
pesquisadores falharam em endereçar os aspectos práticos sobre o desenvolvimento, emprego
e utilização dos agentes em sistemas de escala industrial. Eles comentam o resultado da
avaliação:
“Nós notamos que uma vez que grandes esforços forem voltados para a construção
de sistemas úteis, não somente exemplares de protótipo, os problemas reais inerentes
em descoberta de informação, comunicação, ontologia, colaboração e raciocínio,
começarão a ser solucionados.”
2.9 ARMADILHAS NO DESENVOLVIMENTO DE PROGRAMAS AGENTES
Algumas dicas podem facilitar o processo de desenvolvimento de um agente e evitar
que erros simples sejam cometidos repetidamente por projetistas iniciantes.
WOOLDRIDGE & JENNINGS
48
comentam que “apesar dos significantes avanços na
ciência de sistemas agentes, comparativamente pouco esforço tem sido devotado ao
entendimento de como projetá-los”. Com a intenção de retificar essa omissão, eles escreveram
um artigo enumerando as principais armadilhas encontradas durante o projeto de um agente.
47
NWANA, Hyacinth S. & NDUMU, Divine T. A Perspective on software agents research. British
Telecommunications Laboratories, [on line] Disponível na Internet via WWW. URL:
http://www.labs.bt.com/projects/agents/publish/papers.htm , 1999;
48
WOOLDRIDGE, Michael. & JENNINGS, Nicholas R. Pitfalls of agent-oriented
development. [on line] Disponível na Internet via WWW. URL:
http://agents.umbc.edu//Publications_and_presentations/Recommended_Papers/index.shtml , 1998.
44
As armadilhas foram subdivididas em: políticas, de gerenciamento, conceituais, de
análise e projeto, de nível micro, de nível macro, e de implementação. Algumas delas se
referem exclusivamente a projetos de sistemas multi-agentes e não serão citadas abaixo.
ARMADILHAS POLÍTICAS
- Supervalorizar a tecnologia de agentes: a tecnologia de agentes não é a solução para
todos os problemas da engenharia de software, ela tem suas limitações e seus
domínios de aplicação;
- Tratamento de agentes como uma religião ou um dogma: a tecnologia de agentes
deve ser aplicada somente em problemas pertencentes ao seu domínio, não se deve
generalizar a sua utilização para problemas que não tem sua necessidade.
ARMADILHAS DE GERENCIAMENTO
- Não sei porque estou utilizando agentes: agentes devem ser utilizados no projeto não
porque é uma nova tecnologia e todos estão adotando, mas por proporcionar
melhorias ao projeto;
- Não sei para que os agentes servem: compreenda primeiro o domínio da aplicação e
então verifique se há necessidade do uso de agentes;
- Generalizar soluções para problemas específicos: domínios diferentes devem ter
soluções diferentes;
ARMADILHAS CONCEITUAIS
- Considerar a tecnologia de agentes sacramentada: por ser recente, não se deve
confiar plenamente nela;
- Confundir buzzwords com conceitos: por ser muito intuitiva a idéia de agente, alguns
desenvolvedores tem a falsa impressão de que dominam os conceitos;
- Esquecer que está desenvolvendo um software: o projeto de um programa agente
deve passar pelas mesmas fases de programa normal: análise, especificação,
desenvolvimento, verificação e validação;
ARMADILHAS DE ANÁLISE E PROJETO
- Não explorar tecnologias relacionadas: não querer reinventar a roda somente por
causa da nova tecnologia;
45
- Não explorar concorrência de atividades: sistemas multi-agentes devem permitir o
paralelismo.
ARMADILHAS NÍVEL MICRO
- Construir nova arquitetura de agentes: perde-se muito tempo partindo do zero;
- Pensar que sua arquitetura é genérica: não tente generalizar sua arquitetura para
domínios diferentes;
- Muita utilização de inteligência artificial (IA) no agente: o agente deve ser
construído com o mínimo de técnicas de IA possível, para não implicar em muita
perda de tempo durante o desenvolvimento;
- Agentes sem inteligência: não utilização de técnicas de IA desqualifica o agente.
WOOLDRIDGE & JENNINGS
49
finalizam alertando que a tecnologia de agentes ainda
está imatura e pouco testada, e que o projetista deve ter cuidado para não cometer esses erros
comumente observados em alguns projetos de agentes recentemente desenvolvidos.
MALONE
50
et al. definiu dois princípios chaves para o projeto de um agente
inteligente: sistemas semiformais e radical tailorability. O segundo princípio não foi traduzido
para evitar desvios de interpretação. Esses princípios foram baseados na premissa de que
computadores não terão no futuro a capacidade cognitiva do ser humano.
O princípio de sistemas semiformais diz que os agentes não devem ser construídos para
resolver problemas complexos sozinhos, e sim serem flexíveis para permitir a intervenção
humana. E o princípio radical tailorability diz que não devem ser construídos agentes que
tentem se auto configurar quando existem usuários que podem fazer isso facilmente.
Malone et al. defende a participação do usuário em algumas fases da execução do
programa agente, fazendo com que ele mantenha a sensação de controle do sistema.
De modo geral, observa-se nas dicas acima que o desenvolvedor deve ter cautela
quando for iniciar seu projeto de agente e deve sempre tentar buscar soluções simples.
49
WOOLDRIDGE, Michael. & JENNINGS, Nicholas R. Pitfalls of agent-oriented
development. [on line] Disponível na Internet via WWW. URL:
http://agents.umbc.edu//Publications_and_presentations/Recommended_Papers/index.shtml , 1998;
50
MALONE, T. W.; GRANT, K. R. & LAI, K.-Y. Agents for information sharing and coordination: a history
and some reflections. In BRADSHAW, Jeffrey M. Software agents. Second Edition, Calif.:AAAI Press, 1997,
p. 110.
46
2.10 ÁREAS RELACIONADAS
A tecnologia de agentes inteligentes é originária da área de inteligência artificial (IA)
por se concentrar no estudo de programas que tentam fazer com que os computadores
consigam realizar tarefas de modo “inteligente”.
Para BIGUS
51
as técnicas de busca, representação de conhecimento, algoritmos de
inferência e aprendizagem são alguns campos da IA que formam a base para o
desenvolvimento de agentes inteligentes.
Outra área que está profundamente ligada ao desenvolvimento de programas agentes e
fundamental para o sucesso dos mesmos é a área de interface usuário-computador, pois a
credibilidade do agente dependerá da sua capacidade de interação com o usuário.
A área de engenharia de software também dá suas contribuições. No estudo de sistemas
multi-agentes, observa-se que os conceitos da disciplina de computação distribuída são
aplicáveis. Em se tratando de agentes móveis, aplicam-se conceitos de redes de computadores.
Ainda com relação a engenharia de software, SHOHAM
52
vai mais longe e diz que a
programação orientada a objeto sofreu uma especialização e gerou a programação orientada a
agente conforme a tabela 2.10.
CARACTERISTICA P. O. OBJETO P. O. AGENTE
Unidade básica Objeto Agente
Parâmetros que definem o
estado da unidade básica
Irrestrito Crenças, compromissos,
capacidades, escolhas, ...
Processo de computação Passagem de mensagens e
métodos de resposta
Passagem de mensagens e
métodos de resposta
Tipos de mensagem Irrestrito Informação, requisição,
oferecimento, promessa,
declínio, ...
Restrições nos métodos Nenhuma Honestidade, consistência, ...
Tabela 2.10 – POO x POA (Shoham)
51
BIGUS, Joseph P. Constructing intelligent agents with Java: a programmer`s guide to smarter applications.
John Wiley & Sons, 1998, p. 181;
52
SHOHAM, Yoav. An overview of agent-oriented programming. In BRADSHAW, Jeffrey M. Software
agents. Second Edition, Calif.:AAAI Press, 1997, p. 273;
47
CAGLAYAN & HARRISON
53
afirmam que a tecnologia de agentes inteligentes está
relacionada com três áreas da ciência da computação: Inteligência Computacional ou IA;
Engenharia de Software; e Interface Usuário-Computador. A figura 2.10 ilustra essas três
áreas com seus respectivos campos.
Figura 2.10 – Campos influenciando agentes inteligentes (Caglayan & Harrison)
Várias áreas da ciência da computação podem estar relacionadas de alguma forma com
a tecnologia de agentes inteligentes, pois o conceito de agentes ainda não é único e existem
diversas visões sobre o assunto.
2.11 APLICAÇÕES GERAIS DE AGENTES
Os agentes podem ser utilizados em várias aplicações. MURCH
54
definiu as aplicações
em oito categorias gerais conforme a tabela 2.11.
53
CAGLAYAN, A. & HARRINSON, C. Agent sourcebook: a complete guide ..., p. 5;
54
MURCH, Richard. & JOHNSON, Tony. Intelligent software..., p. 93.
AGENTES
INTELIGENTES
Redes neurais
Sistemas baseados
em conhecimento
Sistemas
intencionais
Teoria do raciocínio
Objetos
Processamento de
imagem e de fala
Evento de inferência
de alto nível
Monitoramento online
Tutorial inteligente
Experimentos
interativos
Engenharia cognitiva
Modelagem do
usuário
Inteligência Computacional Engenharia de Software
Interface Usuário-Computador
48
APLICAÇÃO DE AGENTES DESCRIÇÃO
Uso pessoal Auxiliar no uso de computadores pessoais
Gerenciamento de rede Configuração da arquitetura e controle de tráfego
Acesso à informação e à
Internet
Propiciar gerenciamento de informação e sugerir caminhos
para se encontrar informação de qualidade com rapidez
Gerenciamento de mobilidade Permitir que usuários remotos tenham acesso aos recursos
Comércio eletrônico Realizar compra e venda de bens e produtos eletronicamente
Interface usuário-computador Tornar interfaces mais interativas e inteligentes
Desenvolvimento de
aplicação
Auxiliar no desenvolvimento, projeto e criação de programas
comerciais
Aplicações militares Descobrir e analisar informações preciosas
Tabela 2.11 – Aplicações gerais de agentes (Murch)
2.12 EXEMPLOS DE AGENTES
Vários programas agentes já foram desenvolvidos, embora a maioria tenha permanecido
como protótipo em institutos de pesquisa. Abaixo, estão relacionados alguns dos agentes mais
conhecidos na literatura quer seja pelo seu pioneirismo, quer seja pelos bons resultados
apresentados.
Os exemplos estão subdivididos em dois grupos: assistentes pessoais e gerenciadores
de informação. Os assistentes são programas que se assemelham pela característica de
manter uma observação contínua sobre as ações do usuário, sugerindo automações quando
conveniente.
No segundo grupo, os agentes gerenciadores procuram fazer tratamento de informação
em nome do usuário, submetendo ao mesmo, quando solicitado, o resultado de suas análises,
descobertas ou das atitudes tomadas.
ASSISTENTES PESSOAIS:
OPEN SESAME!
É o agente do sistema operacional MacOS que vem sendo usado desde 1993. Seu
objetivo é automatizar ações repetitivas do usuário. Ao encontrar algum bloco de ações
49
repetitivas, o agente interage com o usuário explanando sua descoberta e pedindo confirmação
para a automatização.
SYSTEM AGENT ON WINDOWS 95
É o agente do sistema operacional Windows 95. Executa tarefas previamente agendadas
pelo usuário.
WIZARDS
São agentes das aplicações da Microsoft que auxiliam na execução de uma tarefa.
GERENCIADORES DE INFORMAÇÃO:
BEYOND MAIL
É um agente para correio eletrônico. Pode ser utilizado para filtrar, encaminhar e
responder email através de regras definidas pelo usuário em uma interface própria.
MAILBOT
É um agente para correio eletrônico com as mesmas funções do Beyond Mail,
acrescentando sua capacidade de busca e sua interação em linguagem natural com o usuário.
WEB COMPASS
É um agente de meta-busca na Web. O usuário especifica os sites de busca que serão
pesquisados e entra com as palavras a serem procuradas. O Web Compass filtra e organiza os
links retornados, gerando um resumo para cada link retornado.
NEWSHOUND
É um agente de filtro de informação que procura artigos de interesse do usuário em
vários jornais e os envia pelo correio eletrônico.
URL-MINDER
É um agente de notificação. O usuário informa os sites do seu interesse e o URL-minder
mantém uma observação constante neles. Quando algum site é atualizado, o agente notifica o
usuário pelo correio eletrônico da atualização.
50
BARGAIN FINDER
É um agente de comércio eletrônico. Procura os melhores preços e a disponibilidade de
um produto em vários sites.
FIREFLY
É um agente que faz recomendação de cantores e discos baseado em um grupo de
usuários com interesse musical parecido. O usuário entra com seu perfil e recebe as
recomendações.
DSS AGENT
É um agente desenvolvido pela MicroStrategy para auxiliar o usuário no uso de
sistemas de suporte a decisão que acessam grandes bases de dados. Sua missão é manter uma
observação constante sobre os dados para emitir relatórios de alerta quando surgirem
alterações que impliquem em alguma tomada de decisão pelo usuário.
2.13 ALGUMAS BARREIRAS PARA ACEITAÇÃO DE AGENTES
ALTA EXPECTATIVA DO USUÁRIO
Quando o conceito de inteligência faz parte de uma definição de programa de
computador, ele gera uma alta expectativa nos usuários, pois entende-se que no mínimo o
programa será capaz de realizar qualquer tarefa sozinho, de compreender as necessidades do
usuário e de se comunicar facilmente. Deficiências de alguns desses itens em um programa
agente gera uma grande frustração podendo causar desestímulos no uso e na pesquisa.
CONFIANÇA - MANIPULAÇÃO INDIRETA
O usuário está acostumado a ter o controle absoluto sobre a interface, manipulando
diretamente os objetos e ações na tela e verificando o resultado da manipulação, embora
algumas das tarefas realizadas pelo usuário possam ser automatizadas plenamente por
agentes. Mas para que isso ocorra, faz-se necessário o estabelecimento de uma relação de
confiança nos agentes. Somente a experiência adquirida com o uso é que poderá estabelecer
essa relação.
51
SEGURANÇA
Agentes mal intencionados podem danificar as máquinas em que estão sendo
executados ou podem causar grandes perdas de dados nas mesmas. Limites e permissões de
acesso precisam ser bem definidos, principalmente no que se refere a agentes móveis.
PRIVACIDADE
Os agentes que guardam dados pessoais do usuário devem garantir o sigilo dos mesmos,
evitando que outros agentes ou aplicações consigam acessá-los.
2.14 BENEFÍCIOS DA TECNOLOGIA DE AGENTES
CAGLAYAN & HARRISON
55
definem os benefícios da tecnologia de agentes a partir
de suas principais características. A tabela 2.14 resume os benefícios.
CARACTERÍSTICA VANTAGEM BENEFÍCIO
Automação Realizar tarefas repetitivas Aumento de produtividade
Customização Customizar interação de informação Redução de sobrecarga de
informação
Notificação Notificar usuários de eventos
significantes
Redução de sobrecarga de
trabalho
Aprendizagem Aprender o comportamento do
usuário
Assistência pró-ativa
Treinamento Treinar o usuário no contexto Redução de treinamento
Mobilidade Realizar tarefas remotamente Trabalho off-line
Tabela 2.14 – Benefícios dos agentes (Caglayan & Harrison)
A maturação da tecnologia de agentes inteligentes implicará em grandes benefícios para
o uso de computadores, onde os principais beneficiados serão os usuários inexperientes que,
entre outras vantagens, terão um assistente pessoal à disposição para auxiliar na operação do
computador.
55
CAGLAYAN, A. & HARRINSON, C. Agent sourcebook: a complete guide ..., p. 14.
UM MODELO DE INDEXAÇÃO SEMÂNTICA
PARA INTRANET
CAPÍTULO 3: Indexação em
Hipertextos – Conceitos Gerais
53
3 INDEXAÇÃO EM HIPERTEXTOS – CONCEITOS GERAIS
“Quem decide pode errar, quem não decide já errou.”
(Herbert Von Karajan)
3.1 APRESENTAÇÃO
Neste capítulo se pretende fazer um estudo sobre os conceitos gerais que envolvem a
indexação do conteúdo de hipertextos Web, a fim de que se possa compreender melhor o
modelo de indexação proposto no capítulo posteriore.
Levando em consideração a visão de BAEZA-YATES
56
, receberam mais destaques os
conceitos envolvidos com os principais problemas em recuperação de informação: a
construção de índices eficientes, processamento de buscas com tempos de resposta rápidos e
algoritmos de definição de rankings que possibilitem o retorno de conjuntos-resposta de
qualidade.
3.2 NAVEGANDO EM HIPERTEXTOS
Os usuários de Internet/intranet navegam entre os sites, na maioria das vezes, através da
utilização dos recursos de hipertexto. As palavras sublinhadas, geralmente em tom diferente,
dentro de uma página Web (hyperlinks) conduzem a outra página ou a outro fragmento de
texto, na mesma página, quando clicadas. Esse é principal recurso do hipertexto.
Baeza-Yates
57
define hipertexto da seguinte forma:
“Um hipertexto é uma estrutura navegacional interativa de alto nível que nos
permite selecionar textos não-sequencialmente na tela do computador. Ele consiste
basicamente de nós que são correlacionados por ligações diretas em uma estrutura
de grafo. Cada nó é associado com uma região de texto que pode ser um capítulo de
um livro, uma seção de um artigo ou uma página Web.”
Para hipertextos com conteúdos bem organizados hierarquicamente, a característica de
saltar entre “pedaços” de textos é vista como um grande benefício, pois possibilita ao usuário
uma navegação rápida e objetiva. A técnica de busca através de zoom pode ser aplicada com
facilidade. O usuário parte de um conteúdo genérico para um mais específico, ou vice-versa,
56
BAEZA-YATES, R. & RIBEIRO-NETO, B. Modern Information Retrieval. Addison-Wesley, 1999, p. 07;
57
_______, p. 67.
54
com a certeza de que todos os conteúdos estão hierarquizados. Livros e manuais disponíveis
na forma de hipertexto são os grandes representantes desse benefício.
Voltando-se para a maioria dos hipertextos encontrados na Web, ou seja, aqueles cujos
conteúdos, que embora possam estar hierarquicamente organizados, não tratam de um único
assunto, verificam-se algumas dificuldades encontradas pelos usuários durante a navegação.
Normalmente, após alguns cliques de navegação em um hipertexto Web, o usuário tende
a se sentir perdido no hiperespaço e, consequentemente, a desistir da sua busca. A falta de
padronização dos termos, representantes de hyperlinks, que podem levar a uma navegação
correta e a falta de mapas de orientação à navegação são os fatores responsáveis por essa
desorientação do usuário.
A causa dessas dificuldades citadas decorre da liberdade de expressão na Web que
possibilita a cada projetista determinar quais termos servirão como hyperlinks e qual será a
estrutura de navegação do seu hipertexto. Portanto, no contexto da Web, o usuário fica à
mercê da habilidade ou “boa vontade” dos projetistas para conseguir navegar com precisão
nos hipertextos.
3.2.1 NAVEGAÇÃO SEMÂNTICA
Uma das promessas para reduzir as dificuldades de navegação em hipertextos Web é a
chamada navegação semântica, na qual o usuário, ao clicar em um hyperlink semântico (termo
em pesquisa), recebe informações sobre outros termos relacionados e sobre outros hipertextos
que possuem conteúdo sobre o termo solicitado; para, então, decidir qual caminho irá
percorrer.
O hyperlink semântico é encontrado no hipertexto com uma marcação diferente dos
hyperlinks convencionais, com o objetivo de alertar os usuários sobre suas possibilidades
oferecidas. A figura 3.1 ilustra a navegação semântica através de conceitos da ontologia.
Para oferecer recursos adicionais ao usuário, o hipertexto com navegação semântica
precisa fazer uso de ontologias previamente definidas e de ligações semânticas entre os
conceitos definidos nas ontologias. Além disso precisa contar com um índice que indique a
localização de hipertextos que contenham esses conceitos.
FARIAS
58
acrescenta que outro fator de destaque da navegação semântica em relação à
navegação tradicional é a associação dinâmica, que ocorre no momento em que o hipertexto é
58
FARIAS, Pedro Porfírio Muniz & ALBUQUERQUE, Patrícia. Projeto de pesquisa do Mestrado em
Informática Aplicada. Universidade de Fortaleza, junho/2001.
55
enviado pelo browser ao usuário, dos conceitos existentes no hipertexto com os conceitos e
hyperlinks presentes na ontologia e índice, respectivamente.
Figura 3.1 – Navegação semântica
A implementação desse novo modo de navegação em hipertextos está vinculada ao
desenvolvimento das pesquisas na área da Web semântica, proposta por BERNERS-LEE
59
,
onde se constata que a indexação semântica é tida como um de seus pilares.
3.3 BUSCA DE INFORMAÇÃO EM HIPERTEXTOS
A indexação do conteúdo de hipertextos gera índices que são utilizados pelos usuários,
através das ferramentas de busca, para acessar rapidamente o hipertexto que contenha o
conteúdo de seu interesse.
Os índices têm a missão de catalogar o maior número de hipertextos possível para poder
oferecer aos usuários uma variedade de hipertextos com a informação que está sendo buscada.
Essa missão todos têm atingido com sucesso através dos seus mecanismos de indexação,
geralmente com a utilização de programas agentes robôs (crawlers) que percorrem o
hiperespaço.
Por se tratar de informação armazenada na forma de texto e sem nenhuma padronização,
cada mecanismo de indexação deve possuir sua estratégia na hora de inserir um registro no
59
BERNERS-LEE, Tim; HENDLER, James & LASSILA, Ora. The Semantic Web. [on line] Disponível na
Internet via WWW. URL: http://www.sciam.com/2001/0501issue/0501berners-lee.html, 2001.
PÁGINA DE PESQUISA SOBRE INFORMÁTICA
Nesta página estão disponibilizadas pesquisas de
Mestrado sobre
interface usuário-computador, ensino à distância, Web semântica,
e engenharia de software.
Vá direto ao assunto de seu interesse consultando o índice. Página
atualizada mensalmente. Obrigado pela visita e volte sempre.
- Última atualização em abril/2002. -
HIPERTEXTO
Hyperlink tradicional
Hyperlink semântico
(hachureado)
Ontologia
Navegação semântica
Agentes Inteligentes
Representação de conhecimento
Indexação semântica
Navegação semântica
56
índice. O importante é que o índice possua meios de garantir a associação das informações
com seus respectivos hipertextos.
A unidade de informação geralmente é representada sintaticamente por um termo
(palavra-chave) ou um conjunto de termos, com suas variações. Complementando essa
definição, existe a semântica que envolve cada unidade de informação, que pode ser
representada por termos sinônimos e por demais termos que mantenham alguma relação com
o termo original. O uso de thesaurus tem sido adotado por algumas ferramentas de busca para
suprimir essa lacuna semântica.
O índice é, generalizando, composto por palavras-chaves, representando informações,
que apontam para hipertextos que as contenham. Por conseguinte, para se fazer qualquer
consulta ao mesmo é necessário que seja informada, no mínimo, uma palavra-chave
catalogada.
As ferramentas de busca, em sua maioria, oferecem aos usuários duas formas de se
consultar o índice: consulta por palavra-chave e consulta por casamento de padrões.
3.3.1 CONSULTA POR PALAVRA-CHAVE
O usuário pode realizar a consulta por palavra-chave informando apenas um termo,
múltiplos termos ou múltiplos termos com combinações lógicas.
A consulta com a informação de apenas um termo tende a ser mais precisa no conjunto-
resposta de hipertextos retornados, pois ao identificar um assunto único evita qualquer
ambigüidade sobre o tema em pesquisa. Pela sua especificidade, esse tipo de consulta traz
desvantagens para o usuário que não sabe exatamente o que está procurando. Caso o termo
consultado não esteja no índice e o usuário não seja informado sobre outros termos
correlacionados, gera-se uma grande frustação.
Múltiplos termos informados em uma consulta podem representar uma palavra-chave ou
um grupo delas. Como a maioria das ferramentas de busca sempre tenta retornar algo para o
usuário, todas as tentativas de descoberta de palavra-chave devem ser realizadas. Os termos
informados devem ser tratados isoladamente e combinados para que o máximo de consultas
possam ser submetidas ao índice. A desvantagem desse tipo de consulta é o grande conjunto-
resposta retornado sem um foco específico.
Múltiplos termos combinados logicamente com operadores booleanos “ou” e “e” são
uma alternativa para especificar melhor esse tipo de consulta. A partir da identificação dos
57
operadores, a ferramenta de busca consegue definir quais os termos (palavras-chaves) exatos
que devem ser submetidos na consulta ao índice.
Os hipertextos que fazem parte do conjunto-resposta são exibidos em uma lista
ordenada de acordo com o grau de relevância do seu conteúdo com relação à palavra-chave
consultada. Para listar os hipertextos ordenadamente, adota-se com freqüência critérios
estatísticos, simplesmente contando o número total de vezes que a palavra aparece no
hipertexto e identificando em quais partes (título, cabeçalho, corpo, rodapé) do documento ela
é mais encontrada.
3.3.2 CONSULTA POR CASAMENTO DE PADRÕES
A forma de consulta por casamento de padrões pode ser considerada uma variação da
forma de consulta por palavra-chave, quando se faz uma analogia em termos de informação
submetida para consulta. Nela, o usuário informa uma expressão composta por um conjunto
de caracteres, que pode representar uma frase ou até mesmo uma palavra incompleta, para que
sejam encontradas expressões idênticas ou derivadas nos hipertextos.
Verifica-se que maiores benefícios são conquistados quando esse tipo de consulta é
aplicado diretamente ao conteúdo de hipertextos. Embora, isso não impeça sua aplicação em
índices, onde, aliás, muitas ferramentas de busca o tem feito.
Dentre as expressões derivadas encontradas durante um casamento de padrões, as mais
conhecidas são os prefixos e os sufixos. Os prefixos representam os caracteres iniciais de uma
palavra, enquanto os sufixos representam os caracteres finais. Por exemplo, se o usuário
submeter para consulta o prefixo “estud” deverá também ser retornado, desde que exista no
documento ou índice consultado, derivados como “estudante”, “estudioso” e assim por diante.
O casamento de padrões é uma consulta muito genérica que geralmente é mais utilizada
por usuários que buscam a maior quantidade de informações possível sobre um determinado
tema, embora o conjunto-resposta retornado seja muito heterogêneo.
3.4 DESAFIOS NA INDEXAÇÃO DE HIPERTEXTOS
Na indexação de hipertextos Web devem ser observadas algumas peculiaridades para
que o índice criado espelhe fielmente o conteúdo disponível. Essas peculiaridades, na
verdade, representam os desafios a serem superados pelos programas indexadores.
58
BAEZA-YATES
60
cita alguns problemas relacionados com a recuperação de
informação na Web, que devem ser tratados de forma especial durante a criação de índices:
DISTRIBUIÇÃO DOS DADOS
Não existe um local específico para o armazenamento dos dados, ficando os mesmos
distribuídos em computadores espalhados pelo globo, dentro de uma rede que não possui
topologia nem largura de banda definida.
ALTO PERCENTUAL DE VOLATILIDADE DOS DADOS
A ausência de regras para se publicar, alterar ou retirar qualquer informação de um
hipertexto Web permite muita dinamicidade ao conteúdo disponível nos sites. Um estudo
realizado por KAHLE
61
estima que 40% do conteúdo da Web muda todo mês.
Ainda relacionado com a volatilidade, também podem ser citados aqueles hiperlinks que
mudam de endereço ou que deixam de existir sem nenhum aviso prévio ao usuário,
responsáveis por proporcionar uma das maiores frustações de navegação na Web: o erro
informado pelo browser sobre a inexistência do endereço submetido pelo usuário.
GRANDE VOLUME
Algoritmos de busca de informação e de indexação devem estar preparados para lidar
com a dificuldade de se trabalhar com grandes volumes de dados que crescem
exponencialmente em curtos intervalos de tempo.
DADOS NÃO ESTRUTURADOS E REDUNDANTES
Apesar dos hipertextos Web, escritos em HTML, possuírem uma estrutura mínima: tags
que informam onde está o cabeçalho e o corpo do texto, onde estão os hiperlinks, se o texto
está disposto em forma de tabela, se existem imagens, frames, etc.; o seu conteúdo principal
está escrito em forma de texto, portanto não há uma estruturação dos dados presentes.
O problema da redundância é tocante no aspecto de se encontrar conteúdos similares, às
vezes copiados (clonados), em diversos sites e não se ter uma maneira de identificá-los como
60
BAEZA-YATES, R. & RIBEIRO-NETO, B. Modern Information Retrieval. Addison-Wesley, 1999, p. 368;
61
KAHLE, B. Archiving the Internet. In BAEZA-YATES, R. & RIBEIRO-NETO, B. Modern Information
Retrieval. Addison-Wesley, 1999, p. 368.
59
únicos durante uma catalogação. SHIVAKUMAR
62
et. al. apresenta um estudo estatístico no
qual diz que aproximadamente 30% das páginas Web são duplicadas.
QUALIDADE DOS DADOS
A qualidade do conteúdo da Web está relacionada com o problema da confiabilidade das
informações extraídas. O usuário deve ter plena convicção de que pode se deparar com
informações falsas, desatualizadas, incompletas e assim por diante.
HETEROGENEIDADE DOS DADOS
O último desafio é estar preparado para indexar hipertextos cujos conteúdos estão
escritos em línguas e, até mesmo, em alfabetos diferentes.
Verifica-se, portanto, que os programas indexadores de hipertextos Web devem procurar
atender algumas exigências, a fim de não cometer erros específicos do tratamento desse tipo
de informação.
3.5 A TÉCNICA DE INDEXAÇÃO “ARQUIVO INVERTIDO”
Após definida a estrutura do índice, isto é, de como deverá ser sua composição, faz-se
necessária a definição de uma técnica de indexação para que seja realizada a coleta dos dados.
Segundo MARCHIONINI
63
, a técnica de indexação “arquivo invertido” (inverted file) é uma
das que mais se adequa ao trabalho com informações dispostas no formato de texto. Pode ser
observada sua ampla utilização na preparação dos índices remissivos encontrados em livros.
A técnica consiste em catalogar o conteúdo de um arquivo texto, invertendo-o, de certo
ponto de vista, em um índice composto por dois campos: termo e local de ocorrências. No
campo termo, são armazenadas as palavras que fazem parte do texto e no campo local de
ocorrências, a indicação do posicionamento das palavras no texto. A figura 3.2 procura
exemplificar essa técnica.
62
SHIVAKUMAR, N. & García-Molina, H. Finding near-replicas of documents on the Web. In BAEZA-
YATES, R. & RIBEIRO-NETO, B. Modern Information Retrieval. Addison-Wesley, 1999, p. 368;
63
MARCHIONINI, Gary. Information seeking in electronic environments. Cambridge Univ. Press, 1997, p. 24.
60
Figura 3.2 – Exemplificação da técnica “arquivo invertido”
Observa-se que o texto do exemplo acima contém 32 palavras, porém somente 10
palavras fizeram parte do arquivo invertido. As 22 palavras que foram excluídas foram
consideradas, nesse exemplo, como palavras complementares de ligação ou de apoio, também
conhecidas como stopwords.
As stopwords geralmente podem ser representadas por classes gramaticais diferentes de
substantivos e adjetivos, porque os conceitos, que representam os termos a serem indexados,
presentes em qualquer texto são descritos com essas duas classes. A grande vantagem da
exclusão de stopwords durante o processo de indexação consiste na redução significativa do
tamanho do índice.
Continuando a observação, também verifica-se que o campo local de ocorrência do
arquivo invertido deve conter todas as posições de localização de um termo. Constata-se, no
exemplo, que o termo “professor” pode ser encontrado em 3 posições diferentes no texto. O
benefício alcançado com isso é a múltipla opção de consulta ao termo.
Conclui-se, então, que a principal característica dessa técnica é propiciar a localização
direta e instantânea dos termos consultados, a partir de um índice compacto chamado de
arquivo invertido.
5
25
47
64
77
Ser professor é ter muita responsabilidade. O aluno enxerga no professor um exemplo
91 105 121 136 142 156
a ser seguido. Já o professor vê o aluno como uma porta aberta para a descoberta de
171 177
novos conhecimentos.
TERMO LOCAL DE OCORRÊNCIA
professor 5, 64, 105
responsabilidade 25
aluno 47, 121
exemplo 77
seguido 91
porta 136
aberta 142
descoberta 156
novos 171
conhecimentos 177
ARQUIVO INVERTIDO
61
3.5.1 ADAPTANDO AO ÍNDICE DE HYPERLINKS
Para se utilizar a mesma técnica na indexação de hipertextos Web, é preciso que se
façam pequenas adaptações, dentre as quais destacam-se: a indicação dos endereços onde os
termos podem ser encontrados e a preocupação com o conteúdo dinâmico de um hipertexto.
Por se tratar da indexação de vários conteúdos de diferentes hipertextos, o programa
indexador deve associar para cada termo registrado no índice apontadores para endereços nos
quais ele possa ser encontrado. A figura 3.3 demonstra como se deve utilizar a técnica
“arquivo invertido” na indexação de hipertextos.
Figura 3.3 – Adaptação da técnica “arquivo invertido”
Uma vez criado o índice, deve-se manter uma rotina de verificação periódica da
presença dos termos nos hipertextos, para evitar inconsistências geradas por mudanças
dinâmicas de conteúdo.
3.6 PERCORRENDO OS HYPERLINKS DURANTE A INDEXAÇÃO
Os programas caçadores de conteúdo, normalmente chamados de crawlers, devem
adotar uma estratégia para definir como melhor percorrer o hiperespaço durante o processo de
indexação. Uma das estratégias mais simples é iniciar o percurso a partir de um conjunto de
endereços que contenham os hipertextos com maior índice de popularidade junto aos usuários,
...
Os professores são
formadores de opinião.
...
http://mia.hipertexto1.html
...
O Mia tem ótimos
professores.
...
...
Os alunos do Mia devem exigir
o máximo dos professores.
...
http://mia.hipertexto2.html
http://mia.hipertexto3.html
professores
http://mia.hipertexto1, http://mia.hipertexto2,
http://mia.hipertexto3
formadores http://mia.hipertexto1
opinião http://mia.hipertexto1
mia http://mia.hipertexto2, http://mia.hipertexto3
ótimos http://mia.hipertexto2
alunos http://mia.hipertexto3
máximo http://mia.hipertexto3
TERMO
LOCAL DE OCORRÊNCIA
ARQUIVO
INVERTIDO
62
garantindo, assim, a indexação de informações que são acessadas constantemente. No
momento em que novos endereços forem sendo encontrados, opta-se por percorrê-los
verticalmente ou horizontalmente.
No percurso vertical de endereços, o crawler ao visitar o primeiro endereço do conjunto
inicial a visitar, tenta identificar as informações existentes para indexação e os possíveis
hyperlinks (endereços) vinculados. Caso detecte endereços vinculados, prioriza-os, visitando,
em seguida, o primeiro que foi encontrado. Esse processo continua até que seja atingida uma
profundidade pré-determinada ou até que não se detecte mais endereços vinculados no
hipertexto em visita. Quando a profundidade final é atingida, ocorre uma recursividade,
fazendo com que o crawler visite os endereços que ficaram pendentes durante o percurso.
No percurso horizontal, caso sejam detectados endereços vinculados durante uma visita,
os mesmos são colocados em uma fila de espera e o crawler continua suas visitas seguindo o
conjunto inicial de endereços a visitar. Desta forma, fica garantido que todos os endereços de
um mesmo nível, principalmente aqueles do conjunto inicial, sejam visitados com maior
brevidade. Mais detalhes sobre a opção de escolha do percurso estão escritos no próximo
capítulo.
O percurso pode ser dificultado quando o crawler se depara com hyperlinks que
apontam para imagens, com hipertextos estruturados em forma de frame, ou com hipertextos
protegidos por senha.
Uma consideração importante a se fazer durante o percurso é o registro obrigatório no
índice da data da visita de cada hipertexto. Esse registro serve para informar ao usuário que as
informações disponibilizadas foram catalogadas com base no conteúdo dos hipertextos em
determinado dia.
3.7 DEFININDO UM RANKING PARA CONSULTAR O ÍNDICE
A consulta submetida pelo usuário nas ferramentas de busca dispara uma rotina para
que um conjunto-resposta seja criado e retornado ao usuário.
Na criação do conjunto-resposta, a rotina faz uma varredura no índice tentando
encontrar todos os registros relacionados com os argumentos da consulta. Nesse momento,
faz-se necessária a utilização de algoritmos de definição de ranking para ordenar a exibição
dos registros do conjunto-resposta. O usuário deve visualizar primeiro aqueles registros
encontrados que mais se aproximam da sua solicitação.
63
Vários critérios e técnicas podem ser adotados para se definir um ranking. Dentre elas,
algumas conhecidas são: identificar a quantidade de hyperlinks que apontam para um mesmo
hipertexto (maior audiência); e identificar a freqüência e posicionamento dos termos nos
hipertextos.
A credibilidade do conteúdo do índice é, em grande parte, atribuída ao seu algoritmo de
definição de ranking, visto que para o usuário não interessa saber a quantidade de informação
catalogada, mas sim a qualidade com que a informação disponibilizada chega ao seu
conhecimento.
3.7.1 INSERINDO SEMÂNTICA NA DEFINIÇÃO DO RANKING
O ranking definido com a utilização exclusiva de critérios estatísticos tende a produzir
conjuntos-resposta artificiais, ou seja, sem conexão entre os registros selecionados.
Critérios semânticos, como, por exemplo, a identificação de relacionamentos entre os
hipertextos a partir da análise da semântica dos seus conteúdos e a identificação de termos
relacionados com os argumentos da consulta, podem ser adicionados para se conseguir um
incremento na qualidade do conjunto-resposta.
A inserção da semântica deve ocorrer, preferencialmente, na própria estrutura do índice
para evitar aumento no tempo de resposta da consulta do usuário. Nos índices estruturalmente
semânticos, respostas mais precisas podem ser obtidas com maior facilidade e rapidez.
Um ranking que contenha referências a hipertextos relacionados semanticamente
proporciona um maior grau de assistência ao usuário, disponibilizando informações extras que
podem orientá-lo na descoberta do caminho correto para o encontro da informação desejada.
3.8 FORMAS DE INDEXAÇÃO
Os hipertextos podem ser indexados de duas formas: centralizada e descentralizada. A
seguir estão descritas as vantagens e desvantagens de cada uma.
64
3.8.1 INDEXAÇÃO CENTRALIZADA
A indexação centralizada de hipertextos, também conhecida como arquitetura baseada
em crawlers, caracteriza-se por possuir um índice único que mantém todos os registros
indexados.
Políticas de segurança contra programas invasores inviabilizam o bom desempenho dos
crawlers em servidores remotos. Portanto, atualmente eles são executados em servidores
locais, necessitando fazer requisições aos servidores remotos dos hipertextos que deverão ser
indexados. A figura 3.4 ilustra o trabalho dos crawlers.
Figura 3.4 – Arquitetura de indexação centralizada (adaptada de Baeza-Yates)
Verifica-se na figura acima o seguinte esquema:
i) O crawler tem a missão de fazer o percurso pelo hiperespaço e disponibilizar o
conteúdo dos hipertextos encontrados ao módulo indexador;
ii) O módulo indexador identifica os termos e os demais dados que deverão fazer
parte do índice, para em seguida armazená-los;
iii) O índice é alimentado pelo módulo indexador e serve de fonte para a ferramenta
de busca; e
iv) A ferramenta de busca atende às solicitações do usuário, fazendo a requisição da
consulta ao índice e refinando o conjunto-resposta retornado pelo índice, através
da definição de um ranking para a exibição dos resultados.
A indexação centralizada tem a vantagem de poder ser administrada facilmente,
detectando-se com maior rapidez problemas de integridade e consistência dos dados, ou
problemas causados por eventuais falhas nos códigos dos programas.
Índice
Ferramenta de busca
(ranking)
Crawler
Módulo indexador
Web
Usuário
65
Por outro lado, a centralização exige um tratamento especial para funcionar a contento.
Deve-se estar preparado para lidar com grandes volumes de dados, com linhas de
comunicação de alta largura de banda, com servidores de alta capacidade de processamento e
com os demais problemas de infra-estrutura.
3.8.1 INDEXAÇÃO DESCENTRALIZADA
Um exemplo de se trabalhar com índices descentralizados pode ser observado nas
ferramentas (máquinas) de metabusca. Quando o usuário submete uma consulta em qualquer
ferramenta desse tipo, a mesma é redirecionada para vários índices que, por sua vez, retornam
seus conjuntos-resposta encontrados. De posse de todas as respostas, a ferramenta executa um
algoritmo de definição de ranking sobre as mesmas para, finalmente, exibir seu resultado ao
usuário.
Fugindo um pouco do exemplo do parágrafo anterior, a idéia principal da indexação
descentralizada é a distribuição do índice em vários servidores. Ela pode ser vista como
grupos de programas indexadores trabalhando independentemente na construção de índices
locais que fazem parte de um índice global.
Os problemas de infra-estrutura são praticamente todos resolvidos, em compensação
surgem problemas de gerenciamento e coordenação, que são bastante conhecidos no estudo de
bancos de dados distribuídos.
A indexação descentralizada ainda se encontra em fase de estudos, a fim de que sejam
descobertas novas técnicas que facilitem sua aplicabilidade em larga escala, embora já
existam várias aplicações em funcionamento espalhadas pelo mundo, podendo-se citar a CIA
e a NASA que utilizam um modelo de arquitetura descentralizada conhecida como Harvest
(maiores informações no site http://webharvest.sourceforge.net).
UM MODELO DE INDEXAÇÃO SEMÂNTICA
PARA INTRANET
CAPÍTULO 4: Proposta de Indexação
Semântica
67
4 PROPOSTA DE INDEXAÇÃO SEMÂNTICA
“Raciocinar significa fazer uma análise do conhecimento disponível.”
(Tarcísio Pequeno)
4.1 MODELO PROPOSTO
O modelo proposto neste capítulo é constituído pelos seguintes aspectos:
Quanto à Indexação
Optou-se por adotar a arquitetura centralizada do índice, na qual um programa agente
varre o hiperespaço em busca de informações, ao mesmo tempo que insere os registros dos
termos encontrados em um banco de dados único.
A técnica “arquivo invertido” foi utilizada no processo de identificação e associação dos
termos nas páginas.
Quanto à Ontologia
Os termos com seus relacionamentos, específicos da Justiça Eleitoral, foram descritos,
manualmente, em um arquivo isolado, através de um conjunto de regras pré-definidas,
explicadas adiante.
Essa definição independente foi fundamental para o processo de transferir os conceitos
da ontologia para as tabelas auxiliares no banco de dados.
Quanto ao Banco de Dados
Um fator de destaque do modelo proposto está na composição das tabelas do banco de
dados. Para garantir a semântica no índice foi necessário criar tabelas auxiliares que
representassem a ontologia e pudessem ser utilizadas no momento da construção e
manutenção do mesmo.
4.2 METODOLOGIA ADOTADA
Para que o desenvolvimento do modelo de índice semântico proposto se tornasse viável
em um menor espaço de tempo possível, foi preciso adotar uma metodologia que definisse
passo a passo quais procedimentos deveriam ser tomados e, principalmente, em que ordem
68
eles deveriam ser executados. Optou-se pela metodologia top-down, na qual primeiro se
obtém uma visão geral do todo para, em seguida, visualizar as partes.
Uma visão macro do programa agente indexador a ser implementado foi definida para
que seguintes questões obtivessem resposta:
- Qual o objetivo do programa a ser desenvolvido?;
- Qual o público alvo que será beneficiado?;
- Quais as funcionalidades mínimas que o programa deverá apresentar ao
usuário?;
- Quais os recursos de hardware e software que serão necessários?;
- Onde ele será implementado?;
- Quanto tempo será necessário para a implementação?;
- Qual a melhor estratégia para se realizar a implementação?.
A idéia geral foi desenvolver um programa que pudesse ser acessado a partir de
qualquer ponto da intranet da Instituição onde ele fosse implantado. Esse programa seria
conectado a um banco de dados contendo um catálogo (índice semântico) de todas páginas
presentes na intranet e serviria como um mecanismo de consulta.
Para facilitar a implementação, o desenvolvimento do programa foi subdividido em
cinco partes principais: criação, verificação e manutenção do índice; exibição dos
resultados; e interação com o usuário. Cada parte, por sua vez, foi subdividida em vários
elementos básicos onde cada um representava uma funcionalidade mínima para a construção
do todo.
Durante a definição de cada uma das cinco partes principais, tentou se preservar
algumas das características específicas de um programa agente, tais como racionalidade,
persistência, percepção, reatividade, atuação, comunicação e confiabilidade; de forma que a
solução obtida fosse compatível com a teoria em estudo.
4.3 COMPOSIÇÃO DAS PARTES
As cinco partes principais que compõem a solução proposta devem realizar os seguintes
objetivos, em destaque:
a) CRIAÇÃO DE UM ÍNDICE SEMÂNTICO. Criar um índice de endereços dos
sites ordenado por assunto de acordo com conceitos advindos de uma ontologia
69
específica sobre as atividades que envolvem uma eleição e com conceitos úteis
encontrados na maioria dos sites, definindo para cada assunto os principais
endereços encontrados;
b) VERIFICAÇÃO DE ENDEREÇOS. Verificar periodicamente se os endereços
contidos no índice continuam no ar;
c) MANUTENÇÃO DO ÍNDICE EXISTENTE. Refazer o índice quando perceber
que houve mudança no conteúdo de algum site;
d) EXIBIÇÃO DOS RESULTADOS ENCONTRADOS. Listar os endereços,
solicitados pela busca, ordenados pelo ranking em que se encontram no índice,
listando primeiro aqueles endereços com maior probabilidade de conter a
informação desejada;
e) INTERAÇÃO COM O USUÁRIO. Interagir com o usuário para tentar guiá-lo ao
encontro da informação, quando solicitado.
O meio encontrado para se atingir o objetivo de cada parte será detalhado em itens
individuais a seguir, visando facilitar a exposição e a compreensão.
4.3.1 CRIAÇÃO DE UM ÍNDICE SEMÂNTICO
O índice será criado com base na visão de BAEZA-YATES
64
:
“Para ser efetivo na tentativa de satisfazer a necessidade de informação do usuário, o
sistema de recuperação de informação (IR) deve de alguma forma ’interpretar’ o
conteúdo dos itens de informação (documentos) em uma coleção e definir um
ranking de acordo com o grau de relevância da busca do usuário. (...) De fato, o
objetivo primário de um sistema de IR é retornar todos os documentos que são
relevantes para a busca do usuário enquanto retornando tão poucos documentos não-
relevantes quanto possível.”
MARCHIONINI
65
afirma que para facilitar a busca de informação em um ambiente de
intranet é necessário que as informações exibidas como resultado da busca submetida estejam
visualmente bem distribuídas na tela do usuário, evitando a complexidade da leitura.
Agregando valor aos conceitos descritos acima, será incrementado um diferencial na
construção do índice: o fator semântico. A partir das tabelas auxiliares definidas na base de
64
BAEZA-YATES, R. et al, Modern information retrieval. Addison-Wesley, 1999, p.02.
65
MARCHIONINI, Gary. Information seeking in electronic environments. Cambridge Univ. Press, 1997;
70
dados, criadas para servir como a ontologia, o programa agente irá descobrir páginas que
contenham um determinado assunto, mesmo sem encontrar exatamente sua descrição, através
da identificação de relacionamentos e de termos equivalentes. YOUNGBLOOD
66
reforça esse
diferencial afirmando que “o coração de uma máquina de busca é o agente de busca, que
coleta as informações que serão armazenadas no banco de dados”.
Cada registro gravado na tabela índice (principal) conterá os seguintes campos:
- A identificação do assunto;
- O link do endereço da página;
- A probalidade de sucesso do encontro da informação;
- Um resumo do conteúdo da página;
- O órgão de origem;
- A data da última atualização;
- A quantidade de vezes que o índice esteve fora do ar nas últimas verificações;
- um indicador para dizer se o link realmente contém o assunto ou se contém
apenas asuntos relacionados.
A figura 4.3.1 procura dar uma idéia geral da composição de todas as tabelas que
compõem a base de dados do índice semântico. O exemplo nela demonstrado se refere ao
estudo de caso descrito no próximo capítulo.
A tabela ÍNDICE sera apoiada por quatro tabelas auxiliares:
i) A tabela ASSUNTO que contém a descrição dos assuntos que poderão ser
consultados e que servirão de base para a formação do índice;
ii) A tabela SITE que contém a relação dos endereços que deverão ser
obrigatoriamente visitados, possuindo um campo específico (Ind) para indicar a
presença deles no índice;
iii) A tabela EQUIV contém todos os termos equivalentes a um assunto, incluindo
plural, sinônimos e abreviaturas;
iv) a tabela ASSUNTOREL contém os relacionamentos entre os assuntos com o
intuito de aumentar a precisão da identificação de um determinado assunto em
uma página.
66
YOUNGBLOOD, G. Michael. Web hunting: design of a simple intelligent web search agent. [on line]
Disponível na Internet via WWW. URL: http://www.acm.org/crossroads/xrds5-4/webhunting.html , 2000.
71
Figura 4.3.1 – Estrutura do Índice Semântico
O processo de criação do índice semântico, ou seja, os detalhes de como ele foi
implementado estão apresentados adiante, na forma de subtópicos que seguem uma
disposição cronológica.
4.3.1.1 DEFINIÇÃO DOS ASSUNTOS (alimentação das tabelas auxiliares)
A ontologia pré-definida será o fator determinante de quantos e quais assuntos
comporão o índice. Cada assunto será extraído da ontologia na medida em que o programa
identificá-lo automaticamente como um conceito único ou quando o mesmo for adicionado
manualmente às tabelas auxiliares pelo usuário. A definição dos assuntos representa um ponto
ID.ASSU
PROBA
LINK
ORIGEM
DATAPAG
VERIFICA
RELAC
RESUMO
1 70% http://intranet.tre-ce.gov.br TRE-CE 12/08/00 0 N urna eletrônica (...)
1 50% http://intranet.tre-rn.gov.br TRE-RN 10/07
/00 3 N urna eletrônica (...)
1 30% http://intranet.tre-pa.gov.br TRE-PA 24/09/00 0 N urna eletrônica (...)
2 80% http://intranet.tre-pb.gov.br TRE-PB 10/05/00 0 S eleição (...)
2 40% http://intranet.tre-go.gov.br TRE-GO 05/02/00 0 N eleição (...)
. .
. .
. .
n 90% http://intranet.tse.gov.br TSE 17/10/00 0 N candidato (...)
n 80% http://intranet.tre-sc1.gov.br TRE-SC 30/06/00 4 N candidato (...)
n 60% http://intranet.tre-ce.gov.br TRE-CE 12/08/00 0 S candidato (...)
Tabela ÍNDICE (PRINCIPAL)
ID.ASSU
DESCASSU
1 URNA
2 ELEITOR
3 VOTO
. .
. .
. .
n ASSUNTO n
Tabela Assunto
END IP
UF IND
http://ce1 CE S
http://rn1 RN N
http://pb1 PB S
. .
. .
. .
http://tse1 TSE S
Tabela Site
Tabelas AUXILIARES
ID.ASSU
EQUIV
1 URNAS
1 UE
2 ELEITORES
. .
. .
. .
n ASSUNTO n
Tabela Equiv
IDPRI
IDREL
1 2
1 3
1 5
. .
. .
. .
n 1
Tabela AssuntoRel
72
chave para todo o processo, pois ela que determinará a riqueza do índice. As regras de
composição de conceitos na ontologia poderão ser do tipo:
a) assunto1 -> assunto2 e assunto3;
b) assunto1 -> definição1;
c) assunto1 -> definição2.
Do lado esquerdo se encontra a identificação do assunto (uma palavra ou conjunto de
palavras) e do lado direito pode estar presente uma combinação de outros assuntos ou
exclusivamente uma definição, que talvez não seja única.
Quando um assunto é identificado, ocorre a alimentação da tabela Assunto utilizando-se
um código sequencial e a própria descrição encontrada.
Após a identificação do assunto, e caso se encontre pelo menos uma definição do
mesmo, ocorrerá a alimentação da tabela Equiv com a definição encontrada e com o código
do assunto previamente definido.
Todos os assuntos relacionados, identificados do lado direito da regra, deverão constar
na tabela AssuntoRel;
4.3.1.2 IDENTIFICAÇÃO DOS ASSUNTOS NAS PÁGINAS
A visita aos sites iniciará com a seqüência obrigatória estabelecida na tabela auxiliar
Site. Em cada página visitada será realizada uma tentativa de identificação de todos os
assuntos previamente catalogados.
Ao se deparar com o conteúdo de uma página, o programa, primeiramente, faz uma
análise pura de todos os termos encontrados, ou seja, apenas tenta verificar se no conteúdo da
página existem termos exatamente iguais aos termos contidos na tabela Assunto.
Para os assuntos não encontrados na forma de termos iguais tabela<->página, o
programa verifica se existe pelo menos um termo relacionado com o assunto em questão,
para, em caso positivo, poder associar o assunto à página lida.
A partir dessa etapa ocorre a recursividade, onde todos os links presentes na página
deverão ser visitados, com exceção daqueles que representam os sites principais contidos na
tabela Site ou daqueles que já foram visitados, evitando assim ciclos infinitos.
73
ALGORITMO DE BUSCA UTILIZADO PARA FORMAÇÃO DO ÍNDICE
Os sites serão visitados um a um, com uma freqüência diária na verificação e mensal na
manutenção. Pela natureza da solução proposta acima verifica-se a necessidade de trabalhar
com uma estrutura de dados do tipo árvore, com nós e ramificações. Cada link representará
um nó a ser visitado com prováveis ramificações ou apontadores para outros nós.
Por não existir uma meta específica a ser alcançada durante a caminhada entre os nós, a
não ser a geração do catálogo dos assuntos existentes em cada link, poderiam ser utilizados
quaisquer dos dois tipos mais simples de algoritmo de busca em árvores: busca em largura ou
busca em profundidade.
Conhecida também como busca cega ou não informada, esse tipo de busca possibilita
uma visita completa a todos os nós da árvore, aqui representados pelas páginas da intranet da
Justiça Eleitoral brasileira.
A busca em largura parte da visita a um nó inicial, onde verifica as ramificações
existentes e coloca os nós encontrados em uma fila de espera, que define qual será o próximo
nó a ser visitado.
Caso o segundo nó a ser visitado também contenha outros nós, estes deverão ser
inseridos atrás da fila e ficar aguardando sua vez . Os nós vão sendo visitados na sequência
em que se encontram na fila, garantindo que todos os nós de um mesmo nível hierárquico
sejam visitados antes da passagem para os nós do nível seguinte. A figura 4.3.2 apresenta um
exemplo da execução desse algoritmo, adaptado do artigo de YOUNGBLOOD
67
.
A busca em profundidade, ao contrário da busca em largura, sempre insere os nós a
serem visitados na frente da fila, verificando apenas um nó em cada nível hierárquico até
atingir o último nível existente, quando só então passará a verificar os outros nós que
permaneceram na fila.
O importante a ser analisado é que os dois algoritmos percorrem todos os nós da árvore,
divergindo apenas na ordem do percurso. Por facilitar a visualização da montagem do índice,
sendo de grande valia durante a etapa de depuração do programa agente, optou-se por utilizar
o algoritmo de busca em LARGURA para percorrer a árvore e catalogar os conteúdos dos
nós.
67
YOUNGBLOOD, G. Michael. Web hunting: design of a simple...
74
Figura 4.3.2 – Exemplo do algoritmo de busca em largura
Fazendo a busca em largura, o programa agente sempre inicia o trabalho de catalogação
pelos obrigatórios a visitar, permitindo uma maior confiabilidade quanto a presença mínima
do conteúdo dos mesmos no índice, pois durante o período das visitas existe a probabilidade
de ocorrer interrupções provocadas por fatores externos.
4.3.1.3 CÁLCULO DA PROBABILIDADE
Para cada assunto identificado em uma página lhe será atribuído um valor percentual,
que indique ao usuário a probabilidade da quantidade de informação sobre o assunto na
página.
DEFINIÇÃO DA PROBABILIDADE
A definição dos critérios estatísticos de cálculo da probabilidade foi baseada no modelo
adotado por algumas ferramentas de busca na Web.
A probabilidade de se encontrar a informação sobre um assunto com maior precisão em
uma página será avaliada pela quantidade de vezes que uma mesma descrição do assunto é
encontrada, pelo seu posicionamento, cabeçalho ou corpo, na página e pela existência de
1
2
3
4
6
5
PASSO 1
FILA A VISITAR
FILA VISITADO
1
2
3
4
6
5
PASSO 2
FILA A VISITAR
FILA VISITADO
1
1
2
3
4
6
5
PASSO 3
FILA A VISITAR
FILA VISITADO
1
3
4
6
5
Obs.: Esses passos deverão
continuar sendo executados até que
todos os nós tenham sido visitados.
5
2
3
2
3
4
4
“início”
75
termos relacionados. Será feita uma combinação de um modelo de indexação estatística com a
indexação semântica proposta.
A partir dessas premissas, chegou-se a escala da tabela abaixo:
PROBABILIDADE OCORRÊNCIA
5% Descrição do assunto no corpo da página e para cada repetição
10% Descrição do assunto no cabeçalho da página
10% Para cada termo relacionado ao assunto
Tabela 4.3.1 – Probabilidade de encontro de informação
Com essa escala percebe-se que a descrição de um assunto encontrada em uma página
poderá possuir uma probabilidade de conter a informação desejada em múltiplos de 5,
variando de 5 a 100%. Quando a descrição do assunto (termo) estiver presente no cabeçalho
(10%), se repetir por no mínimo 8 vezes (40%) dentro da página e existir, no mínimo, cinco
outros termos relacionados (50%), a probabilidade terá seu escore máximo.
O cálculo da probabilidade se subdivide em 2 etapas. Na etapa inicial ocorre a
verificação da presença da descrição do assunto ou de termos equivalentes na página,
enquanto na etapa final ocorre a identificação de assuntos relacionados. Sendo cada etapa
limitada a atingir uma probabilidade máxima de 50%.
Esse critério foi adotado pela sua objetividade e pela sua clareza, numa tentativa de
mesclar o valor do conhecimento explícito, obtido pela presença física da informação, com o
valor do conhecimento tácito, obtido na descoberta dos relacionamentos pelo programa
agente; ambos presentes na página.
Procurou-se dar maior relevância à descoberta dos termos relacionados com assunto,
visto tratar-se do conhecimento extraído da ontologia, que em outras palavras indicaria a
implementação da semântica na criação do índice.
4.3.1.4 INSERÇÃO DO REGISTRO NO ÍNDICE
Após a atribuição do valor da probabilidade ao assunto, será atribuído o endereço da
página ao campo link, para em seguida se fazer uma verificação da existência desse registro
na tabela índice. O mesmo endereço de página relativo a um assunto não poderá ser inserido
mais de uma vez no índice. Caso ele já exista com probabilidade diferente, deverá ocorrer
uma sobreposição.
76
Ainda antes de efetuar a operação de inserção, faz-se necessário verificar em que ponto
ela deverá ocorrer, pois ela deverá respeitar a ordenação descendente da coluna probabilidade
dentro de um mesmo assunto. A tabela Índice será criada ordenada para permitir rapidez de
resposta às consultas do usuário.
A verificação completa do conteúdo de um site só termina quando todas as suas páginas
são lidas. Se durante o momento da geração do índice o site estiver fora do ar, ele terá que
aguardar até a próxima geração para ganhar nova chance de fazer parte do mesmo. O índice é
regerado periodicamente.
ONTOLOGIA APLICADA (ESTUDO DE CASO)
A base de dados da ontologia foi manualmente definida e encontra-se descrita no Anexo
1, na qual foram especificados vários conceitos ligados ao dia a dia da Justiça Eleitoral,
destacando-se aqueles referentes ao planejamento de eleições. Com o intuito de facilitar a
conversão da ontologia na base de dados, procurou-se realizar a definição dos conceitos de
forma resumida e baseada em regras.
Outra característica dessa ontologia será a inclusão de termos equivalentes para alguns
conceitos, devido a falta de padronização observada nos sites. Os termos equivalentes não
serão obrigatoriamente sinônimos, também poderão ser abreviaturas ou definições do próprio
conceito em graus distintos de especificidade.
Todos os termos constantes da base, também deverão apresentar variações de gênero,
número e grau quando estas existirem e forem comuns.
CONCEITOS BÁSICOS: Justiça Eleitoral, TSE, TRE, ZE, Cartório Eleitoral, local de
votação, seção, local de apuração, eleição, eleitor, eleitorado, candidato, cargo, partido
político, voto, votação, urna de lona, urna eletrônica, mesário, delegado de prédio,
escrutinador, juiz, promotor, chefe de cartório, servidor da JE, legislação, título de eleitor,
justificativa eleitoral.
CONCEITOS BASEADOS NO PLANEJAMENTO DE ELEIÇÕES: Planejamento
estratégico de eleições, vistoria dos locais de votação, alistamento eleitoral, treinamento de
sistemas, divulgação da urna eletrônica, registro de candidaturas, convocação de mesários,
treinamento de mesários, reunião com delegados de prédio, instalação de sistemas eleitorais,
carga e lacre das urnas eletrônicas, transporte das urnas eletrônicas, distribuição de material
de eleições, núcleo de apoio técnico, central de apoio técnico, totalização dos boletins de urna,
divulgação de resultados, diplomação dos eleitos.
77
CONCEITOS RETIRADOS DA INTRANET: Estrutura Organizacional, estatística do
eleitorado, jurisprudência, resoluções, informações gerais, avisos, licitações, download de
arquivos, rede de computadores, endereço eletrônico, email, relação de telefones, sistemas,
serviços.
Os conceitos estão descritos em regras do tipo:
Justiça Eleitoral => tem finalidade de promover eleições respeitando uma legislação;
JE => equivalente a Justiça Eleitoral;
Tribunal Superior Eleitoral => órgão superior da JE;
(...)
Conforme dito anteriormente, do lado esquerdo da regra ficam os conceitos ou
equivalências, sublinhados, e do lado direito a definição, que pode englobar outros conceitos e
equivalências, também sublinhados. O emprego dessa metodologia visou facilitar a
descoberta dos relacionamentos existentes entre os conceitos.
4.3.2 VERIFICAÇÃO DE ENDEREÇOS
O índice pronto mantém uma lista estática de endereços apontando para determinados
conteúdos. Essa operação de verificação de endereços consiste em simplesmente verificar se
um dado endereço contém o assunto a ele associado. Por se tratar de uma operação simples
com pouco gasto de recursos computacionais, deverá ser executada com maior freqüência
pelo programa agente.
O objetivo dessa operação é manter a confiabilidade e a credibilidade do índice. A
confiabilidade diz respeito à correspondência entre assunto e link, pois por se tratar de
informações que podem ser atualizadas a qualquer momento e até mesmo mudarem seu local
de apresentação, corre-se o risco de um endereço que está sendo visitado continuar no ar
porém com seu conteúdo totalmente alterado.
A credibilidade expressa a confiança que o usuário deposita na existência dos endereços
listados pelo programa agente. Por mais que o endereço não corresponda às suas expectativas,
tem-se a certeza de que ele existe com algum conteúdo.
As etapas dessa operação são as seguintes, em forma de algoritmo:
1) Visitar o endereço verificando se o mesmo ainda existe;
2) Caso exista, verificar se o seu conteúdo corresponde ao assunto gravado no índice;
3) Caso exista e corresponda, atribuir 0 ao campo Verifica do registro;
78
4) Caso o endereço não mais corresponda ao assunto, excluir o registro do índice;
5) Caso o endereço esteja fora do ar, verificar a quantidade de verificações já efetuadas
com ele fora do ar, vide campo Verifica da tabela Índice;
6) Se o campo contiver mais de 10 verificações fora do ar, excluir o registro do índice;
7) Se contiver até 10, incrementar o campo Verifica com mais uma unidade.
Quando qualquer registro do índice que contiver um valor diferente de zero no campo
Verifica for exibido ao usuário, deverá informá-lo que o endereço estará provavelmente fora
do ar.
4.3.3 MANUTENÇÃO DO ÍNDICE EXISTENTE
A manutenção periódica (mensal) do índice possui os mesmos objetivos da verificação
de endereços, apenas trata-se de uma operação mais complexa exigindo mais tempo para ser
executada. Portanto deverá ser realizada em momentos que não sejam críticos para o
desempenho das atividades computacionais da Instituição.
A diferença está no acréscimo de novo cálculo da probabilidade para todos os endereços
existentes e na tentativa de visita aos sites constantes da tabela Site que não estão presentes no
índice, por terem estado fora do ar durante a criação ou durante a última manutenção.
As etapas dessa operação são as seguintes para os endereços já catalogados:
1) Visitar o endereço verificando se o mesmo ainda existe;
2) Caso exista, verificar se o seu conteúdo corresponde ao assunto gravado no índice;
3) Caso exista e corresponda, atribuir 0 ao campo Verifica do registro e efetuar o
cálculo da probabilidade para o assunto;
4) Verificar se essa nova probalidade calculada é equivalente a anterior;
5) Caso não seja, atualizar o registro;
6) Em caso de equivalência da probabilidade, verificar se a data da página é
equivalente a anterior;
7) Em caso de datas diferentes, atualizar o registro;
8) Caso o endereço não mais corresponda ao assunto, excluir o registro do índice;
9) Caso o endereço esteja fora do ar, verificar a quantidade de verificações já efetuadas
com ele fora do ar, vide campo Verifica do registro;
10) Se o campo contiver mais de 10 verificações fora do ar, excluir o registro do índice;
11) Se contiver até 10, incrementar o campo Verifica com mais uma unidade.
79
Após a atualização do índice existente, deverá ocorrer uma verificação de todos os
endereços catalogados para identificar se algum site deixou de fazer parte do índice. Ao se
constatar que um site foi excluído por completo, atualizar o campo Ind da tabela Site com o
valor N (não) indicando a sua ausência.
Logo em seguida, somente para aqueles sites que não fazem parte do índice, deverá ser
realizada a operação de criação do índice numa nova tentativa de catalogar seus endereços.
Novos assuntos poderão surgir caso as tabelas auxiliares da base de dados tenha sido
alimentada com novos assuntos.
Tanto essa operação quanto a verificação de endereços deverão ser realizadas
automaticamente pelo programa agente em intervalos de tempo previamente programados.
4.3.4 EXIBIÇÃO DOS RESULTADOS ENCONTRADOS
MARCHIONINI
68
cita que para facilitar a busca de informação é necessário que haja
uma boa interatividade entre o usuário e o sistema. Para Marchionini “busca de informação é
fundamentalmente um processo interativo. Ela depende de iniciativas da parte de quem está
pesquisando, feedback do sistema de busca, e decisões para subsequentes iniciativas baseadas
nesse feedback.”
Procurando seguir as orientações de Marchionini, juntamente os modelos de interface de
conhecidos sites de busca da Internet, foi definido um modelo de layout de exibição de
resultados, conforme o exemplo da figura 4.3.4.
Os resultados encontrados no índice deverão ser exibidos de forma sequencial e por
assunto identificado, contendo todos os campos do índice ordenados pelo campo da
probabilidade de se encontrar a informação procurada em um determinado endereço. Serão
exibidos 15 registros por vez, com a possibilidade de visualização dos demais registros
encontrados, caso existam.
A quantidade de registros encontrados deverá ser informada ao usuário, permanecendo
sempre visível em um local de destaque.
68
MARCHIONINI, Gary. Information seeking in electronic... .
80
As palavras digitadas pelo usuário poderão corresponder a mais de um assunto. Os
assuntos identificados deverão ser listados em um local que fiquem sempre visíveis,
destacando o assunto principal. Caso o usuário pretenda ir direto a um assunto identificado,
bastará clicar sobre ele. O assunto principal identificado pelo programa agente irá determinar
quais os registros que serão exibidos de imediato.
Cada registro exibido deverá informar ao usuário se o endereço que consta nele estava
no ar após a última verificação.
Figura 4.3.4 – Modelo de layout para exibição de resultados
Observa-se a riqueza da exibição de resultados nos seguintes detalhes:
1) O usuário já começa a interagir com o programa agente a partir do momento em que
percebe na visualização dos assuntos identificados (relacionados) o grau de
“conhecimento” do mesmo com relação a sua busca;
2) O usuário aumenta sua credibilidade no resultado apresentado quando percebe que o
índice está sendo constantemente verificado pelo programa agente, através da
observação do campo última verificação;
3) A probabilidade informada, juntamente com trechos do conteúdo das páginas,
permitem maior agilidade ao usuário para encontrar a informação, evitando que o
mesmo navegue por alguns links desnecessariamente;
PALAVRA-CHAVE: limpeza da urna eletrônica
ASSUNTOS IDENTIFICADOS
- Urna Eletrônica (PRINCIPAL)
- Preparação da Urna Eletrônica
- Transporte da Urna Eletrônica
QUANTIDADE TOTAL DE REGISTROS ENCONTRADOS: 50
ASSUNTO: URNA ELETRÔNICA
REGISTROS ENCONTRADOS: 20 EXIBE BLOCO: 1 2
SEQ PROB ENDEREÇO ORIGEM DATA PAG ÚLTIMA VERIFICAÇÃO
1 90% http://intranet/ce1 TRE-CE 12/08/00 ESTAVA NO AR
2 50% http://intranet/rn1 TRE-RN 10/07/00 NÃO ESTAVA NO AR
. .
. .
. .
15 30% http://intranet/pa1 TRE-PA 24/09/00 ESTAVA NO AR
Mais endereços...
81
4) A boa visibilidade da informação, através de uma interface limpa, proporciona
maior conforto ao usuário.
4.3.5 INTERAÇÃO COM O USUÁRIO
O programa agente interage com o usuário de duas formas: uma permitindo que o
usuário tome suas próprias iniciativas para efetuar a busca, através da manipulação direta das
opções da interface, ou servindo como um assistente, interagindo através de caixas de
diálogo. Essa última forma destina-se, principalmente, aos usuários iniciantes e àqueles que
não sabem exatamente o que estão procurando.
Pela manipulação direta, o usuário poderá submeter a busca digitando palavras que se
relacionem com o assunto e realizando filtros, por assunto ou por origem, nas respectivas
listas de escolha. Quando o usuário apenas selecionar o assunto e não digitar nenhuma
palavra-chave, o programa agente trará de imediato todos os registros daquele assunto no
índice. Já o filtro origem não poderá ser usado sozinho.
No caso da digitação de palavras-chaves, o programa agente deverá proceder da
seguinte forma:
1) Da esquerda para direita, analisar as palavras individualmente e depois formar
grupos de palavras para serem analisadas;
2) Em cada análise de palavra ou grupo de palavras, verificar se existe correspondência
com os termos da tabela Assunto;
3) Ao encontrar correspondência, identificar o assunto do índice e inserí-lo em uma
lista de assuntos identificados;
4) Se um assunto específico do filtro tiver sido previamente selecionado, verificar se
existe relacionamento com o assunto que está sendo identificado;
5) Caso não exista filtro de assunto, exibir todos os assuntos encontrados, identificando
o principal.
82
A opção de busca avançada será aquela na qual o usuário terá que interagir com o
programa agente através de perguntas e repostas objetivas com no máximo três opções de
escolha. Tendo como a única pergunta aberta e inicial: “qual a informação que o usuário
deseja encontrar?”. A partir daí o programa agente tentará conduzi-lo ao encontro da
informação. O “conhecimento” que o programa agente possui, advindo da ontologia, é
decisivo para que ele consiga ter uma boa interação com o usuário.
4.4 INTEGRAÇÃO DAS PARTES
O coração do programa está centrado na criação e manutenção do índice. Uma vez
criado, o índice passará a ter o campo endereço do seus registros constantemente verificado e
sofrerá manutenções periódicas para a alteração de seus dados em caso de necessidade. O
índice tem como sua principal característica o dinamismo, por lidar com informações voláteis.
A exibição dos resultados e a interatividade do programa agente são voltadas
diretamente para o usuário, representando o elo de ligação entre o usuário e o índice
semântico. A figura 4.4 demonstra a integração entre as partes do programa.
Figura 4.4 – Integração das partes do programa agente
--------
--------
--------
-----
Onde encontro
informação
sobre urna
eletrônica ?
Criação
Verificação
Manutenção
Exibição de
resultados
Interação
com usuário
ÍNDICE
USUÁRIO
83
4.5 RECURSOS UTILIZADOS NA IMPLEMENTAÇÃO
A linguagem de programação JAVA foi utilizada para a implementação, por ser
independente de plataforma e apresentar recursos especiais necessários para se trabalhar em
ambiente de Internet/intranet. O banco de dados utilizado foi o Access da Microsoft.
O programa desenvolvido em JAVA utiliza os recursos de Applets e de Servlets.
Os Applets, miniaplicativos que podem ser inseridos em páginas Web, foram
necessários para se fazer a indexação semântica, e para permitir opções de filtro e outras
informações na interface do usuário. Sua utilização tornou-se obrigatória durante a
implementação devido à necessidade de conexão ao banco de dados para a realização de
algumas tarefas.
No momento em que uma busca é submetida, um Servlet, miniaplicativo residente no
servidor, é chamado para montar e exibir ao usuário, dinamicamente, a nova página HTML
com o resultado encontrado. Toda consulta feita pelo usuário segue o caminho:
HTML (APPLET) ó SERVLET ó BD.
4.6 PROTÓTIPO DESENVOLVIDO
Para que o catálogo (índice semântico) se tornasse uma realidade, foi necessária a
subdivisão da implementação em três módulos:
- Um Applet para os recursos que deveriam rodar em background, como a
criação, verificação e manutenção do índice;
- Um Applet para permitir a interação com o usuário na realização da busca; e
- Um Servlet para exibir os resultados encontrados.
O módulo indexador do programa agente, em fase de testes, utilizando uma ontologia
com apenas dez conceitos, levou cerca de duas horas e meia para visitar mais de dez mil
páginas na intranet da Justiça Eleitoral em todo o país, catalogando vinte mil cento e catorze
registros na base de dados, conforme demonstrado acima neste capítulo.
Os fontes desses programas encontram-se no Anexo 3 para servir de demonstração e de
estímulo ao desenvolvimento de melhorias futuras por qualquer programador.
A seguir, serão mostradas as principais telas do programa durante sua execução,
observando que elas foram extraídas da visualização do mesmo em um browser.
84
Figura 4.6.1 – Tela inicial do protótipo
A simplicidade da interface é o ponto marcante dessa tela inicial do protótipo. Uma
informação adicional pode ser observada no canto inferior esquerdo, permitindo que o usuário
tome conhecimento sobre quais TREs ou TSE ficaram ausentes do catálogo.
Figura 4.6.2 – Tela de resultados encontrados
A tela de resultados encontrados apresenta clareza, procurando facilitar a vida do
usuário durante sua leitura.
85
Figura 4.6.3 – Tela de solicitação de exibição de mais resultados
A figura 4.6.3 também exibe uma tela de resultados encontrados, entretanto na mesma
está circulada a opção do usuário visualizar mais links, pois o programa lista apenas quinze
por vez, de acordo com o ranking.
Observando com maior acuidade a descrição do conteúdo do décimo quarto item da
figura 4.6.3, percebe-se que o termo consultado, urna eletrônica, não está presente. Ocorreu
que o termo “ue” presente, quase no final da descrição, era equivalente ao termo “urna
eletrônica” submetido na busca e por isso o endereço da página foi catalogado e listado.
4.7 LIMITAÇÕES DO PROTÓTIPO
Dentre as limitações do protótipo, ou seja, aquilo que não foi possível ser concretizado
devido a fatores externos e que deverá ser alvo de futuras pesquisas, destaca-se a opção de
busca interativa, ou melhor dizendo, a opção de refinamento da busca.
UM MODELO DE INDEXAÇÃO SEMÂNTICA
PARA INTRANET
CAPÍTULO 5: Estudo de Caso
87
5 ESTUDO DE CASO
“Tudo o que somos é o resultado do que pensamos.”
(Budha)
5.1 CONTEXTUALIZAÇÃO
O problema a ser descrito a seguir encontra-se nos sites da rede intranet da Justiça
Eleitoral. A ausência de mecanismos de busca, o fácil acesso aos recursos de hardware e
software da mesma, através do TRE-CE, a maioria do sites com páginas no formato HTML,
bem como o baixo nível de intercâmbio de informações via intranet entre seus diversos órgãos
favoreceu a escolha dessa Instituição.
A Justiça Eleitoral existe como o órgão normatizador e executor das eleições oficiais da
República Federativa do Brasil. Ela é composta por três níveis hierárquicos conforme a figura
5.1. De um modo geral, no topo encontra-se o Tribunal Superior Eleitoral – TSE, responsável
pela padronização dos procedimentos eleitorais. É no TSE que ocorre o desenvolvimento dos
sistemas eleitorais, do projeto de modelos da urna eletrônica e de qualquer outro sistema
informatizado que seja de uso obrigatório por parte das demais instâncias durante uma
eleição.
Figura 5.1 – Hierarquia da Justiça Eleitoral
No nível intermediário estão os Tribunais Regionais Eleitorais – TRE presentes em cada
unidade da Federação e no Distrito Federal. Cada TRE serve como um órgão responsável por
executar as instruções provenientes do TSE e por repassá-las às Zonas Eleitorais do seu
Estado quando necessário, tendo autonomia para definir a estratégia da execução e do repasse.
No último nível, situam-se as Zonas Eleitorais – ZE que são as entidades responsáveis pelo
atendimento direto ao eleitor no dia a dia e pela execução dos trabalhos eleitorais.
TSE
TRE TRE TRE
ZEZEZE
88
Dentro desse contexto, interligando todos os níveis, em termos de compartilhamento de
informação, existe uma rede de computadores intranet com sites informativos sobre as
atividades desempenhadas pelos órgãos da Justiça Eleitoral.
A rede intranet pode ser acessada de qualquer nível hierárquico, sendo composta por
servidores no TSE e nos TREs que hospedam seus respectivos sites. Os sites geralmente
contém informações sobre as atividades ligadas à realização dos trabalhos eleitorais de cada
Tribunal. Melhor dizendo, a partir da intranet é possível saber o que os Tribunais de outros
Estados estão fazendo.
Atualmente para se conseguir um bom intercâmbio de informação, o usuário deve
acessar todos os sites, um por vez, e dentro de cada site navegar entre os links existentes até
encontrar a informação desejada, caso ela exista.
Essa busca de informação consome muito tempo do usuário, tornando-se um dos
principais fatores de desestímulo a pesquisa e a troca de informações dentro da rede intranet
da Justiça Eleitoral. Dessa forma, muitos esforços na execução de algumas atividades
inerentes aos TREs, que poderiam ser evitados, são duplicados por essa dificuldade de
intercâmbio.
A abordagem desse problema tem como meta principal fazer com que haja ganho de
produtividade nos trabalhos realizados pelos TREs e TSE, isto é, que haja um maior
compartilhamento e acessibilidade de informações com a conseqüente redução de esforços
durante a fase de definição e execução dos planejamentos estratégicos de cada Tribunal
durante o período eleitoral.
5.2 PERFIL DO PROBLEMA
O problema em estudo possui o seguinte perfil:
a) Boa parte dos usuários com pouco conhecimento sobre programas navegadores (browser)
de Internet/intranet;
b) Maioria dos sites desenvolvidos em HTML, sem obedecer a nenhuma padronização;
c) Isolamento dos sites, falta de relacionamento entre as equipes mantenedoras;
d) Falta de mecanismos de busca que permitam o acesso rápido e fácil ao conteúdo de todos
os sites simultaneamente, através de um índice semântico;
e) Falta de mecanismos orientadores que auxiliem os usuários a encontrar a informação
desejada, ou seja, de mecanismos de refinamento de buscas.
89
O perfil descrito acima mostra que os usuários são inexperientes e que a adoção de um
mecanismo de busca baseado em indexação por força bruta não resolveria o problema por
completo, pois em algumas buscas o usuário poderia ter como resultado vários links sem
nenhum relacionamento com o termo pesquisado.
Faz-se necessário o uso de algumas técnicas de Inteligência Artificial, dentre elas o uso
de ontologia, bem como o uso de heurística de usabilidade, para tornar a busca e qualquer
provável refinamento mais racional e eficiente. Será desenvolvido um protótipo de programa
agente para indexar semanticamente as páginas visando facilitar a busca de informação.
O programa agente terá uma base de conhecimento com uma ontologia específica da
Justiça Eleitoral, principalmente no tocante ao planejamento e execução das atividades
envolvidas em uma eleição, que é a razão de ser da JE. Isto significa que os resultados
apresentados em uma busca ou em um refinamento terão uma maior probalidade de sucesso
quando estiverem dentro desse escopo pré-estabelecido.
5.3 SOLUÇÃO PROPOSTA
O programa agente indexador será projetado para residir em apenas um servidor da
rede, o servidor do TRE-CE, a partir do qual realizará todas as suas funções, dentre as quais
destacam-se: a indexação semântica de endereços, com visitas periódicas aos sites da Justiça
Eleitoral de todo o país, e a assistência aos usuários.
O programa agente realizará as seguintes tarefas que apresentam algumas das
características estudadas no capítulo 2:
RACIONALIDADE
- Criar um índice semântico de endereços dos sites ordenado por assunto de acordo com
sua base de conhecimento (ontologia), estabelecendo um ranking para os endereços de
cada assunto encontrados;
PERSISTÊNCIA
- Verificar periodicamente se os endereços contidos no índice continuam no ar;
PERCEPÇÃO e REATIVIDADE
- Refazer o índice quando “perceber” que houve mudança no conteúdo de algum site;
90
ATUAÇÃO
- Listar os endereços, solicitados pela busca, ordenados pelo ranking em que se
encontram no índice, listando primeiro aqueles endereços com maior probabilidade de
conter a informação requerida;
COMUNICAÇÃO e CONFIABILIDADE
- Interagir com o usuário para tentar guiá-lo ao encontro da informação, quando
solicitado, ou através da própria interface de resultado das buscas.
O usuário terá duas opções para submeter suas buscas: através da simples digitação de
palavras-chaves ou através do auxílio do programa agente.
O resultado das buscas será uma relação de endereços, em que cada registro será
composto pelos seguintes campos:
- O link do endereço da página;
- A probalidade de sucesso do encontro da informação;
- Trechos do conteúdo da página, com o assunto em destaque;
- O órgão (TRE/TSE) de origem;
- A data da última atualização; e
- A informação se na última verificação do programa a página estava no ar.
Para acessar a informação, o usuário terá que simplesmente clicar no link do endereço
da página listado.
5.4 BENEFÍCIOS A SEREM ALCANÇADOS
Prevê-se que o sucesso da implementação do protótipo acarreta em uma série de
benefícios à Instituição em estudo, entre as quais cita-se:
a) Ganho de produtividade no trabalho;
b) Maior acessibilidade de informação;
c) Melhor intercâmbio via intranet entre os órgãos;
d) Melhor difusão da cultura de Internet/intranet dentro da Instituição;
e) Motivação de pessoal, fazendo com que todos ganhem uma visão global da
Instituição e que se sintam estimulados a também compartilhar as informações de
seus setores.
91
Com relação a Área da Ciência da Computação em estudo, outros benefícios serão
alcançados com o sucesso dessa pesquisa:
a) Disseminação da tecnologia de agentes inteligentes;
b) Comprovação do uso da Internet/intranet como um dos principais meios de busca de
informação;
c) Desenvolvimento de técnicas de busca mais eficientes com o auxílio da indexação
semântica;
d) Incentivo a pesquisas futuras.
5.5 TESTANDO O PROTÓTIPO DESENVOLVIDO
A partir dessa seção, serão demonstrados os resultados alcançados com a aplicação de
testes simulados com a utilização do protótipo desenvolvido. Uma análise sobre os resultados
obtidos, será usada para avaliar tanto a eficiência do modelo quanto a garantia da
implementação dos principais conceitos estudados.
Critérios singulares, imparciais e bem definidos informarão com exatidão se o programa
agente conseguiu produzir os benefícios para os quais fora projetado.
Todos os passos que envolveram o experimento estão descritos a seguir, em detalhes,
com a finalidade de tornar transparente o processo de obtenção dos resultados, permitindo
assim que se desenvolva facilmente um raciocínio lógico sobre as conclusões a serem
apresentadas no próximo capítulo.
5.6 METODOLOGIA PARA APLICAÇÃO DOS TESTES
Os testes foram realizados dentro da Instituição em estudo por essa pesquisa, o Tribunal
Regional Eleitoral do Ceará, pela facilidade de contato com os voluntários e pela
disponibilidade dos mesmos nos horários de intervalo. Uma sala isolada, aqui chamada de
laboratório, foi cedida para que o experimento pudesse ser aplicado sem sofrer interferências
de fatores externos.
Outro aspecto adotado foi o de trabalhar com apenas um voluntário por vez, facilitando,
assim, a disponibilização e alocação dos equipamentos necessários. Entretanto a principal
92
intenção era evitar qualquer tipo de constrangimento ou pressão ao voluntário durante a
execução do experimento, deixando-o a vontade para o cumprimento das tarefas solicitadas.
Essa individualização indiretamente permitia uma medição mais precisa e transparente dos
dados a serem coletados.
Os dados coletados dos usuários tiveram origem direta e indireta. Os de origem direta
foram provenientes de um questionário e os de origem indireta foram coletados via
observação e medição do tempo durante a execução das tarefas que envolviam a utilização do
programa agente, considerando-se o tempo como a variável fundamental para a demonstração
do sucesso alcançado.
De acordo com LAKATOS
69
“o questionário é um instrumento de coleta de dados,
constituído por uma série ordenada de perguntas, que devem ser respondidas por escrito e sem
a presença do entrevistador (grifo nosso)”. Ele afirma ainda que as perguntas devem estar de
acordo com os objetivos geral e específicos a serem atingidos e que devem ser de fácil
tabulação.
Baseado no modelo descrito acima por Lakatos, definiu-se a estrutura do questionário a
ser aplicado. Por questões de ordem cronológica, a aplicação do questionário foi realizada em
dois momentos: antes e após a utilização da ferramenta. No primeiro momento, o questionário
tinha o objetivo de extrair os seguintes dados sobre o usuário:
- Qual a experiência dele com Informática;
- Qual sua visão sobre o compartilhamento de informação dentro da Instituição; e
- Qual o seu nível de aceitação em relação a novas tecnologias.
Esses três pontos principais avaliam se o voluntário precisa de programas assistentes
para facilitar o uso da Informática, se ele está motivado para melhorar seu desempenho como
profissional e se ele é capaz de se adequar às mudanças, respectivamente. Com esses dados
torna-se possível fazer uma projeção sobre a sua performance no experimento.
Após a execução do experimento, é aplicado um novo questionário com a intenção de
adquirir um feedback do usuário sobre a utilização da ferramenta e sobre sua aplicabilidade.
Trata-se de uma forma descentralizada de análise do custo versus benefício da mesma, na qual
se encontra um bom indicador da sua real necessidade.
Durante o experimento em si, o usuário será submetido a realização de tarefas com e
sem o auxílio do protótipo desenvolvido para que o tempo possa ser medido. Também
69
LAKATOS, Eva Maria e MARCONI, Marina de Andrade. Fundamentos de metodologia científica. Atlas,
1991, p. 201
93
pretende-se medir o grau de assistência do protótipo, e para isso o voluntário será submetido a
utilizá-lo com e sem a sua opção de ajuda.
5.7 AMOSTRAGEM
O Tribunal Regional Eleitoral do Ceará é composta por cinco áreas diferentes:
Informática, Judiciário, Administração, Recursos Humanos e Financeira. Com o objetivo de
conseguir uma amostra representativa foram selecionados voluntários de todas as áreas.
Durante a seleção dos voluntários foi exigido conhecimento mínimo em Informática, ou
seja, deveriam ser pessoas que trabalhassem operando o computador de alguma forma para
realizar suas atividades nos seus setores. Essa exigência teve o caráter de tentar analisar a
performance da ferramenta com pouca interferência de fatores externos.
Embora fosse exigido conhecimento básico em Informática, não houve restrição sobre o
grau de experiência ou aprofundamento do usuário nessa área. Nesse aspecto procura-se
analisar a usabilidade da ferramenta, visto que ela foi projetado para ser utilizada por qualquer
tipo de usuário.
A amostragem final ficou composta por trinta voluntários, representando cerca de dez
por cento do quadro de funcionários do TRE-CE distribuídos nas diversas áreas. Conforme
dito acima, eles foram selecionados de acordo com suas habilidades na operação de
computador. Além disso, eles deveriam possuir disponibilidade de tempo e demonstrar
interesse em participar. Para cada voluntário que se propôs a contribuir com o experimento foi
pedido que o mesmo assinasse um termo de concordância autorizando a análise e divulgação
dos dados coletados.
5.8 RELEVÂNCIA DOS TESTES
Os dados a serem coletados após receberam as devidas tabulações representam uma
tabela verdade sobre o relacionamento dos diferentes tipos de usuário com a ferramenta. Esse
comparativo torna-se possível pela obtenção do perfil do usuário, expresso diretamente
através do preenchimento de questionário, e pela obtenção das medidas de tempo de execução
das tarefas solicitadas durante a aplicação do experimento.
94
Para fazer com que esses dados e suas correlações expressassem de fato a verdade,
realizou-se um trabalho de esclarecimento junto aos voluntários antes que eles iniciassem o
preenchimento do primeiro questionário. Esse esclarecimento levava cerca de três minutos,
procurando fazer com que o usuário se conscientizasse quanto ao objetivo geral do teste. Nele
também eram repassadas orientações sobre como e em quanto tempo o usuário realizaria suas
tarefas.
A conscientização do usuário sobre a importância do seu desempenho no teste foi
tratada como um elemento chave para a obtenção do sucesso durante a aplicação do mesmo.
5.9 APLICAÇÃO DOS TESTES
Após a fase de seleção dos voluntários, iniciou-se a aplicação dos testes em um período
ininterrupto de três dias, com a participação de dez voluntários por dia. Esses números foram
definidos para que o experimento fosse aplicado ao mesmo tempo com tranquilidade,
evitando-se a perda de qualidade, e com determinação, mantendo-se a mesma concentração
durante o período de aplicação.
O período de aplicação em três dias ininterruptos também trazia consigo um objetivo
intrínseco. Diminuía o tempo para que os voluntários que já tinham participado pudessem
trocar idéias com os que ainda iriam participar, provavelmente influenciando-os. Embora
fosse pedido a todos que mantivessem sigilo até a participação do último voluntário.
O ambiente da aplicação era uma sala reservada que possibilitava a concentração do
voluntário. A aplicação do experimento consistia de 4 etapas:
i) Orientações gerais sobre a aplicação;
ii) Preenchimento do questionário identificador do perfil do voluntário;
iii) Prática laboratorial do protótipo desenvolvido;
iv) Preenchimento do questionário de avaliação do protótipo.
O tempo de aplicação de cada etapa dependia do desempenho do voluntário, que era
deixado à vontade sobre esse aspecto. Entretanto, um tempo máximo para cada etapa foi
definido, de modo que, no total, o teste não ultrapassasse vinte minutos.
As etapas dos questionários já foram discutidas acima no tópico 5.2, para maiores
esclarecimentos deve-se consultar os mesmos no final deste documento.
95
Na prática laboratorial se pedia ao usuário que ele fizesse busca de informação sem a
utilização da ferramenta e logo em seguida com o seu auxílio. O tempo gasto em cada tarefa
era cronometrado para verificar a diferença.
Antes de iniciar a prática, juntamente com as orientações gerais, eram repassadas ao
usuário rápidas noções sobre a rede intranet da Justiça Eleitoral presente em todo o país e
sobre as opções disponíveis na ferramenta. A partir do momento em que o voluntário iniciava
a prática, eram permitidos apenas esclarecimentos sobre o que estava sendo solicitado. Em
nenhuma hipótese o pesquisador poderia intervir auxiliando o voluntário a realizar suas
buscas.
A informação a ser encontrada não obrigatoriamente deveria estar localizada em uma
única página, mas em duas ou até três páginas de diferentes sites. Isto quer dizer que o usuário
era submetido a dois tipos de busca: uma precisa que exigia o encontro de uma página
específica e uma complexa onde era preciso a coleta de dados em diferentes páginas para se
obter a informação.
Era pedido ao usuário que ele realizasse cinco buscas, as quais iriam evoluindo sua
complexidade na ordem em que eram solicitadas. Destaca-se, nesse ponto, que para evitar o
surgimento natural de qualquer insegurança, por parte dos usuários, quanto ao tempo, as
buscas solicitadas eram de termos conhecidos e utilizados no seu dia a dia.
Uma solicitação de busca, por vez, era submetida ao usuário para que fosse possível
fazer a cronometragem precisa do tempo gasto para a conclusão de cada uma. O usuário só
deveria receber a busca seguinte caso ele tivesse concluído a anterior ou alegasse
incapacidade para tal.
Os diferentes tipos de busca solicitados são usados para medir a utilidade da indexação
semântica.
5.10 AVALIAÇÃO DOS USUÁRIOS
Sem a ajuda do programa de busca, nenhum voluntário conseguiu encontrar, dentro do
tempo estabelecido, as informações solicitadas durante os testes, a menos que elas se
encontrassem no site do TRE-CE ou do TSE, os mais conhecidos pelo grupo.
Com o auxílio do programa de busca, as informações solicitadas foram todas
encontradas na metade do tempo permitido pelo teste, em média. Após o teste, a satisfação
96
dos voluntários, principalmente daqueles que responderam no questionário pela não
necessidade de um programa de busca, foi surpreendente.
Ficou comprovada a grande utilidade que tal ferramenta de busca proporciona, dentro
de uma intranet, para qualquer tipo de usuário, seja ele experiente ou não.
5.11 TABULAÇÃO DOS RESULTADOS
Uma análise estatística pode ser realizada, com base nos questionários aplicados, pela
tabulação das respostas obtidas.
Na fase inicial, antes da aplicação prática do experimento, as respostas do questionário1
geraram a tabulação descrita na tabela 5.1 abaixo.
PERGUNTAS RESPOSTAS
TOTAL
PERGUNTAS RESPOSTAS
TOTAL
1) ÁREA DE ATUAÇÃO Informática 11 6) AUMENTA PRODUTIVIDADE A TREs/TSE -
Judiciária 5 TROCA DE INFORMAÇÕES ENTRE TRE local 1
RH 3 os dois acima 29
Administrativa 8 7) MEIO ADEQUADO PARA TROCA Reuniões 5
Financeira 3 DE INFORMAÇÕES Relatórios 2
2) CONHECIMENTO
INFO
Básico 6 Meio eletrônico 23
Intermediário 19 8) ENCONTRA INFORMAÇÕES Colegas outro setor 10
Avançado 5 Colegas próximos 11
3) UTILIZA MICRO Diariamente 30 Sozinho (info) 9
Semanalmente
- 9) FERRAMENTA DE BUSCA Usaria 26
Mensalmente - Não usaria 4
4) UTILIZA INTRANET Diariamente 23 10) INFORMÁTICA CONTRIBUI NO SEU Sim 30
Semanalmente
7 DIA A DIA Não -
Mensalmente -
5) VISITA SITES DE Sim 20
OUTROS TREs/TSE Não 10
Tabela 5.1 – Respostas Questionário1
Essa tabulação traz os seguintes indicativos:
Maioria dos usuários possui conhecimento intermediário em Informática;
Cerca de 80% acessa diariamente a intranet;
Metade visita sites de outros TREs/TSE, principalmente do TSE (entrelinhas);
A informação não está acessível em um meio compartilhado, pois 70% utiliza o
contato direto com outros colegas para encontrá-la;
Todos acreditam que a Informática aumenta a produtividade do trabalho; e
Cerca de 90% usaria ferramenta de busca, caso existisse.
97
Pelos indicativos acima, constata-se que os usuários teriam perfil adequado para acessar
informações em um meio compartilhado, bastando apenas um incentivo e um catálogo fácil
de usar.
Na fase final, após a prática laboratorial, as respostas do questionário2 podem ser vistas
na tabela 5.2.
PERGUNTAS RESPOSTAS
TOTAL
1) FACILIDADE DE USO Pouca 2
DA FERRAMENTA Razoável 17
Muita 11
2) NECESSIDADE POR Nenhuma -
FERRAMENTA DE BUSCA Pouca 4
Razoável 7
Muita 19
Tabela 5.2 – Respostas Questionário2
Observa-se que interfaces mais interativas são solicitadas pelos usuários e que todos
acham indispensável uma ferramenta de busca que os conduza ao encontro da informação.
UM MODELO DE INDEXAÇÃO SEMÂNTICA
PARA INTRANET
CAPÍTULO 6: Conclusões e Trabalhos
Futuros
99
6 CONCLUSÕES E TRABALHOS FUTUROS
“O insucesso é apenas uma oportunidade para começar de novo com mais inteligência.”
(Henry Ford)
6.1 RESUMO DA PROPOSTA APRESENTADA
A proposta apresentada tem por objetivo implementar um modelo de indexação para o
conteúdo das páginas de uma intranet, explorando alguns conceitos da tecnologia de agentes e
de indexação semântica.
O índice implementado deveria permitir buscas mais rápidas e precisas em benefício
dos usuários. As consultas submetidas pelos usuários deveriam ter como resposta um conjunto
de endereços de páginas inter-relacionados e realmente voltados para os assuntos pretendidos.
A construção do índice, processo de ligação dos termos às páginas, deveria se basear em
conceitos advindos de uma ontologia pré-definida, da qual também seriam extraídos fatores
semânticos que contribuiriam para o cálculo da probabilidade.
A probabilidade seria uma informação adicional constante no índice para indicar ao
usuário a precisão de se encontrar um assunto em determinada página. O seu cálculo deveria
adotar critérios estatísticos e semânticos para garantir um conjunto-resposta com endereços
indicados a partir da identificação tanto de conhecimento explícito quanto tácito nas páginas
indexadadas.
A ontologia seria criada manualmente, descrita em um formato próprio, para facilitar a
identificação dos termos e seus relacionamentos. A partir dessa descrição, ela seria inserida,
também por um processo manual, em tabelas auxiliares do banco de dados para permitir que
o programa agente a utilizasse durante a criação e manutenção do índice.
Por último, deveria existir um processo interativo de refinamento das buscas no índice,
no qual seria oferecido apoio ao usuário através de sugestões em caixas de diálogos, como
ocorre atualmente com os agentes Wizards de alguns aplicativos da Microsoft.
Em suma, a proposta teria uma fase manual de definição dos termos e relacionamentos
que deveriam constar no índice, fundamental para a semântica do mesmo, e uma fase
automática de leitura do conteúdo das páginas com a conseqüente catalogação no índice.
100
6.2 A IMPLEMENTAÇÃO DO MODELO
O modelo foi implementado e testado por completo em relação aos aspectos do trabalho
de indexação e de consulta ao índice. Somente a rotina de refinamento da busca não foi
concluída e ficou para trabalhos futuros, já que não se tratava do essencial proposto.
Vale ressaltar que a implementação foi testada em nível de protótipo, em um dos
computadores da rede do Tribunal Regional Eleitoral do Ceará, que funcionava como servidor
no momento da construção do índice e dos testes aplicados.
Quanto às limitações do modelo implementado, destaca-se a especifidade do conteúdo
catalogado pelo programa indexador. O índice tratava apenas os termos pré-definidos de uma
ontologia, sendo esse um dos fatores decisivos para que o modelo produzisse bons resultados.
Dentro da intranet da Justiça Eleitoral, o modelo de indexação proposto comprovou ser
bem mais eficiente, em termos de gasto de tempo para localização da informação desejada,
que os modelos tradicionais encontrados na Web, isso de acordo com a opinião dos usuários
que participaram dos testes.
6.3 O DIFERENCIAL DA INDEXAÇÃO SEMÂNTICA
As três características marcantes da tecnologia de agentes no protótipo desenvolvido
foram a racionalidade, a persistência e a comunicabilidade. Elas fizeram a diferença dando
a impressão ao usuário de que ele estava utilizando um programa “esperto”, um assistente
pessoal, capaz de entender suas necessidades e suprimi-las da melhor forma possível.
A racionalidade estava presente internamente, na indexação semântica, através da
criação e manutenção do índice. A persistência caracterizava-se na atualização contínua do
índice, fazendo com que os usuários estabelecessem uma relação de confiança com o
programa. E a comunicabilidade estava destacada na capacidade de interação do programa
com o usuário, através de sua interface, sempre procurando conduzi-lo ao encontro da
informação.
A indexação semântica, ao contrário da indexação puramente estatística, possibilita,
com maior probabilidade, que o usuário acesse rapidamente mais informações sobre um
determinado assunto ao mesmo tempo, inclusive fazendo com que o usuário possa aprofundar
suas pesquisas a partir do conhecimento da existência de uma relação do assunto pesquisado
101
com outros assuntos a ele vinculados no índice. Essa característica gera o grande diferencial
do modelo de indexação semântica.
6.4 ANÁLISE DOS RESULTADOS ALCANÇADOS
Uma análise sobre os resultados alcançados sugere as seguintes conclusões:
i) A informação, esteja ela em qualquer meio de armazenamento, seja ela estrutura
ou não, só tem valor quando a mesma é acessível, ou seja, quando existe algo
que informe ao usuário onde ela se encontra;
ii) O tempo que o usuário leva até encontrar a informação desejada é o motivador
principal para que ele mantenha o hábito da pesquisa. Quando ocorre a
percepção de que o conjunto-resposta não se trata de uma loteria e sim de
informações bem trabalhadas, gera-se uma cultura positiva para a pesquisa com
a utilização de ferramentas de busca;
iii) A utilização de uma intranet, como meio de troca de informações entre os
diversos órgãos de uma instituição, permite maior agilidade na execução das
tarefas desempenhadas pelos seus funcionários, provocando um aumento de
produtividade. A acessibilidade da informação faz com que o usuário se sinta a
vontade para navegar pelo hiperespaço e a querer compartilhar novas
informações;
iv) O sucesso de qualquer programa de busca de informação está na clareza de sua
interface e no seu mecanismo de indexação;
v) Quanto maior a semântica implementada no índice, maior será a precisão dos
resultados encontrados.
6.5 TRABALHOS FUTUROS
A automatização do acréscimo de termos na ontologia e, conseqüentemente, da sua
atualização na base de dados; a implementação de mecanismos de inferência na ontologia; a
melhoria do processo de leitura das páginas; e a implementação da busca interativa
(refinamento da busca) são os principais tópicos a serem abordados em trabalhos futuros.
102
A representação da ontologia no formato RDF (Resource Description Framework),
descrito no capítulo da introdução, permitirá, através de um processo contínuo e transparente,
uma atualização automática ou semi-automática dos termos e seus relacionamentos no índice.
Ainda com relação a ontologia, também precisa ser implementado nas tabelas auxiliares
da base de dados um mecanismo lógico que estabeleça, explicitamente, uma classificação das
relações hierárquicas do tipo “pai e filho” entre os termos presentes. Isso proporcionaria
maior precisão nas informações, sobre assuntos relacionados, que são retornadas ao usuário
pelo programa agente durante a visualização dos resultados encontrados na busca.
O algoritmo de leitura das páginas, no qual ocorre a identificação física dos termos nas
mesmas, precisa ser melhorado, em decorrência do tempo gasto durante sua execução. Deverá
ocorrer uma reestruturação no processo atual de comparação das strings (grupos de
caracteres).
A interatividade do programa agente com o usuário no refinamento das buscas facilitará
o encontro da informação, principalmente para usuários inexperientes. Nesse ponto, é de
fundamental importância que o programa agente interaja com o usuário, auxiliando-o, através
de informações provenientes de inferências na ontologia.
Finalizando, sugere-se que os trabalhos futuros continuem sendo desenvolvidos com
base nos conceitos oriundos da Web semântica.
“A descoberta da informação engrandece o ser humano.”
(Jansley Fonsêca)
UM MODELO DE INDEXAÇÃO SEMÂNTICA
PARA INTRANET
BIBLIOGRAFIA
104
BIBLIOGRAFIA
BAEZA-YATES, R., et al. Modern information retrieval. Addison-Wesley, 1999;
BERNERS-LEE, Tim; HENDLER, James & LASSILA, Ora. The Semantic Web. [on line]
Disponível na Internet via WWW. URL:
http://www.sciam.com/2001/0501issue/0501berners-lee.html, 2001;
BIGUS, Joseph P. Constructing intelligent agents with Java: a programmer`s guide to smarter
applications. John Wiley & Sons, 1998;
BLUM, Thom; KEISLAR, D.; WHEATHON, J. & WOLD, E. Writing a web crawler in the
Java programming language. [on line] Disponível na Internet via WWW. URL:
http://developer.java.sun.com/developer/technicalArticles/ThirdParty/WebCrawler/index.h
tml, 1998;
BRADSHAW, Jeffrey M. Software agents. Second Edition, Calif.:AAAI Press, 1997;
BRAY, Tim. What is RDF?. [on line] Disponível na Internet via WWW. URL:
http://www.xml.com/pub/a/2001/01/24/rdf.html, 2001;
CAGLAYAN, A. & HARRINSON, C. Agent sourcebook: a complete guide to desktop,
Internet and intranet agents. John Wiley & Sons, 1997;
CESÁRIO, M.; MEIRA, W. Jr.; FONSECA, R. e ZIVIANI, N. Melhorando a qualidade de
serviços de busca na Internet. Universidade Federal de Minas Gerais. Anais do XIX
Congresso Nacional da Sociedade Brasileira de Computação, 1998, Vol. I;
DAVENPORT, Thomas H. & PRUSAK, Laurence. Working knowledge: how organizations
manage what they know. Havard Business School Press, 1998;
DEITEL, H. M. & DEITEL, P. J. Java, como programar. 3ª ed., Bookman, 2001;
DYKE, Neil W. Van; LIEBERMAN, H. & MAES, P. Butterfly: a conversation-finding agent
for Internet relay chat. In proceedings of the 1999 International Conference on Intelligent
User Interfaces, Jan 99, Redondo Beach, CA, USA. [on line] Disponível na Internet via
WWW. URL: http://agents.www.media.mit.edu/groups/agents/publications/, 1999;
EDVINSSON, Leif & MALONE, Michael S. Capital intelectual. Makron Books, 1998;
FARIAS, Pedro Porfírio Muniz & ALBUQUERQUE, Patrícia. Projeto de pesquisa do
Mestrado em Informática Aplicada. Universidade de Fortaleza, junho/2001;
FONER, Lenny. What`s an agent anyway ? A Social case study. [on line] Disponível na
Internet via WWW. URL: http://agents.www.media.mit.edu/groups/agents/publications/,
1994;
105
FRANKLIN, S. & GRAESSER, A. It`s an agent or just a program ?: A Taxonomy for
autonomous agents. [on line] Disponível na Internet via WWW. URL:
http://www.msci.memphis.edu/~franklin/AgentProg.html, 1996;
GALLIANO, A. Guilherme. O método científico: teoria e prática. Harbra, 1986;
HAROLD, R. Elliotte. Java networking programming. O’Reilly, 1997;
HENDLER, James. Is there an intelligent agent in your future ? [on line] Disponível na
Internet via WWW. URL: http://helix.nature.com/webmatters/agents/agents.html, 1999;
KLUSH, Matthias. Intelligent Information Agents: agent-based information discovery and
management on the Internet. Berlin: Springer-Verlag, 1999.
KODA, Tomoko. & MAES, Pattie. Agents with faces: the effect of personification. MIT
Media Lab. [on line] Disponível na Internet via WWW. URL:
http://agents.www.media.mit.edu/groups/agents/publications/, 1996;
KOTZ, David & GRAY, Robert S. Mobile agents and the future of the Internet. [on line]
Disponível na Internet via WWW. URL: http://www.cs.dartmouth.edu/~dfk/papers/kotz:future2/, 1999;
LAKATOS, Eva Maria e MARCONI, Marina de Andrade. Fundamentos de metodologia
científica. Atlas, 1991;
LASSILA, Ora & SWICK, Ralph R. Resource Description Framework (RDF) Model and
Syntax Specification. W3C Recommendation. [on line] Disponível na Internet via WWW.
URL: http://www.w3.org/TR/1999/REC-rdf-syntax-19990222, 1999;
LAUREL, B. Interface agents: metaphors with caracter. In BRADSHAW, Jeffrey M.
Software agents. Second Edition, Calif.:AAAI Press, 1997, cap. 4;
LEONARD, Andrew. Bots: the origem of new species. Penguin Books, 1998;
LIEBERMAN, H. Personal assistants for the Web: a MIT perspective. In KLUSH, Matthias.
Intelligent Information Agents: agent-based information discovery and management on the
Internet. Berlin: Springer-Verlag, 1999, cap. 12;
MAES, Pattie. Agents that reduce work and information overload. In BRADSHAW, Jeffrey
M. Software agents. Second Edition, Calif.:AAAI Press, 1997, cap. 8;
MAES, Pattie. & SHNEIDERMAN, Ben. Intelligent software agents vs. user-controlled direct
manipulation: a debate. [on line] Disponível na Internet via WWW. URL:
http://www.acm.org/sigchi/chi97/proceedings/panel/jrm.htm, 1997;
MALONE, T. W.; GRANT, K. R. & LAI, K.-Y. Agents for information sharing and
coordination: a history and some reflections. In BRADSHAW, Jeffrey M. Software agents.
Second Edition, Calif.:AAAI Press, 1997, cap. 7;
106
MARCHIONINI, Gary. Information seeking in electronic environments. Cambridge Univ.
Press, 1997;
MARTINS, R.; CHAVES M.; PIRMEZ L. e RUST L. F. Experiments in the mobile agent
technology. Universidade Federal do Rio de Janeiro. [on line] Disponível na Internet via
WWW. URL: http://, 1997;
MENCZER, F. & MONGE, Alvaro E. Scalable Web search by adaptive online agents: an
infospiders case study. In KLUSH, Matthias. Intelligent Information Agents: agent-based
information discovery and management on the Internet. Berlin: Springer-Verlag, 1999,
cap. 14;
MURCH, Richard. & JOHNSON, Tony. Intelligent software agents. Prentice Hall, 1999;
NEGROPONTE, N. Agents: from direct manipulation to delegation. In BRADSHAW, Jeffrey
M. Software agents. Second Edition, Calif.:AAAI Press, 1997, cap. 3;
NONAKA, Ikujiro. & TAKEUCHI, Hirotaka. Criação de conhecimento na empresa. Campus,
1997;
NORMAN, D. A. How might people interact with agents ? In BRADSHAW, Jeffrey M.
Software agents. Second Edition, Calif.:AAAI Press, 1997, cap. 2;
NWANA, Hyacinth S. Software agents: an overview. British Telecommunications
Laboratories, [on line] Disponível na Internet via WWW. URL:
http://www.labs.bt.com/projects/agents/publish/papers.htm , 1996;
NWANA, Hyacinth S. & NDUMU, Divine T. A Perspective on software agents research.
British Telecommunications Laboratories, [on line] Disponível na Internet via WWW.
URL: http://www.labs.bt.com/projects/agents/publish/papers.htm , 1999;
OLIVEIRA, Claudia. e DUARTE, Julio C. Data fusion in expert meta-searching the web.
Instituto Militar de Engenharia. Anais do XIX Congresso Nacional da Sociedade Brasileira
de Computação, 1998, Vol. I;
OUAHID, Hicham. & KARMOUCH, Ahmed. An XML-based web mining agent. University
of Ottawa. [on line] Disponível na Internet via WWW. URL: http://, 1999;
RITCHIE, George. It’s in the Mailbot. In PC AI magazine, Vol 12, Number 1, Jan/Fev 98,
1998;
RUSSEL, Stuart. & NORVIG, Peter. Artificial intelligence: a modern approach. Prentice
Hall, 1995;
SHNEIDERMAN, Ben. Designing the user interface: strategies for effective human-computer
interaction. Third edition, Addison-Wesley, 1998;
107
SHNEIDERMAN, Ben. Direct manipulation vs. agents: paths to predictable, controllabel, and
comprehensible interfaces. In BRADSHAW, Jeffrey M. Software agents. Second Edition,
Calif.:AAAI Press, 1997, cap. 6;
SHOHAM, Yoav. An overview of agent-oriented programming. In BRADSHAW, Jeffrey M.
Software agents. Second Edition, Calif.:AAAI Press, 1997, cap. 13;
SMITH, D.C.; CYPHER, A. & SPOHRER, J. KidSim: programming agents without a
programming language. In BRADSHAW, Jeffrey M. Software agents. Second Edition,
Calif.:AAAI Press, 1997, cap. 9;
SOUZA, Eliane M. S. Uma Estrutura de agentes para assessoria na Internet. Universidade
Federal de Santa Catarina. [on line] Disponível na Internet via WWW. URL:
http://www.eps.ufsc.br/disserta97/souza/, 1996;
SYCARA, K. In-context information management through adaptive collaboration of
intelligent agents. In KLUSH, Matthias. Intelligent Information Agents: agent-based
information discovery and management on the Internet. Berlin: Springer-Verlag, 1999,
cap. 4;
TERVEEN, Loren G. & MURRAY, La Tonda. Helping users program their personal agents.
In Proceedings of ACM CHI-96, April 13-18, 1996, p. 355-361;
TUDHOPE, Douglas & CUNLIFFE, Daniel. Semantically indexed hypermedia: linking
information disciplines. ACM Computing Surveys, Vol. 31, Número 4es, dezembro 1999;
WATSON, Mark. Intelligent Java applications for the Internet and intranets. Morgan
Kaufmann Publishers, 1997;
WOOLDRIDGE, Michael. & JENNINGS, Nicholas R. Pitfalls of agent-oriented
development. [on line] Disponível na Internet via WWW. URL:
http://agents.umbc.edu//Publications_and_presentations/Recommended_Papers/index.shtml , 1998;
WOOLDRIDGE, Michael. & JENNINGS, Nicholas R. Intelligent agents: theory and practice.
[on line] Disponível na Internet via WWW. URL:
http://www.elec.qmw.ac.uk/dai/people/mikew/pubs/ker95/ker95-html.html , 1995;
YOUNGBLOOD, G. Michael. Web hunting: design of a simple intelligent web search agent.
[on line] Disponível na Internet via WWW. URL:
http://www.acm.org/crossroads/xrds5-4/webhunting.html , 2000.
UM MODELO DE INDEXAÇÃO SEMÂNTICA
PARA INTRANET
ANEXOS
109
ANEXO 1: ONTOLOGIA
ONTOLOGIA DA JUSTIÇA ELEITORAL
A definição dos conceitos e seus relacionamentos será demonstrada através de regras
visando facilitar a conversão para qualquer base de conhecimento.
CONCEITOS
Justiça Eleitoral => tem finalidade de promover Eleições respeitando uma Legislação;
JE => equivalente a Justiça Eleitoral;
Tribunal Superior Eleitoral => Órgão Superior da JE;
TSE => equivalente a Tribunal Superior Eleitoral;
Órgão Superior => define Padronização de Procedimentos e origina Jurisprudência;
Tribunal Regional Eleitoral => Órgão Intermediário da JE;
TRE => equivalente a Tribunal Regional Eleitoral;
Órgão Intermediário => define Planejamento Estratégico para Eleições;
Zona Eleitoral => Órgão Básico da JE;
ZE => equivalente a Zona Eleitoral;
Órgão Básico => atende Eleitor;
Cartório Eleitoral => Prédio onde funciona a ZE;
Prédio => local físico;
Eleições => escolha de Candidato para Cargo por meio de Voto de Eleitor em cumprimento a
Legislação;
Legislação => Lei e Resoluções que regulamentam Eleições;
Padronização de Procedimentos => desenvolve Sistemas e repassa Instruções por meio de
Treinamentos;
Jurisprudência => Decisões tomadas em Órgão Superior;
Planejamento Estratégico => define quais Atos Preparatórios executar dentro de um
Calendário para realizar Eleições;
Planejamento de Eleições => equivalente a Planejamento Estratégico;
Eleitor => Cidadão com direito ao Voto;
Candidato => é Eleitor e pertence a Partido Político e concorre a um Cargo;
Cargo => representa Eleitorado para tomar Decisões;
110
Voto => escolhe Candidato para um Cargo;
Lei => regras gerais;
Resoluções => procedimentos para o cumprimento da Lei;
Instruções => modo de fazer;
Sistemas => visa o Registro de Candidaturas e a Totalização dos Votos e a Divulgação dos
Resultados pertinentes às Eleições;
Treinamentos => ensina Instruções e transmite Informações;
Decisões => diz o que deve ser feito;
Calendário => define Prazos para executar Atividades;
Atividades => conjunto de ações;
Cidadão => pessoa maior de 16 anos;
Partido Político => Eleitorado com mesma Ideologia;
Eleitorado => grupo de Eleitores;
Ideologia => forma de pensar;
Totalização dos Votos => define Votação de cada Candidato;
Apuração => equivalente a Totalização dos Votos;
Divulgação dos Resultados => indica os Eleitos;
Informações => diz o que se passa;
Avisos => equivalente a Informações;
Prazos => data limite;
Eleitos => Candidatos vencedores;
Votação => soma dos Votos;
Juiz => é Eleitor e toma Decisões;
Promotor => é Eleitor e verifica o cumprimento da Lei;
Chefe de Cartório => é Eleitor e comanda as Atividades do Cartório Eleitoral;
Servidor => é Eleitor e trabalha na JE;
Mesário => é Eleitor e presta Serviços a JE e trabalha na Seção Eleitoral;
Escrutinador => é Eleitor e presta Serviços a JE e trabalha no Local de Apuração;
Delegado de Prédio => Cidadão responsável pelo Local de Votação;
Administrador de Prédio => equivalente a Delegado de Prédio;
Guardador de UE => equivalente a Delegado de Prédio;
Vigia => equivalente a Delegado de Prédio;
Seção Eleitoral => Local de Votação onde o Eleitor exerce o Voto;
Local de Apuração => Prédio onde ocorre a Totalização dos Votos;
111
Local de Votação => Prédio que contém no mínimo 1 Seção Eleitoral;
Serviços => realiza Atividades em prol das Eleições;
Atos Preparatórios => tem Vistoria dos Locais de Votação e Alistamento Eleitoral e
Treinamentos e Divulgação da Urna Eletrônica e Instalação de Sistemas e Registro de
Candidaturas e Convocação de Mesários e Convocação de Escrutinadores e Reunião com
Delegados de Prédio e Preparação das Urnas Eletrônicas e Transporte das Urnas Eletrônicas e
Distribuição de Material de Eleição;
Urna => é Urna Eletrônica ou Urna de Lona;
Urna Eletrônica => máquina p/ receber e somar Voto Eletrônico;
UE => equivalente a Urna Eletrônica;
Voto Eletrônico => Voto não registrado em Cédula;
Urna de Lona => recebe Voto Manual;
Voto Manual => Voto registrado em Cédula;
Cédula => formulário para votar;
Vistoria dos Locais de Votação => verifica estrutura física do Local de Votação;
Alistamento Eleitoral => atualiza Cadastro Eleitoral;
Cadastro Eleitoral => guarda Informações sobre Eleitor através do Título de Eleitor;
Título de Eleitor => número que identifica o Eleitor;
Divulgação da Urna Eletrônica => Treinamento de Eleitor;
Instalação de Sistemas => faz Download e instala Sistemas;
Download => recupera Arquivo através da Rede de Computadores;
Arquivo => contém Informações para a realização das Eleições;
Rede de Computadores => meio físico para troca de Arquivo;
Registro de Candidaturas => define os Candidatos que concorrerão ao Pleito;
Pleito => equivalente a Eleições;
Convocação de Mesários => define Mesários para as Eleições;
Convocação de Escrutinadores => define Escrutinadores para as Eleições;
Reunião com Delegado de Prédio => orienta Delegado de Prédio sobre Transporte das Urnas
Eletrônicas;
Preparação das Urnas Eletrônicas => Carga das Urnas Eletrônicas e Lacre das Urnas
Eletrônicas;
Carga das Urnas Eletrônicas => insere Eleitor e Candidato e Cargo e Partido Político na UE;
Lacre das Urnas Eletrônicas => cola Lacre assinado pelo Juiz na UE;
Lacre => etiqueta especial;
112
Transporte das Urnas Eletrônicas => encaminha UE ao Local de Votação e ao Local de
Apuração;
Distribuição de Material de Eleição => envio de Material de Eleição para o funcionamento da
Seção Eleitoral;
Material de Eleição => itens indispensáveis para execução de Eleições;
Apoio Técnico => solução de problemas;
Núcleo de Apoio Técnico => grupo de Servidores que prestam Apoio Técnico a um grupo de
ZE;
NAT => equivalente a Núcleo de Apoio Técnico;
Central de Apoio Técnico => presta Apoio Técnico ao grupo de NAT;
Estrutura Organizacional => definida pelo Regimento Interno;
Regimento Interno => distribui Atividades para o funcionamento da JE;
Correio Eletrônico => forma de troca de Informações entre Servidores;
Email => equivalente a Correio Eletrônico;
Endereço Eletrônico => local para receber Informações;
Estatística => estudo baseado em cálculo matemático;
Estatística do Eleitorado => análise do Cadastro Eleitoral;
Licitações => compra de Material de Eleição.
Esses conceitos representam conhecimento semântico do programa agente, usado para
indexar as páginas e para auxiliar o usuário no refinamento da busca de informações.
113
ANEXO 2: MODELO E SINTAXE RDF
APRESENTAÇÃO
Este anexo apresenta uma descrição da sintaxe para implementação do formato RDF.
Ele foi escrito baseado no artigo
publicado pela W3C
70
. O seu objetivo é orientar o leitor sobre
as capacidades e recursos disponíveis na sintaxe do RDF.
MODELO BÁSICO RDF
O modelo RDF, Resource Description Framework, serve para representar nomes e
valores de propriedades, que podem ser encarados como atributos dos recursos descritos. O
modelo básico é composto por 3 tipos de objetos: recurso (resource), propriedade (property) e
sentença (statement).
RECURSO
Tudo que está sendo descrito por expressões RDF são chamados de recursos. O
importante a ser observado é que todo recurso tem que estar representado por um
identificador universal de recurso, URI (Universal Resource Identifier), ou seja, uma
referência a um endereço de Web ou qualquer repositório de dados que possa ser acessado via
Web.
PROPRIEDADE
A propriedade é um aspecto, característica, atributo ou relação usada para descrever um
recurso. Cada propriedade tem um significado específico ao qual definem-se seus valores
permitidos. O valor da propriedade pode ser uma literal ou um outro recurso.
SENTENÇA
Para se obter uma sentença em RDF é necessário descrever um recurso com propriedade
e valor de propriedade. Essas 3 partes de uma sentença são chamadas respectivamente de
sujeito, predicado e objeto.
70
LASSILA, Ora & SWICK, Ralph R. Resource Description Framework (RDF) Model and Syntax
Specification. W3C Recommendation. [on line] Disponível na Internet via WWW. URL:
http://www.w3.org/TR/1999/REC-rdf-syntax-19990222, 1999;
114
REPRESENTAÇÃO GRÁFICA DO MODELO RDF
Uma sentença RDF geralmente é representada graficamente usando um diagrama de nós
e arcos. Os nós contém os recursos, em forma de elipse, e os valores das propriedades, em
forma de retângulo. Os arcos são setas que partem do sujeito para o objeto da sentença
apresentando uma descrição do nome da propriedade ao lado.
EXEMPLO 1 (sentença simples)
Sentença: Jansley é o criador do recurso http://www.teste/Jansley
Sujeito: http://www.teste/Jansley
Predicado: criador
Objeto: Jansley
EXEMPLO 2 (sentença com mais informações)
Sentença: O individual referido pelo empregado id 45700 tem nome Jansley e tem email
jansley@teste . O recurso http://www.teste/Jansley foi criado por esse individual.
Sujeito: http://www.teste/Jansley, id 45700 ( http://www.empresa/func/45700 )
Predicado: criador, nome, email
Objeto: Jansley, jansley@teste
http://www.teste/Jansley
JansleyCriador
http://www.teste/Jansley
Jansley
Criador
Jansley@teste
http://www.empresa/func/45700
Nome
Email
115
SINTAXE BÁSICA RDF
A sintaxe RDF é proveniente da sintaxe de codificação de páginas Web em XML
(eXtensible Markup Language). Existem 2 tipos de sintaxe XML para codificar modelos de
dados RDF: a sintaxe serializada e a sintaxe abreviada.
A sintaxe serializada é mais fácil de ser lida e interpretada pois segue o padrão
comumente adotado de utilização de tags. Devido a sua clareza na definição dos elementos, o
modelo de dados RDF pode ser facilmente transportado para ela.
A sintaxe abreviada possibilita uma maior agilidade durante a codificação, porém perde
em legibilidade. A utilização dessa sintaxe permite que alguns DTDs (Document Type
Definition) XML sejam diretamente interpretados como modelos RDF. Construtores
adicionais são incluídos para proporcionar uma forma mais compacta de representar
subconjuntos de modelos de dados RDF.
Ambas as sintaxes são aceitas pelos interpretadores RDF, inclusive uma codificação
mista, permitindo, assim, maior flexibilidade aos autores dos modelos
SINTAXE BÁSICA SERIALIZADA
Os elementos básicos para a codificação de uma sentença RDF estão descritos abaixo:
[1] RDF è [<rdf:RDF>] description [</rdf:RDF>]
Indica os limites de início e fim do código.
[2] description è <rdf:Description idAboutAttr?> propertyElt </rdf:Description>
A principal finalidade do elemento descrição é identificar o recurso que está sendo
descrito.
[3] idAboutAttr è about=”URI-reference” | ID=”Idsymbol”
O elemento ‘about’ indica o recurso (sujeito) que está sendo referenciado, que
obrigatoriamente deve ser um recurso já existente na Web. O ‘ID’ serve para definir uma
âncora que sinalize a criação de um novo recurso.
116
[4] propertyElt è <NSprefix:name> value </NSprefix:name> |
<NSprefix:name resource=”URI-reference” />
Esse elemento serve para descrever o nome (predicado) e o valor (objeto) das
propriedades referentes a um recurso. O nome tem que vir acompanhado de um prefixo que
deve obedecer ao padrão “XML namespace prefix”. O valor pode ser uma literal ou outro
recurso.
EXEMPLO 3
Sentença: Jansley é o criador do recurso http://www.teste/Jansley
Sintaxe:
<rdf:RDF>
<rdf:Description about = ”http://www.teste/Jansley”>
<s:Criador> Jansley </s:Criador>
</rdf:Description>
</rdf:RDF>
Os prefixos “rdf” e “s” devem ser definidos numa declaração namespace XML para que
possam ser interpretados. Deve existir um URI que contenha o schema (coleção de classes)
onde estão definidas as possíveis propriedades desses prefixos. O documento XML completo
deveria ser:
<rdf:RDF
xmlns:rdf=”http://www.w3.org/1999/02/22-rdf-syntax-ns#
xmlns:s=”http://description.org/schema/” >
<rdf:Description about = ”http://www.teste/Jansley”>
<s:Criador> Jansley </s:Criador>
</rdf:Description>
</rdf:RDF>
117
SINTAXE BÁSICA ABREVIADA
Existem 3 formas de sintaxe abreviada. A primeira é aplicada a propriedades que não
são repetidas dentro de uma descrição e que tem os valores representados por literais.
<rdf:RDF>
<rdf:Description about = “http://www.teste/Jansley
s:Criador = ”Jansley” />
</rdf:RDF>
A segunda forma de se abreviar a sintaxe aplica-se para sentenças que possuem outro
recurso como valor de propriedade (objeto) e esse outro recurso possui somente literais para
seus valores de propriedades.
<rdf:RDF>
<rdf:Description about = “http://www.teste/Jansley”>
<s:Criador rdf:resource = “http://www.empresa/func/45700
v:Name = “Jansley”
v:Email = jansley@teste />
</rdf:Description>
</rdf:RDF>
A terceira e última possibilidade de se abreviar a sintaxe aplica-se ao caso em que o
elemento description contém a propriedade TYPE. O valor dessa propriedade serve para
descrever qual o tipo do novo recurso. O tipo do recurso definido no schema pode ser usado
diretamente como nome de elemento, sobrepondo a declaração description. Abaixo
demonstra-se a abreviação de um exemplo serializado.
<rdf:RDF
...
<rdf:Description about = “http://www.empresa/func/45700”>
<rdf:type resource = “http://description.org/schema/Person” />
<v:Name>Jansley</v:Name>
<v:Email>jansley@teste</v:Email>
</rdf:Description>
...
118
</rdf:RDF>
Abreviando...
<rdf:RDF
...
<s:Person about = “http://www.empresa/func/45700”>
<v:Name>Jansley</v:Name>
<v:Email>jansley@teste</v:Email>
</s:Person>
...
</rdf:RDF>
SCHEMAS E NAMESPACES
A definição juntamente com o significado dos nomes de propriedades (predicados) que
poderão ser usadas em sentenças RDF ficam descritos no schema, que pode ser visto como
um dicionário. Uma variedade de schemas pode ser usado com RDF, incluindo uma forma
específica definida em um documento separado chamado RDFSchema.
O schema é o lugar onde estão documentados definições e restrições de uso das
propriedades. Para evitar definições conflitantes para um mesmo termo, o RDF usa a
facilidade XML namespace.
Namespaces são simplesmente uma forma de relacionar o uso específico de uma palavra
no código ao dicionário (schema) onde a definição sua pode ser encontrada. Em RDF, cada
predicado usado em uma sentença deve ser identificada com exatamente um namespace ou
schema, enquanto cada elemento description pode conter sentenças com predicados de vários
schemas.
CONTAINERS
Os containers são usados quando se pretende referenciar ao mesmo tempo um conjunto
de recursos ou literais. O RDF define 3 tipos de container: Bag, Sequence e Alternative.
BAG é uma lista desordenada de recursos ou literais. Usado para declarar que uma
propriedade tem múltiplos valores e que a ordem em que esses valores são
mostrados/processados não interessa. Valores duplicados são permitidos.
SEQuence é similar ao BAG, a única diferença é que a ordem dos valores é imortante.
ALTernative é utilizada para propriedade com um único valor, o qual pode ser
representado alternativamente por outros recursos ou literais.
119
MODELO DO CONTAINER
Um container é representado em RDF por um recurso adicional criado para esse fim.
EXEMPLO
Sentença: Os estudantes do curso X são João, Paulo e Maria.
SINTAXE DO CONTAINER
Um container pode ser usado em qualquer parte onde um elemento description é
permitido.
<rdf:Seq | rdf:Bag | rdf:Alt>
<rdf:li resource = “URI-reference” /> |
<rdf:li> value </rdf:li>
</rdf:Seq | /rdf:Bag | /rdf:Alt>
EXEMPLO DO CONTAINER
Sentença: Os estudantes do curso X são João, Paulo e Maria.
<rdf:RDF>
<rdf:Description about = “http://escolaTeste.edu/cursos/X”>
<a:alunos>
<rdf:Bag>
<rdf:li resource = “http://escolaTeste.edu/alunos/Joao” />
<rdf:li resource = “http://escolaTeste.edu/alunos/Joao” />
<rdf:li resource = “http://escolaTeste.edu/alunos/Joao” />
/cursos/X
Rdf:Bag
/alunos/Joao
/alunos/Paulo
/alunos/Maria
alunos
rdf:type
rdf:_1
rdf:_2
rdf:_3
120
</rdf:Bag>
</a:alunos>
</rdf:Description>
</rdf:RDF>
DISTRIBUINDO OS VALORES DE UM CONTAINER
Pode-se distribuir todos os valores de um container para um recurso. O elemento
‘aboutEach’, que tem a mesma funcionalidade do elemento ‘about’, serve exclusivamente
para esse fim. O código abaixo sofreria a seguinte transformação:
<rdf:Description about = “http://www.teste/agentes”>
<s:Criador> Jansley </s:Criador>
</rdf:Description>
<rdf:Description about = “http://www.teste/RDF”>
<s:Criador> Jansley </s:Criador>
</rdf:Description>
UTILIZANDO aboutEach...
<rdf:Description aboutEach = “#paginas”>
<s:Criador> Jansley </s:Criador>
</rdf:Description>
<rdf:Bag ID=”paginas”>
<rdf:li resource = “http://www.teste/agentes” />
<rdf:li resource = “http://www.teste/RDF” />
</rdf:Bag>
Uma variação desse elemento é o ‘aboutEachPrefix’ que é utilizado para definir
propriedades comuns para todos os recursos que iniciem com a mesma descrição de URI.
<rdf:Description aboutEachPrefix = “http://www.teste”>
<s:Criador> Jansley </s:Criador>
</rdf:Description>
121
SENTENÇAS SOBRE SENTENÇAS
O RDF permite que sejam formuladas sentenças cujo sujeito sejam outras sentenças.
Isso se faz necessário quando um fato passa a existir no modelo por ter sido afirmado por
alguém, independentemente da sua real ocorrência. Esse processo se chama reificação.
A sentença reificada deve possuir 4 propriedades: subject, predicate, object e type. A
propriedade type obrigatoriamente deve ser um objeto RDF:Statement, enquanto as demais
obedecem a sintaxe descrita acima representando respectivamente recurso, propriedade e
valor de propriedade.
EXEMPLO
Porfírio disse que Jansley é o criador de http://www.teste/Jansley.
<rdf:RDF
xmlns:rdf=”http://www.w3.org/1999/02/22-rdf-syntax-ns#
xmlns:a=”http://description.org/schema/” >
<rdf:Description>
<rdf:subject resource = ”http://www.teste/Jansley” />
<rdf:predicate resource = ”http://description.org/schema/Criador” />
<rdf:object>Jansley</rdf:object>
<rdf:type resource = ”http://www.w3.org/1999/02/22-rdf-syntax-ns#statement” />
<a:attributedTo>Porfírio</a:attributedTo>
</rdf:Description>
</rdf:RDF>
http://www.teste/Jansley
rdf:statement s:Criador
Porfírio
Jansley
rdf:subject
rdf:type
a:attributedTo
rdf:object
rdf:predicate
122
O subject da sentença reificada pode conter dentro do seu elemento description um
elemento ‘bagID’ que identifica um container cujos membros são sentenças reificadas sobre
ele.
F Maiores detalhes, consultar o artigo citado na apresentação deste anexo.
123
ANEXO 3: FONTES DO PROGRAMA AGENTE
O código java listado a seguir foi implementado em Jbuilder 4.0.
CÓDIGO DO APPLET DE CRIAÇÃO DO ÍNDICE
(1534 LINHAS DE CÓDIGO)
package buscaint;
import java.awt.*;
import java.awt.event.*;
import java.applet.*;
import java.net.*;
import java.sql.*;
import java.util.*;
import java.io.*;
import java.text.*;
public class BuscaInt extends Applet {
boolean isStandalone = false;
Panel panel1 = new Panel();
Panel panel2 = new Panel();
BorderLayout borderLayout1 = new BorderLayout();
Label label1 = new Label();
Button button1 = new Button();
// Elementos para fazer conexão com o banco de dados
Connection con;
String urlBd = "jdbc:odbc:Indice";
String user = "mia";
String passwd = "agentes";
// Vetores de pesquisa de URL
Vector vetAPesq;
Vector vetPesqOk;
// Vetores de identificaçao de assunto
Vector vetIdAssu; //assunto
Vector vetProba; //probabilidade
Vector vetResumoAssu;
Vector vetEquiv; //é um assunto identificado como equivalente
Vector vetIdAssuNE; //assunto não encontrado diretamente na página
Vector vetProbaNE;
Vector vetResumoAssuNE;
Vector vetDescAssu; //assuntos cadastrados no banco
Vector vetDescAssuId;
Vector vetDescEquiv; //assuntos equivalentes cadastrados no banco
Vector vetDescEquivId;
String campoIdAssu;
BorderLayout borderLayout2 = new BorderLayout();
Panel panel3 = new Panel();
Panel panel4 = new Panel();
BorderLayout borderLayout4 = new BorderLayout();
Panel panel5 = new Panel();
Panel panel6 = new Panel();
Label label2 = new Label();
Label label3 = new Label();
java.awt.List list1 = new java.awt.List();
124
Label label4 = new Label();
java.awt.List list2 = new java.awt.List();
TextArea textArea1 = new TextArea();
Label label5 = new Label();
Label label6 = new Label();
BorderLayout borderLayout5 = new BorderLayout();
BorderLayout borderLayout6 = new BorderLayout();
BorderLayout borderLayout3 = new BorderLayout();
Button button2 = new Button();
Button button3 = new Button();
Panel panel7 = new Panel();
BorderLayout borderLayout7 = new BorderLayout();
Label label7 = new Label();
java.awt.List list3 = new java.awt.List();
java.awt.List list4 = new java.awt.List();
/**Get a parameter value*/
public String getParameter(String key, String def) {
return isStandalone ? System.getProperty(key, def) :
(getParameter(key) != null ? getParameter(key) : def);
}
/**Construct the applet*/
public BuscaInt() {
}
/**Initialize the applet*/
public void init() {
try {
jbInit();
}
catch(Exception e) {
e.printStackTrace();
}
}
/**Component initialization*/
private void jbInit() throws Exception {
this.setLayout(borderLayout1);
label1.setText("APPLET para Montar, Verificar e Manter o ÍNDICE");
button1.setLabel("Montar");
button1.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(ActionEvent e) {
button1_actionPerformed(e);
}
});
panel1.setBackground(Color.orange);
panel2.setLayout(borderLayout2);
panel3.setLayout(borderLayout3);
panel4.setLayout(borderLayout4);
label2.setText("VISUALIZANDO O PROCESSO");
label3.setText("FILA A VISITAR");
label4.setText("FILA VISITADO");
label5.setText("Percorrendo site...");
label6.setText("SITES PERCORRIDOS:");
panel5.setLayout(borderLayout5);
panel6.setLayout(borderLayout6);
button2.setLabel("Verificar");
button2.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(ActionEvent e) {
button2_actionPerformed(e);
}
});
125
button3.setLabel("Manter");
button3.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(ActionEvent e) {
button3_actionPerformed(e);
}
});
panel7.setLayout(borderLayout7);
label7.setText("Conteúdo da página SEM <tags>");
this.add(panel1, BorderLayout.NORTH);
panel1.add(label1, null);
panel1.add(button1, null);
panel1.add(button2, null);
panel1.add(button3, null);
this.add(panel2, BorderLayout.CENTER);
panel2.add(panel3, BorderLayout.NORTH);
panel3.add(label2, BorderLayout.NORTH);
panel3.add(panel5, BorderLayout.WEST);
panel5.add(list1, BorderLayout.CENTER);
panel5.add(label3, BorderLayout.NORTH);
panel3.add(panel6, BorderLayout.SOUTH);
panel6.add(list2, BorderLayout.CENTER);
panel6.add(label4, BorderLayout.NORTH);
panel3.add(panel7, BorderLayout.CENTER);
panel7.add(label7, BorderLayout.NORTH);
panel7.add(list3, BorderLayout.CENTER);
panel2.add(panel4, BorderLayout.SOUTH);
panel4.add(textArea1, BorderLayout.CENTER);
panel4.add(label5, BorderLayout.NORTH);
panel4.add(label6, BorderLayout.SOUTH);
panel4.add(list4, BorderLayout.EAST);
vetAPesq = new Vector();
vetPesqOk = new Vector();
URLConnection.setDefaultAllowUserInteraction(false);
}
/**Start the applet*/
public void start() {
}
/**Stop the applet*/
public void stop() {
}
/**Destroy the applet*/
public void destroy() {
}
/**Get Applet information*/
public String getAppletInfo() {
return "Applet Information";
}
/**Get parameter info*/
public String[][] getParameterInfo() {
return null;
}
/*BOTÃO PARA ATIVAÇÃO DA CRIAÇÃO DO ÍNDICE*/
void button1_actionPerformed(ActionEvent e) {
try {
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
con = DriverManager.getConnection(urlBd,user,passwd);
textArea1.setText("Banco de Dados Indice Conectado\nMONTANDO O ÍNDICE\n");
}
catch (ClassNotFoundException cnfex){
126
System.err.println("Não foi possível carregar o driver JDBC/ODBC");
cnfex.printStackTrace();
}
catch (SQLException sqlex){
System.err.println("Não foi possível se conectar");
sqlex.printStackTrace();
}
inicializaVetBanco();
inicializaVetorAPesquisar();
montaIndice();
try { //desconecta o banco de dados
con.close();
textArea1.append("BD Desconectado");
}
catch (SQLException sqlex) {
System.err.println("Não foi possível se desconectar");
sqlex.printStackTrace();
}
}
/*BOTÃO PARA ATIVAÇÃO DA VERIFICAÇÃO DO ÍNDICE*/
void button2_actionPerformed(ActionEvent e) {
try {
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
con = DriverManager.getConnection(urlBd,user,passwd);
textArea1.setText("Banco de Dados Indice Conectado\nVERIFICANDO O ÍNDICE\n");
}
catch (ClassNotFoundException cnfex){
System.err.println("Não foi possível carregar o driver JDBC/ODBC");
label2.setText("Não foi possível carregar o driver JDBC/ODBC");//testando no browser
cnfex.printStackTrace();
}
catch (SQLException sqlex){
System.err.println("Não foi possível se conectar");
label2.setText(sqlex.getMessage());//testando no browser
sqlex.printStackTrace();
}
inicializaVetBanco();
verificaIndice();
try { //desconecta o banco de dados
con.close();
textArea1.append("BD Desconectado");
}
catch (SQLException sqlex) {
System.err.println("Não foi possível se desconectar");
sqlex.printStackTrace();
}
}
/*BOTÃO PARA ATIVAÇÃO DA MANUTENÇÃO DO ÍNDICE*/
void button3_actionPerformed(ActionEvent e) {
try {
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
con = DriverManager.getConnection(urlBd,user,passwd);
textArea1.setText("Banco de Dados Indice Conectado\nMANTENDO O ÍNDICE\n");
}
catch (ClassNotFoundException cnfex){
System.err.println("Não foi possível carregar o driver JDBC/ODBC");
cnfex.printStackTrace();
127
}
catch (SQLException sqlex){
System.err.println("Não foi possível se conectar");
sqlex.printStackTrace();
}
inicializaVetBanco();
mantemIndice();
try { //desconecta o banco de dados
con.close();
textArea1.append("BD Desconectado");
}
catch (SQLException sqlex) {
System.err.println("Não foi possível se desconectar");
sqlex.printStackTrace();
}
}
public void inicializaVetorAPesquisar() {
String campoEndIp;
vetAPesq = new Vector();
vetPesqOk = new Vector();
Statement st;
ResultSet rs;
String consulta = "SELECT EndIp FROM TabSite";
try {
st = con.createStatement();
rs = st.executeQuery(consulta);
while (rs.next()) {
campoEndIp = rs.getString(1);
vetAPesq.addElement(campoEndIp);
list1.add(campoEndIp);
}
st.close();
}
catch (SQLException sqlex) {
System.err.println(sqlex);
sqlex.printStackTrace();
}
}
public void validaLink(String token) {
String novoSite, siteMinu;
String tokenMinu = token.toLowerCase();
boolean internet = false;
if ((tokenMinu.indexOf("http") == -1)) //se token não é endereço completo
internet = false;
else if ((tokenMinu.indexOf("www") == -1) && ((tokenMinu.indexOf("tre") != -1) ||
(tokenMinu.indexOf("tse") != -1)))
internet = false;
else
internet = true;
// se é endereço de intranet continua
if (! internet) {
novoSite = null;
if ((tokenMinu.indexOf("http") != -1)) // endereço completo
novoSite = token;
else if ((tokenMinu.indexOf(":") == -1)) { // token não pode ter ":"
novoSite = (String) vetAPesq.elementAt(0);
128
siteMinu = novoSite.toLowerCase();
if (siteMinu.indexOf(".htm") != -1) { //se termina com .htm
if (token.substring(0,1).compareTo("/") != 0) //verificar se o token começa com / para evitar repetição de
barra
novoSite = novoSite.substring(0,novoSite.lastIndexOf("/")+1) + token;
else
novoSite = novoSite.substring(0,novoSite.lastIndexOf("/")) + token;
}
else {
if (novoSite.substring(novoSite.length()-1,novoSite.length()).compareTo("/") == 0)
novoSite = novoSite.substring(0,novoSite.lastIndexOf("/"));
if (token.substring(0,1).compareTo("/") != 0) //verificar se o token começa com / para evitar repetição de
barra
novoSite += "/" + token;
else
novoSite += token;
}
}
//checar se termina com .htm caso seja um endereço completo com o nome do arquivo
if (novoSite != null) {
String str = novoSite.substring(novoSite.length()-5);
if ((str.indexOf(".br") == -1) && (str.indexOf("/") != 4)) {//não termina em .br ou em /
if ((str.indexOf(".htm") == -1) && (str.indexOf(".stm") == -1)) // se o resto não termina em .htm ou .stm
novoSite = null;
else if (novoSite.indexOf("./") != -1) // não é permitido para evitar loop infinito
novoSite = null;
}
else if (novoSite.indexOf("./") != -1) // não é permitido para evitar loop infinito
novoSite = null;
}
// Incluir novo site no final do Vetor A Pesquisar se ele ainda não foi visitado
if (novoSite != null) {
if (vetPesqOk.contains(novoSite) == true)
textArea1.append("VISITADO\n");
else if (vetAPesq.contains(novoSite) == false) {
vetAPesq.addElement(novoSite);
list1.add(novoSite);
textArea1.append("Novo site encontrado: " + novoSite + "\n");
}
else
textArea1.append("NA FILA\n");
}
}
}
public void percorreLink(BufferedReader pag) {
String linha, linhaMinu, linhaResto;
String token, linhaSemTag;
int pont1, pont2, pont3, conta;
boolean aEncontrado, frameEncontrado, urlEncontrado, tagPresente;
boolean faltaComplementoTexto, iniciadoComentario;
boolean corpoPagina;
try {
list3.removeAll();
list4.removeAll();
vetIdAssu = new Vector();
vetResumoAssu = new Vector();
vetProba = new Vector();
vetEquiv = new Vector();
aEncontrado = false;
129
frameEncontrado = false;
urlEncontrado = false;
faltaComplementoTexto = false;
iniciadoComentario = false;
corpoPagina = false;
tagPresente = true;
conta = 0; //conta a qtde de linhas da pagina
while ((linha = pag.readLine()) != null) {
if (linha.compareTo("") != 0) {
// ---> PROCURAR NOVOS LINKS <---
linhaMinu = linha.toLowerCase();
pont1 = 0;
pont2 = 0;
pont3 = 0;
//laço âncora
while (((pont1 = linhaMinu.indexOf("<a",pont1)) != -1) || (aEncontrado)) { //posiciona no começo da
expressã
if (aEncontrado)
pont1 = 0; //reposiciona no ínicio para o caso da linha começar com "href" e possuir outro "<a"
else
aEncontrado = true;
if ((pont1 = linhaMinu.indexOf("href",pont1)) == -1)
break; //não encontrou
if ((pont1 = linhaMinu.indexOf("=",pont1)) == -1)
break; //não encontrou
aEncontrado = false; //conseguiu localizar a referência
pont1++;
linhaResto = linha.substring(pont1); // resto da linha
StringTokenizer linhaTok = new StringTokenizer(linhaResto," \t\n\r\">#");
token = linhaTok.nextToken();
// verifica se o token é uma referência completa
validaLink(token);
} // fim laço âncora
//laço frame
while (((pont2 = linhaMinu.indexOf("<frame ",pont2)) != -1) || (frameEncontrado)) { //posiciona no
começo da expressão
if (frameEncontrado)
pont2 = 0;
else
frameEncontrado = true;
if ((pont2 = linhaMinu.indexOf("src",pont2)) == -1)
break;
if ((pont2 = linhaMinu.indexOf("=",pont2)) == -1)
break;
frameEncontrado = false; //localizou a referência
pont2++;
linhaResto = linha.substring(pont2); // resto da linha
StringTokenizer linhaTok = new StringTokenizer(linhaResto," \t\n\r\">#");
token = linhaTok.nextToken();
// verifica se o token é uma referência completa
validaLink(token);
} // fim laço frame
//laço HTTP-EQUIV
130
while (((pont3 = linhaMinu.indexOf("<meta http-equiv",pont3)) != -1) || (urlEncontrado)) { //posiciona no
começo da expressão
if (urlEncontrado)
pont3 = 0;
else
urlEncontrado = true;
if ((pont3 = linhaMinu.indexOf("url",pont3)) == -1)
break;
if ((pont3 = linhaMinu.indexOf("=",pont3)) == -1)
break;
urlEncontrado = false; //localizou a referência
pont3++;
linhaResto = linha.substring(pont3); // resto da linha
StringTokenizer linhaTok = new StringTokenizer(linhaResto," \t\n\r\">#");
token = linhaTok.nextToken();
// verifica se o token é uma referência completa
validaLink(token);
} // fim laço http-equiv
// ---> RETIRAR TAGS DA LINHA <---
//if (conta > 23) {
linhaMinu = linha;
pont1 = 0;
linhaSemTag = "";
//verificar se a linha começa com texto e depois tem uma tag. Ex: "Alterado em <br>....."
if ((!iniciadoComentario) && tagPresente && (linhaMinu.substring(0,1).compareTo("<") != 0))
faltaComplementoTexto = true; //força inclusão na linhaSemTag
while (((pont1 = linhaMinu.indexOf("<",pont1)) != -1) || (!tagPresente) || (iniciadoComentario) ||
(faltaComplementoTexto)) {
//verifica se trata-se de um comentario
if (linhaMinu.indexOf("<!--",pont1) != -1) {
iniciadoComentario = true;
tagPresente = true;
}
if (iniciadoComentario) { //verifica se tem comentário aberto
if (pont1 < 3) //evita erro indexoutofbound
pont1 = 0;
else
pont1 = pont1 - 3; //pior hipótese: ...--><
if ((pont1 = linhaMinu.indexOf("-->",pont1)) != -1) {
iniciadoComentario = false;
if ((pont1 = linhaMinu.indexOf("<",pont1)) == -1)
break;
}
else
break;
}
if (!faltaComplementoTexto) {
if ((pont1 != -1) && (tagPresente)) {
tagPresente = false;
//identificar as tags cabeçalho e corpo para inserir linha de identificaçao na PágSemTag
if (linhaMinu.length() >= pont1 + 5) {
if (linhaMinu.substring(pont1,pont1 + 5).compareToIgnoreCase("<head") == 0)
list3.add("CABEÇALHO DA PÁGINA");
if (linhaMinu.substring(pont1,pont1 + 5).compareToIgnoreCase("<body") == 0) {
131
list3.add("CORPO DA PÁGINA");
corpoPagina = true;
}
}
}
else
pont1 = 0;
if ((pont1 = linhaMinu.indexOf(">",pont1)) != -1)
tagPresente = true;
}
else
pont1 = -1;
pont1++;
if (((linhaMinu.length() != pont1) && (pont1 != 0)) || (faltaComplementoTexto)) {
linhaResto = linhaMinu.substring(pont1).trim(); // resto da linha
if ((linhaResto.length() != 0) && (linhaResto.substring(0,1).compareTo("<") != 0)) { //verifica se o resto
inicia com outra tag
StringTokenizer linhaTok = new StringTokenizer(linhaResto,"\t\n\r<>");
linhaSemTag += linhaTok.nextToken();
if (linhaMinu.indexOf("<",pont1) == -1) {
faltaComplementoTexto = true;
break;
}
else
faltaComplementoTexto = false;
}
else { // verificar se será iniciado um comentário
faltaComplementoTexto = false;
if (linhaMinu.indexOf("<!--",pont1) != -1) {
iniciadoComentario = true;
tagPresente = true;
}
}
}
else //aguardando tag > para mudar o status de tagPresente
break;
} // fim laço tag
if (linhaSemTag != "") {
list3.add(linhaSemTag);
identificaAssunto(linhaSemTag,corpoPagina);
}
} //fecha o if (linha != vazio)
conta++;
label7.setText("linha: " + conta);
} // fim do laço principal
}
catch (Exception e) {
System.err.println(e);
e.printStackTrace();
textArea1.append("Erro durante a leitura da página...\n");
return;
}
}
public void percorreLinkManut(BufferedReader pag) {
String linha, linhaMinu, linhaResto;
132
String token, linhaSemTag;
int pont1, pont2, conta;
boolean tagPresente;
boolean faltaComplementoTexto, iniciadoComentario;
boolean corpoPagina;
try {
list3.removeAll();
list4.removeAll();
vetIdAssu = new Vector();
vetResumoAssu = new Vector();
vetProba = new Vector();
vetEquiv = new Vector();
faltaComplementoTexto = false;
iniciadoComentario = false;
corpoPagina = false;
tagPresente = true;
conta = 0; //conta a qtde de linhas da pagina
while ((linha = pag.readLine()) != null) {
if (linha.compareTo("") != 0) {
linhaMinu = linha;
pont1 = 0;
// ---> RETIRAR TAGS DA LINHA <---
//if (conta > 23) {
pont1 = 0;
linhaSemTag = "";
//verificar se a linha começa com texto e depois tem uma tag. Ex: "Alterado em <br>....."
if ((!iniciadoComentario) && tagPresente && (linhaMinu.substring(0,1).compareTo("<") != 0))
faltaComplementoTexto = true; //força inclusão na linhaSemTag
while (((pont1 = linhaMinu.indexOf("<",pont1)) != -1) || (!tagPresente) || (iniciadoComentario) ||
(faltaComplementoTexto)) {
//verifica se trata-se de um comentario
if (linhaMinu.indexOf("<!--",pont1) != -1) {
iniciadoComentario = true;
tagPresente = true;
}
if (iniciadoComentario) { //verifica se tem comentário aberto
if (pont1 < 3) //evita erro indexoutofbound
pont1 = 0;
else
pont1 = pont1 - 3; //pior hipótese: ...--><
if ((pont1 = linhaMinu.indexOf("-->",pont1)) != -1) {
iniciadoComentario = false;
if ((pont1 = linhaMinu.indexOf("<",pont1)) == -1)
break;
}
else
break;
}
if (!faltaComplementoTexto) {
if ((pont1 != -1) && (tagPresente)) {
tagPresente = false;
//identificar as tags cabeçalho e corpo para inserir linha de identificaçao na PágSemTag
if (linhaMinu.length() >= pont1 + 5) {
if (linhaMinu.substring(pont1,pont1 + 5).compareToIgnoreCase("<head") == 0)
list3.add("CABEÇALHO DA PÁGINA");
if (linhaMinu.substring(pont1,pont1 + 5).compareToIgnoreCase("<body") == 0) {
list3.add("CORPO DA PÁGINA");
133
corpoPagina = true;
}
}
}
else
pont1 = 0;
if ((pont1 = linhaMinu.indexOf(">",pont1)) != -1)
tagPresente = true;
}
else
pont1 = -1;
pont1++;
if (((linhaMinu.length() != pont1) && (pont1 != 0)) || (faltaComplementoTexto)) {
linhaResto = linhaMinu.substring(pont1).trim(); // resto da linha
if ((linhaResto.length() != 0) && (linhaResto.substring(0,1).compareTo("<") != 0)) { //verifica se o resto
inicia com outra tag
StringTokenizer linhaTok = new StringTokenizer(linhaResto,"\t\n\r<>");
linhaSemTag += linhaTok.nextToken();
if (linhaMinu.indexOf("<",pont1) == -1) {
faltaComplementoTexto = true;
break;
}
else
faltaComplementoTexto = false;
}
else { // verificar se será iniciado um comentário
faltaComplementoTexto = false;
if (linhaMinu.indexOf("<!--",pont1) != -1) {
iniciadoComentario = true;
tagPresente = true;
}
}
}
else //aguardando tag > para mudar o status de tagPresente
break;
} // fim laço tag
if (linhaSemTag != "") {
list3.add(linhaSemTag);
identificaAssunto(linhaSemTag,corpoPagina);
}
//} // fim teste conta
} //fecha o if (linha != vazio)
conta++;
label7.setText("linha: " + conta);
} // fim do laço principal
}
catch (Exception e) {
System.err.println(e);
e.printStackTrace();
textArea1.append("Erro durante a leitura da página...\n");
return;
}
}
public void identificaAssunto(String linha, boolean corpoPag) {
134
int conta;
String assunto, resumoAssunto;
Vector vetToken = new Vector();
resumoAssunto = linha + "(...) ";
linha = linha.toLowerCase();
StringTokenizer token = new StringTokenizer(linha," \t\n\r()[]{}<>'!?.,:;/|@#$%&*-+=");
//montar vetor com os tokens para poder utilizar recursos de índice
while (token.hasMoreTokens())
vetToken.addElement(token.nextToken());
conta = 0;
//procurar assunto com 1 token de cada vez
while (vetToken.size() >= conta+1) {
assunto = (String) vetToken.elementAt(conta);
insereAssuntoNoVetor(assunto,resumoAssunto,corpoPag);
conta++;
} //fim laço 1 token
//procurar assunto com 2 tokens de cada vez
conta = 0;
while (vetToken.size() >= conta+2) {
assunto = ((String) vetToken.elementAt(conta)) + " " + ((String) vetToken.elementAt(conta+1));
insereAssuntoNoVetor(assunto,resumoAssunto,corpoPag);
conta++;
} //fim laço 2 tokens
//procurar assunto com 3 tokens de cada vez
conta = 0;
while (vetToken.size() >= conta+3) {
assunto = ((String) vetToken.elementAt(conta)) + " " + ((String) vetToken.elementAt(conta+1)) + " " +
((String) vetToken.elementAt(conta+2));
insereAssuntoNoVetor(assunto,resumoAssunto,corpoPag);
conta++;
} //fim laço 3 tokens
//procurar assunto com 4 tokens de cada vez
conta = 0;
while (vetToken.size() >= conta+4) {
assunto = ((String) vetToken.elementAt(conta)) + " " + ((String) vetToken.elementAt(conta+1)) + " " +
((String) vetToken.elementAt(conta+2))+ " " + ((String) vetToken.elementAt(conta+3));
insereAssuntoNoVetor(assunto,resumoAssunto,corpoPag);
conta++;
} //fim laço 4 tokens
//procurar assunto com 5 tokens de cada vez
conta = 0;
while (vetToken.size() >= conta+5) {
assunto = ((String) vetToken.elementAt(conta)) + " " + ((String) vetToken.elementAt(conta+1)) + " " +
((String) vetToken.elementAt(conta+2))+ " " + ((String) vetToken.elementAt(conta+3))+ " " + ((String)
vetToken.elementAt(conta+4));
insereAssuntoNoVetor(assunto,resumoAssunto,corpoPag);
conta++;
} //fim laço 5 tokens
}
public void insereAssuntoNoVetor(String assunto, String resumoAssunto, boolean corpoPag) {
int pos, proba;
String consulta, probaSt, resAssu;
if ((pos = vetDescAssu.indexOf(assunto)) != -1) {
campoIdAssu = (String) vetDescAssuId.elementAt(pos);
if (vetIdAssu.contains(campoIdAssu) == false) {
135
vetIdAssu.addElement(campoIdAssu);
vetResumoAssu.addElement(resumoAssunto);
vetProba.addElement("0"); //probabilidade inicial zerada
vetEquiv.addElement("não"); //equivalência
}
pos = vetIdAssu.indexOf(campoIdAssu); //o valor do campoIdAssu foi atribuído no método
procuraAssuntoNoBanco
resAssu = (String) vetResumoAssu.elementAt(pos);
if ((resAssu.compareTo(resumoAssunto)!=0) && (resAssu.length()<300)) { // tamanho limitado para o
resumo
resAssu = resAssu + resumoAssunto;
vetResumoAssu.setElementAt(resAssu,pos);
}
probaSt = (String) vetProba.elementAt(pos);
proba = Integer.parseInt(probaSt);
if (proba < 50)
calculaProbabilidadeInicial(pos,proba,corpoPag);
vetEquiv.setElementAt("não",pos);
}
else {
if ((pos = vetDescEquiv.indexOf(assunto)) != -1) {
campoIdAssu = (String) vetDescEquivId.elementAt(pos);
if (vetIdAssu.contains(campoIdAssu) == false) {
vetIdAssu.addElement(campoIdAssu);
vetResumoAssu.addElement(resumoAssunto);
vetProba.addElement("0"); //probabilidade inicial zerada
vetEquiv.addElement("não"); //equivalência
}
pos = vetIdAssu.indexOf(campoIdAssu);
resAssu = (String) vetResumoAssu.elementAt(pos);
if ((resAssu.compareTo(resumoAssunto)!=0) && (resAssu.length()<300)) { // tamanho limitado para o
resumo
resAssu = resAssu + resumoAssunto;
vetResumoAssu.setElementAt(resAssu,pos);
}
probaSt = (String) vetProba.elementAt(pos);
proba = Integer.parseInt(probaSt);
if (proba < 50) {
if (proba == 0)
vetEquiv.setElementAt("sim",pos);
calculaProbabilidadeInicial(pos,proba,corpoPag);
}
}
}
}
public void calculaProbabilidadeInicial(int pos, int proba, boolean cp) {
int probaCalc = proba;
if (cp) //corpo da página
probaCalc += 5;
else
probaCalc += 10;
vetProba.setElementAt(Integer.toString(probaCalc),pos);
list4.add("vet[" + pos + "] Ass:" + vetIdAssu.elementAt(pos) + " Proba Inicial:" + vetProba.elementAt(pos));
}
public String origemSite(String s) {
int i;
s = s.toUpperCase();
136
if ((i = s.indexOf("TRE-")) != -1)
s = s.substring(i,i+6);
else if ((i = s.indexOf("TSE")) != -1)
s = s.substring(i,i+3);
else
s = "DESCONHECIDA";
return s;
}
public void calculaProbabilidadeFinal() {
Statement st1, st2;
ResultSet rs1, rs2;
String campoIdAssuRel, idRel, probaSt, assunto, resumoAssunto;
int pos, proba, probaFinal, conta, contaRel;
try {
vetIdAssuNE = new Vector();
vetProbaNE = new Vector();
vetResumoAssuNE = new Vector();
st1 = con.createStatement();
rs1 = st1.executeQuery("SELECT IdAssu FROM TabAssunto");
while (rs1.next()) {//verificar todos os assuntos
campoIdAssu = rs1.getString(1);
try {
st2 = con.createStatement();
rs2 = st2.executeQuery("SELECT IdAssuRel FROM TabAssuntoRel WHERE IdAssuPri = "+
campoIdAssu);
contaRel = 0;
idRel="";
while (rs2.next()) {
campoIdAssuRel = rs2.getString(1);
if (vetIdAssu.contains(campoIdAssuRel)) {
idRel = campoIdAssuRel;
contaRel++;
if (contaRel > 5)
break;
}
} //fim laço relacionamento
st2.close();
if (contaRel > 0) {
switch (contaRel) {
case 1:
probaFinal = 10;
break;
case 2:
probaFinal = 20;
break;
case 3:
probaFinal = 30;
break;
case 4:
probaFinal = 40;
break;
default:
probaFinal = 50;
}
if ((pos = vetIdAssu.indexOf(campoIdAssu)) != -1) { //se já faz parte do vetor
probaSt = (String) vetProba.elementAt(pos);
proba = Integer.parseInt(probaSt);
probaFinal += proba;
137
vetProba.setElementAt(Integer.toString(probaFinal),pos);
}
else { //adicionar assunto não encontrado inicialmente, mas com assuntos relacionados
vetIdAssuNE.addElement(campoIdAssu);
vetProbaNE.addElement(Integer.toString(probaFinal));
assunto = "INEXISTENTE";
if ((pos = vetDescAssuId.indexOf(idRel)) != -1) {
assunto = (String) vetDescAssu.elementAt(pos);
}
resumoAssunto = "página com assunto relacionado: " + assunto.toUpperCase();
vetResumoAssuNE.addElement(resumoAssunto);
}
} //fim do if (contaRel>0)
}
catch (SQLException sqlex) {
System.err.println(sqlex);
sqlex.printStackTrace();
}
} // fim laço principal
st1.close();
}
catch (SQLException sqlex) {
System.err.println(sqlex);
sqlex.printStackTrace();
}
list4.add("PROBABILIDADE FINAL");
list4.add("vetor assunto encontrado");
for(conta = 0; conta < vetIdAssu.size(); conta++)
list4.add("Assu:" + vetIdAssu.elementAt(conta) + " Proba Final:" + vetProba.elementAt(conta));
list4.add("vetor assunto NÃO encontrado diretamente");
for(conta = 0; conta < vetIdAssuNE.size(); conta++)
list4.add("Assu:" + vetIdAssuNE.elementAt(conta) + " Proba Final:" + vetProbaNE.elementAt(conta));
}
public int calculaProbabilidadeFinalManut(String idAssu, int proba) {
Statement st;
ResultSet rs;
String campoIdAssuRel;
int probaFinal = proba, contaRel;
try {
st = con.createStatement();
rs = st.executeQuery("SELECT IdAssuRel FROM TabAssuntoRel WHERE IdAssuPri = "+ idAssu);
contaRel = 0;
while (rs.next()) {
campoIdAssuRel = rs.getString(1);
if (vetIdAssu.contains(campoIdAssuRel)) {
contaRel++;
if (contaRel > 5)
break;
}
} //fim laço relacionamento
st.close();
if (contaRel > 0) {
switch (contaRel) {
case 1:
probaFinal += 10;
break;
case 2:
probaFinal += 20;
138
break;
case 3:
probaFinal += 30;
break;
case 4:
probaFinal += 40;
break;
default:
probaFinal += 50;
}
} //fim do if (contaRel>0)
}
catch (SQLException sqlex) {
System.err.println(sqlex);
sqlex.printStackTrace();
}
return probaFinal;
}
public boolean existeAssuntoRelacionado(String idAssu) {
Statement st;
ResultSet rs;
int contaRel;
String campoIdAssuRel;
boolean existe = false;
try {
st = con.createStatement();
rs = st.executeQuery("SELECT IdAssuRel FROM TabAssuntoRel WHERE IdAssuPri = "+ idAssu);
contaRel = 0; //procura assuntos relacionados
while (rs.next()) {
campoIdAssuRel = rs.getString(1);
if (vetIdAssu.contains(campoIdAssuRel)) {
existe = true;
break;
}
}
st.close();
}
catch (SQLException sqlex) {
System.err.println(sqlex);
sqlex.printStackTrace();
}
return existe;
}
public void alimentaTabIndice(Vector vetAssu, Vector vetPr, Vector vetResAssu, String site, String origem,
java.sql.Date data, boolean assuRelac) {
Statement st;
ResultSet rs;
String consulta, comando;
int i, resultado;
if (vetAssu.size() > 0) { // se o vetor possuir elementos
for (i = 0; i < vetAssu.size();i++) {
try {
consulta = "SELECT IdAssu, Link FROM TabIndice WHERE IdAssu = " + vetAssu.elementAt(i) + "
AND Link = '" + site + "'";
st = con.createStatement();
rs = st.executeQuery(consulta);
if (rs.next()) { //se localizou o assunto, sobrepõe
139
comando = "UPDATE TabIndice SET " +
"Proba = '" + vetPr.elementAt(i) + "', " +
"DataPag = '" + data + "'";
if ((assuRelac) || (vetEquiv.elementAt(i)=="sim")) //se a descriçao do assunto não está diretamente na
página
comando += ", Relac = true, Memo = '" + vetResAssu.elementAt(i) + "' WHERE IdAssu = " +
vetAssu.elementAt(i) + " AND Link = '" + site + "'";
else
comando += ", Relac = false, Memo = '" + vetResAssu.elementAt(i) + "' WHERE IdAssu = " +
vetAssu.elementAt(i) + " AND Link = '" + site + "'";
resultado = st.executeUpdate(comando);
if (resultado == 1)
list4.add("Reg assunto = " + vetAssu.elementAt(i) + " atualizado OK");
}
else { //insere
comando = "INSERT INTO TabIndice (" +
"IdAssu, Proba, Link, Origem, DataPag, Verifica, Relac, Memo) " +
"VALUES ('" +
vetAssu.elementAt(i) + "', '" +
vetPr.elementAt(i) + "', '" +
site + "', '" +
origem + "', '" +
data + "', '0'";
if ((assuRelac) || (vetEquiv.elementAt(i)=="sim"))
comando += ", true, '" + vetResAssu.elementAt(i) + "')";
else
comando += ", false, '" + vetResAssu.elementAt(i) + "')";
resultado = st.executeUpdate(comando);
if (resultado == 1)
list4.add("Reg assunto = " + vetAssu.elementAt(i) + " inserido OK");
}
st.close();
}
catch (SQLException sqlex) {
System.err.println(sqlex);
sqlex.printStackTrace();
}
} //fim do for
} // fim do if principal
}
public void atualizaTabIndice(String idAssu, String resAssu, int probaFinal, String site, String origem,
java.sql.Date data, boolean assuRelac) {
Statement st,st2;
ResultSet rs,rs2;
String consulta, comando, resumoAssunto, idRel, campoIdAssuRel;
int i, pos, resultado, contaRel;
try {
consulta = "SELECT IdAssu, Link FROM TabIndice WHERE IdAssu = " + idAssu + " AND Link = '" + site
+ "'";
st = con.createStatement();
rs = st.executeQuery(consulta);
if (rs.next()) { //se localizou o assunto, sobrepõe
comando = "UPDATE TabIndice SET " +
"Proba = '" + probaFinal + "', " +
"DataPag = '" + data + "'";
if (assuRelac) //se a descriçao do assunto não está diretamente na página
comando += ", Relac = true";
else
140
comando += ", Relac = false";
if (resAssu.length() > 0)
comando += ", Memo = '" + resAssu + "' WHERE IdAssu = " + idAssu + " AND Link = '" + site + "'";
else {
st2 = con.createStatement();
rs2 = st2.executeQuery("SELECT IdAssuRel FROM TabAssuntoRel WHERE IdAssuPri = "+ idAssu);
contaRel = 0;
idRel="";
while (rs2.next()) {
campoIdAssuRel = rs2.getString(1);
if (vetIdAssu.contains(campoIdAssuRel)) {
idRel = campoIdAssuRel;
contaRel++;
if (contaRel > 5)
break;
}
}
st2.close();
resAssu = "INEXISTENTE";
if ((pos = vetDescAssuId.indexOf(idRel)) != -1)
resAssu = (String) vetDescAssu.elementAt(pos);
resumoAssunto = "página com assunto relacionado: " + resAssu.toUpperCase();
comando += ", Memo = '" + resumoAssunto + "' WHERE IdAssu = " + idAssu + " AND Link = '" + site +
"'";
}
resultado = st.executeUpdate(comando);
if (resultado == 1)
list4.add("Reg assunto = " + idAssu + " atualizado OK");
}
st.close();
}
catch (SQLException sqlex) {
System.err.println(sqlex);
sqlex.printStackTrace();
}
}
public void informaTabSite(String origem) {
Statement st;
ResultSet rs;
String uf, consulta, comando;
int i, resultado;
try {
if (origem.length() <= 3) //tse
uf = origem;
else
uf = origem.substring(4);
consulta = "SELECT Uf FROM TabSite WHERE Uf = '" + uf + "'";
st = con.createStatement();
rs = st.executeQuery(consulta);
if (rs.next()) { //se localizou a UF
comando = "UPDATE TabSite SET " +
"Ind = false " +
"WHERE Uf = '" + uf + "'";
resultado = st.executeUpdate(comando);
if (resultado == 1)
list4.add("TabSite origem=" + uf + " não visitada");
}
141
st.close();
}
catch (SQLException sqlex) {
System.err.println(sqlex);
sqlex.printStackTrace();
}
}
public void analisaCampoVerifica(String site, String idAssu, int verif) {
String comando;
int resultado;
Statement stat;
try {
stat = con.createStatement();
if (verif <= 10) { //incrementa campo verifica
verif++;
comando = "UPDATE TabIndice SET " +
"Verifica = '" + verif + "' " +
"WHERE IdAssu = " + idAssu + " AND Link = '" + site + "'";
resultado = stat.executeUpdate(comando);
if (resultado == 1)
textArea1.append("ATUALIZADO Verifica=" + verif + " Assunto=" + idAssu + " Link=" + site + "\n");
}
else { //exclui registro
comando = "DELETE FROM TabIndice " +
"WHERE IdAssu = " + idAssu + " AND Link = '" + site + "'";
resultado = stat.executeUpdate(comando);
if (resultado == 1)
textArea1.append("EXCLUÍDO Assunto=" + idAssu + " Link=" + site + "\n");
}
stat.close();
}
catch (SQLException sqlex) {
System.err.println(sqlex);
sqlex.printStackTrace();
}
}
public boolean percorreLinkExisteAssunto(BufferedReader pag, String descAssu) {
String linha, linhaMinu, linhaResto;
String token, linhaSemTag;
int pont1, conta;
boolean tagPresente, achouAssu = false;
boolean faltaComplementoTexto, iniciadoComentario;
boolean corpoPagina;
try {
list3.removeAll();
list4.removeAll();
faltaComplementoTexto = false;
iniciadoComentario = false;
corpoPagina = false;
tagPresente = true;
while ((linha = pag.readLine()) != null) {
if (linha.compareTo("") != 0) {
linhaMinu = linha.toLowerCase();
// ---> RETIRAR TAGS DA LINHA <---
pont1 = 0;
linhaSemTag = "";
//verificar se a linha começa com texto e depois tem uma tag. Ex: "Alterado em <br>....."
if ((!iniciadoComentario) && tagPresente && (linhaMinu.substring(0,1).compareTo("<") != 0))
142
faltaComplementoTexto = true; //força inclusão na linhaSemTag
while (((pont1 = linhaMinu.indexOf("<",pont1)) != -1) || (!tagPresente) || (iniciadoComentario) ||
(faltaComplementoTexto)) {
//verifica se trata-se de um comentario
if (linhaMinu.indexOf("<!--",pont1) != -1) {
iniciadoComentario = true;
tagPresente = true;
}
if (iniciadoComentario) { //verifica se tem comentário aberto
if (pont1 < 3) //evita erro indexoutofbound
pont1 = 0;
else
pont1 = pont1 - 3; //pior hipótese: ...--><
if ((pont1 = linhaMinu.indexOf("-->",pont1)) != -1) {
iniciadoComentario = false;
if ((pont1 = linhaMinu.indexOf("<",pont1)) == -1)
break;
}
else
break;
}
if (!faltaComplementoTexto) {
if ((pont1 != -1) && (tagPresente)) {
tagPresente = false;
//identificar as tags cabeçalho e corpo para inserir linha de identificaçao na PágSemTag
if (linhaMinu.length() >= pont1 + 5) {
if (linhaMinu.substring(pont1,pont1 + 5).compareTo("<head") == 0)
list3.add("CABEÇALHO DA PÁGINA");
if (linhaMinu.substring(pont1,pont1 + 5).compareTo("<body") == 0) {
list3.add("CORPO DA PÁGINA");
corpoPagina = true;
}
}
}
else
pont1 = 0;
if ((pont1 = linhaMinu.indexOf(">",pont1)) != -1)
tagPresente = true;
}
else
pont1 = -1;
pont1++;
if (((linhaMinu.length() != pont1) && (pont1 != 0)) || (faltaComplementoTexto)) {
linhaResto = linhaMinu.substring(pont1).trim(); // resto da linha
if ((linhaResto.length() != 0) && (linhaResto.substring(0,1).compareTo("<") != 0)) { //verifica se o resto
inicia com outra tag
StringTokenizer linhaTok = new StringTokenizer(linhaResto,"\t\n\r<>");
linhaSemTag += linhaTok.nextToken();
if (linhaMinu.indexOf("<",pont1) == -1) {
faltaComplementoTexto = true;
break;
}
else
faltaComplementoTexto = false;
}
143
else { // verificar se será iniciado um comentário
faltaComplementoTexto = false;
if (linhaMinu.indexOf("<!--",pont1) != -1) {
iniciadoComentario = true;
tagPresente = true;
}
}
}
else //aguardando tag > para mudar o status de tagPresente
break;
} // fim laço tag
if (linhaSemTag != "") {
list3.add(linhaSemTag);
if (linhaSemTag.indexOf(descAssu) != -1){ //achou
achouAssu = true;
break;
}
}
} //fecha o if (linha != vazio)
} // fim do laço principal
}
catch (Exception e) {
System.err.println(e);
e.printStackTrace();
textArea1.append("Erro durante a leitura da página...\n");
return achouAssu;
}
return achouAssu;
}
public void inicializaVetBanco() {
String campoId, campoDesc;
String consulta = "SELECT IdAssu, DescAssu FROM TabAssunto";
vetDescAssu = new Vector();
vetDescAssuId = new Vector();
vetDescEquiv = new Vector();
vetDescEquivId = new Vector();
Statement st;
ResultSet rs;
try {
st = con.createStatement();
rs = st.executeQuery(consulta);
while (rs.next()) {
campoId = rs.getString(1);
campoDesc = rs.getString(2);
vetDescAssuId.addElement(campoId);
vetDescAssu.addElement(campoDesc);
}
consulta = "SELECT IdAssu, Equiv FROM TabEquiv";
rs = st.executeQuery(consulta);
while (rs.next()) {
campoId = rs.getString(1);
campoDesc = rs.getString(2);
vetDescEquivId.addElement(campoId);
vetDescEquiv.addElement(campoDesc);
}
st.close();
}
catch (SQLException sqlex) {
144
System.err.println(sqlex);
sqlex.printStackTrace();
}
}
/* MANUTENÇÃO DO ÍNDICE*/
public void mantemIndice() { //verifica a integridade do assunto-endereço no índice
Statement st;
ResultSet rs;
URL url;
URLConnection urlCon;
BufferedReader pagina;
String site, siteAnterior, origem, uf, idAssu, probaSt, resAssu;
int pos, contador, verif, proba, probaFinal;
boolean relac;
java.sql.Date data;
try {
contador = 0;
siteAnterior = "";
st = con.createStatement();
rs = st.executeQuery("SELECT IdAssu, Link, Verifica, Relac FROM TabIndice ORDER BY Link ASC");
while (rs.next()) {
idAssu = rs.getString(1);
site = rs.getString(2);
verif = rs.getInt(3);
relac = rs.getBoolean(4);
try {
url = new URL(site);
label5.setText("Manutenindo o link: " + site + " (CONECTANDO)");
origem = origemSite(site);
textArea1.append("ORIGEM: " + origem + "\n");
// abre a url
try {
urlCon = url.openConnection();
urlCon.setAllowUserInteraction(false);
data = new java.sql.Date(urlCon.getLastModified());
label5.setText("Manutenindo o link: " + site + " (LENDO)");
if (site.compareTo(siteAnterior) != 0) { // ganhar velocidade
pagina = new BufferedReader(new InputStreamReader(urlCon.getInputStream()));
percorreLinkManut(pagina); // identifica e insere assunto nos vetores
}
if (vetIdAssu.size() > 0) {
pos = vetIdAssu.indexOf(idAssu);
resAssu = "";
if (pos != -1) { //se faz parte do vetor
resAssu = (String) vetResumoAssu.elementAt(pos);
probaSt = (String) vetProba.elementAt(pos);
proba = Integer.parseInt(probaSt);
probaFinal = calculaProbabilidadeFinalManut(idAssu,proba);
if (vetEquiv.elementAt(pos) == "sim") //equivalente
atualizaTabIndice(idAssu,resAssu,probaFinal,site,origem,data,true);
else
atualizaTabIndice(idAssu,resAssu,probaFinal,site,origem,data,false);
verif = -1; //atribui 0 ao campo Verif
}
else { //assunto relacionado ou descrição equivalente
if (existeAssuntoRelacionado(idAssu)) {
proba = 0;
probaFinal = calculaProbabilidadeFinalManut(idAssu,proba);
145
atualizaTabIndice(idAssu,resAssu,probaFinal,site,origem,data,true);
verif = -1; //atribui 0 ao campo Verif
}
}
}
analisaCampoVerifica(site,idAssu,verif);
}
catch (UnknownHostException uhe) {
textArea1.append("HOST não encontrado\n");
analisaCampoVerifica(site,idAssu,verif);
System.err.println(uhe);
uhe.printStackTrace();
}
catch (NoRouteToHostException nrthe) {
textArea1.append("Rota/caminho não encontrado\n");
analisaCampoVerifica(site,idAssu,verif);
System.err.println(nrthe);
nrthe.printStackTrace();
}
catch (FileNotFoundException fnfe) {
textArea1.append("ARQUIVO não encontrado\n");
analisaCampoVerifica(site,idAssu,verif);
System.err.println(fnfe);
fnfe.printStackTrace();
}
catch (Exception e) {
textArea1.append("CONEXÃO não aberta\n");
System.err.println(e);
e.printStackTrace();
}
}
catch(MalformedURLException e) {
textArea1.append("URL inválida\n");
e.printStackTrace();
}
contador++;
label6.setText("LINKS MANUTENIDOS: " + contador);
siteAnterior = site;
} // fim laço principal
//verificar se algum site saiu do índice por completo
Vector vetOrigem = new Vector();
st = con.createStatement();
rs = st.executeQuery("SELECT Uf FROM TabSite");
while (rs.next()) {//todas as ufs e o tse
uf = rs.getString(1);
if (uf.length() < 3) //converte para TRE-XX
origem = "TRE-" + uf;
else
origem = uf; //tse
vetOrigem.addElement(origem);
}
if (vetOrigem.size() > 0){
rs = st.executeQuery("SELECT Origem FROM TabIndice");
while (rs.next()) {
origem = rs.getString(1);
if ((pos = vetOrigem.indexOf(origem)) != -1)
vetOrigem.removeElementAt(pos);
}
// desmarcar ind para o que restou do vetor vetOrigem
for (pos = 0; pos < vetOrigem.size(); pos++) {
146
origem = (String) vetOrigem.elementAt(pos);
informaTabSite(origem);
}
// tenta revisitar e recatalogar todos os sites que estão fora do índice
vetAPesq = new Vector(); //inicializa vetor a pesquisar
vetPesqOk = new Vector();
list1.removeAll();
list2.removeAll();
textArea1.append("Visitando sites FORA DO ÍNDICE\n");
rs = st.executeQuery("SELECT EndIp, Ind FROM TabSite");
while (rs.next()) {
site = rs.getString(1);
if (!rs.getBoolean(2)) {
vetAPesq.addElement(site);
list1.add(site);
}
}
montaIndice(); //somente para os sites fora do índice
}
st.close();
label6.setText("LINKS MANUTENIDOS: " + contador);
}
catch (SQLException sqlex) {
System.err.println(sqlex);
sqlex.printStackTrace();
}
}
/* VERIFICAÇÃO DO ÍNDICE*/
public void verificaIndice() { //verifica a confiabilidade do endereço no índice
Statement st;
ResultSet rs;
URL url;
URLConnection urlCon;
BufferedReader pagina;
String site, origem, idAssu, descAssu;
int contador, verif, pos;
boolean relac;
try {
contador = 0;
st = con.createStatement();
rs = st.executeQuery("SELECT IdAssu, Link, Verifica, Relac FROM TabIndice");
while (rs.next()) {
idAssu = rs.getString(1);
site = rs.getString(2);
verif = rs.getInt(3);
relac = rs.getBoolean(4);
if (!relac) { // se o assunto não estiver presente somente devido ao relacionamento
try {
url = new URL(site);
label5.setText("Verificando o link: " + site + " (CONECTANDO)");
origem = origemSite(site);
textArea1.append("ORIGEM: " + origem + "\n");
// abre a url
try {
descAssu = "";
if ((pos = vetDescAssuId.indexOf(idAssu)) != -1)
descAssu = (String) vetDescAssu.elementAt(pos);
if (descAssu.compareTo("") != 0) {
147
urlCon = url.openConnection();
urlCon.setAllowUserInteraction(false);
pagina = new BufferedReader(new InputStreamReader(urlCon.getInputStream()));
label5.setText("Verificando o link: " + site + "(LENDO)");
if (percorreLinkExisteAssunto(pagina,descAssu))
verif = -1; //atribui 0 ao campo Verif
analisaCampoVerifica(site,idAssu,verif);
}
}
catch (UnknownHostException uhe) {
textArea1.append("HOST não encontrado\n");
analisaCampoVerifica(site,idAssu,verif);
System.err.println(uhe);
uhe.printStackTrace();
}
catch (NoRouteToHostException nrthe) {
textArea1.append("Rota/caminho não encontrado\n");
analisaCampoVerifica(site,idAssu,verif);
System.err.println(nrthe);
nrthe.printStackTrace();
}
catch (FileNotFoundException fnfe) {
textArea1.append("ARQUIVO não encontrado\n");
analisaCampoVerifica(site,idAssu,verif);
System.err.println(fnfe);
fnfe.printStackTrace();
}
catch (Exception e) {
textArea1.append("CONEXÃO não aberta\n");
textArea1.append(e.getMessage());
System.err.println(e);
e.printStackTrace();
}
}
catch(MalformedURLException e) {
textArea1.append("URL inválida\n");
e.printStackTrace();
}
contador++;
label6.setText("LINKS VERIFICADOS: " + contador);
}//fim do if (!relac)
} // fim laço principal
st.close();
}
catch (SQLException sqlex) {
System.err.println(sqlex);
sqlex.printStackTrace();
}
}
/* CRIAÇÃO DO ÍNDICE*/
public void montaIndice() { // Varrendo os sites (busca em largura)
String site, origem;
URL url;
int contador = 0;
java.sql.Date data;
while (vetAPesq.size() > 0) {
site = (String) vetAPesq.elementAt(0);
//site = "http://ce01pdc.tre-ce.gov.br/coele/abertura.htm";
148
// verifica se a url é válida
try {
url = new URL(site);
// somente os links http serão visitados
if (url.getProtocol().compareTo("http") == 0) {
label5.setText("Percorrendo o site: " + site + " (CONECTANDO)");
origem = origemSite(site);
textArea1.append("----------//---------- ORIGEM: " + origem + "\n");
// abre a url
try {
//if (origem.compareTo("TRE-CE") == 0) { //verifica se origem é TRE- ou TSE
URLConnection urlCon = url.openConnection();
urlCon.setAllowUserInteraction(false);
data = new java.sql.Date(urlCon.getLastModified());
BufferedReader pagina = new BufferedReader(new InputStreamReader(urlCon.getInputStream()));
label5.setText("Percorrendo o site: " + site + "(LENDO)");
percorreLink(pagina); // procura novos links dentro da página e cria uma página sem tags
calculaProbabilidadeFinal();
list4.add("ALIMENTA ASSU DIRETA");
alimentaTabIndice(vetIdAssu,vetProba,vetResumoAssu,site,origem,data,false);
list4.add("ALIMENTA NÃO ENCONTRADO DIRETA");
alimentaTabIndice(vetIdAssuNE,vetProbaNE,vetResumoAssuNE,site,origem,data,true);
contador++;
label6.setText("SITES PERCORRIDOS: " + contador);
//}
}
catch (UnknownHostException uhe) {
textArea1.append("HOST não encontrado\n");
if ((site.substring(site.length()-3).compareTo(".br") == 0) && (site.length() < 30)) //se for site raiz
informaTabSite(origem);
System.err.println(uhe);
uhe.printStackTrace();
}
catch (NoRouteToHostException nrthe) {
textArea1.append("Rota/caminho não encontrado\n");
if ((site.substring(site.length()-3).compareTo(".br") == 0) && (site.length() < 30)) //se for site raiz
informaTabSite(origem);
System.err.println(nrthe);
nrthe.printStackTrace();
}
catch (FileNotFoundException fnfe) {
textArea1.append("ARQUIVO não encontrado\n");
if ((site.substring(site.length()-3).compareTo(".br") == 0) && (site.length() < 30)) //se for site raiz
informaTabSite(origem);
System.err.println(fnfe);
fnfe.printStackTrace();
}
catch (Exception e) {
textArea1.append("CONEXÃO não aberta\n");
System.err.println(e);
e.printStackTrace();
}
}
}
catch(MalformedURLException e) {
label5.setText("URL inválida");
e.printStackTrace();
}
// Fim da visita: o site deve ser removido do vetAPesq p/ vetPesqOk
vetPesqOk.addElement(site); //adiciona aos visitados
149
list2.add(site);
list2.repaint();
vetAPesq.removeElementAt(0); // remove da fila
list1.remove(0);
list1.repaint();
label3.setText("FILA A VISITAR (" + vetAPesq.size() + ")");
label4.setText("FILA VISITADO (" + vetPesqOk.size() + ")");
//if (contador == 1500)
//break;
} //fim do while
textArea1.append("\nFIM: MONTADO COM SUCESSO\n");
}
}
150
CÓDIGO DO APPLET DE CONSULTA AO ÍNDICE
(445 LINHAS DE CÓDIGO)
package buscaintvisual;
import java.awt.*;
import java.awt.event.*;
import java.applet.*;
import java.sql.*;
import java.net.*;
import java.io.*;
import java.util.*;
public class BuscaIntVisual extends Applet {
boolean isStandalone = false;
Panel panel1 = new Panel();
BorderLayout borderLayout2 = new BorderLayout();
Panel panel3 = new Panel();
Panel panel4 = new Panel();
Label label1 = new Label();
BorderLayout borderLayout4 = new BorderLayout();
TextField textField1 = new TextField();
Button button1 = new Button();
Choice choice1 = new Choice();
Choice choice2 = new Choice();
Label label2 = new Label();
Panel panel5 = new Panel();
BorderLayout borderLayout5 = new BorderLayout();
Panel panel6 = new Panel();
// Elementos para fazer conexão com o banco de dados
Connection con;
Statement st;
ResultSet rs;
String urlBd = "jdbc:odbc:Indice";
String user = "mia";
String passwd = "agentes";
String idAssuPri, assuntoPri;
int posPri;
//vetores
Vector vetIdAssu;
Vector vetDescAssu; //assuntos cadastrados no banco
Vector vetDescAssuId;
Vector vetDescEquiv; //assuntos equivalentes cadastrados no banco
Vector vetDescEquivId;
Label label3 = new Label();
Label label5 = new Label();
Panel panel7 = new Panel();
BorderLayout borderLayout6 = new BorderLayout();
Label label4 = new Label();
Panel panel2 = new Panel();
BorderLayout borderLayout3 = new BorderLayout();
BorderLayout borderLayout1 = new BorderLayout();
Label label6 = new Label();
Label label7 = new Label();
Panel panel8 = new Panel();
Panel panel9 = new Panel();
BorderLayout borderLayout7 = new BorderLayout();
Button btNao = new Button();
151
Button btPro = new Button();
Button btSim = new Button();
Button btCan = new Button();
Button btOk = new Button();
TextField textField2 = new TextField();
/**Get a parameter value*/
public String getParameter(String key, String def) {
return isStandalone ? System.getProperty(key, def) :
(getParameter(key) != null ? getParameter(key) : def);
}
/**Construct the applet*/
public BuscaIntVisual() {
}
/**Initialize the applet*/
public void init() {
try {
jbInit();
}
catch(Exception e) {
e.printStackTrace();
}
}
/**Component initialization*/
private void jbInit() throws Exception {
this.setLayout(borderLayout1);
panel1.setBackground(Color.orange);
panel1.setLayout(borderLayout2);
panel3.setBackground(Color.orange);
panel3.setLayout(borderLayout4);
panel4.setBackground(Color.orange);
panel4.setLayout(borderLayout5);
label1.setText("Digite a(s) palavra(s)-chave e clique em <BUSCAR> e/ou utilize o Filtro");
button1.setLabel(" Buscar ");
button1.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(ActionEvent e) {
button1_actionPerformed(e);
}
});
label2.setBackground(SystemColor.activeCaption);
label2.setForeground(Color.orange);
label2.setText("Ajuda... Busca Interativa");
label2.addMouseListener(new java.awt.event.MouseAdapter() {
public void mouseExited(MouseEvent e) {
label2_mouseExited(e);
}
public void mousePressed(MouseEvent e) {
label2_mousePressed(e);
}
});
label2.addMouseMotionListener(new java.awt.event.MouseMotionAdapter() {
public void mouseMoved(MouseEvent e) {
label2_mouseMoved(e);
}
});
textField1.setBackground(SystemColor.window);
textField1.setText(" ");
choice1.addItem(" ");
choice2.addItem(" ");
panel5.setBackground(Color.orange);
152
panel6.setBackground(Color.orange);
label3.setForeground(Color.blue);
label3.setText("Mensagem:");
label5.setText("Filtro (opcional):");
panel7.setBackground(Color.orange);
panel7.setLayout(borderLayout6);
label4.setForeground(Color.red);
label4.setText("Sites ausentes do índice:");
this.setBackground(Color.white);
panel2.setLayout(borderLayout3);
panel2.setBackground(SystemColor.activeCaption);
label6.setBackground(SystemColor.activeCaption);
label6.setForeground(Color.orange);
label6.setText("BUSCA INTERATIVA");
label7.setBackground(SystemColor.activeCaption);
label7.setForeground(Color.white);
label7.setText("Digite sinônimos ou termos relacionados com o conteúdo da busca e " +
"clique em <Ok> ");
panel8.setLayout(borderLayout7);
btNao.setLabel("Não");
btPro.setLabel("Provavelmente");
btSim.setLabel("Sim");
btCan.setLabel("Cancelar");
btCan.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(ActionEvent e) {
btCan_actionPerformed(e);
}
});
btOk.setLabel("Ok");
textField2.setText("textField2");
this.add(panel2, BorderLayout.CENTER);
panel2.add(label6, BorderLayout.NORTH);
panel2.add(label7, BorderLayout.WEST);
panel2.add(panel8, BorderLayout.SOUTH);
panel8.add(panel9, BorderLayout.SOUTH);
panel9.add(btSim, null);
panel9.add(btPro, null);
panel9.add(btNao, null);
panel9.add(btOk, null);
panel9.add(btCan, null);
panel2.add(textField2, BorderLayout.CENTER);
this.add(panel1, BorderLayout.NORTH);
panel1.add(panel3, BorderLayout.NORTH);
panel3.add(label1, BorderLayout.CENTER);
panel3.add(label2, BorderLayout.EAST);
panel1.add(panel4, BorderLayout.CENTER);
panel4.add(panel5, BorderLayout.WEST);
panel5.add(textField1, null);
panel5.add(button1, null);
panel4.add(panel6, BorderLayout.CENTER);
panel6.add(label5, null);
panel6.add(choice1, null);
panel6.add(choice2, null);
panel4.add(panel7, BorderLayout.SOUTH);
panel7.add(label4, BorderLayout.SOUTH);
panel7.add(label3, BorderLayout.CENTER);
//inserindo elementos nos combos Assunto e Origem
try {
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
con = DriverManager.getConnection(urlBd,user,passwd);
153
label3.setText("INICIALIZANDO...");
}
catch (ClassNotFoundException cnfex){
label3.setText("ERRO: Não foi possível carregar o driver JDBC/ODBC.");
cnfex.printStackTrace();
}
catch (SQLException sqlex){
label3.setText("ERRO: Não foi possível se conectar ao banco.");
sqlex.printStackTrace();
}
InicializaCombo();
label3.setText("APPLET INICIALIZADO");
}
/**Start the applet*/
public void start() {
button1.requestFocus();
textField1.requestFocus();
textField1.setText("");
choice1.remove(0);
choice2.remove(0);
btSim.setVisible(false);
btPro.setVisible(false);
btNao.setVisible(false);
panel2.setVisible(false);
iniciaVetBanco();
}
/**Stop the applet*/
public void stop() {
}
/**Destroy the applet*/
public void destroy() {
try { //desconecta o banco de dados
con.close();
}
catch (SQLException sqlex) {
label3.setText("ERRO: Não foi possível se desconectar.");
sqlex.printStackTrace();
}
}
/**Get Applet information*/
public String getAppletInfo() {
return "Applet Information";
}
/**Get parameter info*/
public String[][] getParameterInfo() {
return null;
}
public void InicializaCombo() {
String campoUf;
String consulta = "SELECT DescAssu FROM TabAssunto ORDER BY DescAssu ASC";
choice1.addItem("ASSUNTO");
choice2.addItem("ORIGEM");
try {
st = con.createStatement();
rs = st.executeQuery(consulta);
while (rs.next()) {
choice1.addItem(rs.getString(1));
}
consulta = "SELECT Uf, Ind FROM TabSite ORDER BY Uf ASC";
rs = st.executeQuery(consulta);
154
while (rs.next()) {
campoUf = rs.getString(1);
if (rs.getBoolean(2)) {
if (campoUf.compareTo("TSE")!=0)
campoUf = "TRE-" + campoUf;
choice2.addItem(campoUf);
}
else
label4.setText(label4.getText() + " " + campoUf);
}
st.close();
}
catch (SQLException sqlex) {
System.err.println(sqlex);
sqlex.printStackTrace();
}
}
/*BOTÃO PARA SUBMETER A BUSCA*/
void button1_actionPerformed(ActionEvent e) {
AppletContext ac = getAppletContext();
int total, pos, conta;
String campoLink,idAssu, descAssu, assunto;
String orig, origSel, assuSel;
vetIdAssu = new Vector();
label3.setText("REALIZANDO BUSCA, AGUARDE...");
descAssu = textField1.getText().trim();
if ((descAssu.compareTo("")!=0)||(choice1.getSelectedIndex()!=0)) {
try {
origSel = choice2.getSelectedItem();
assuSel = choice1.getSelectedItem();
//identificar quais os assuntos existentes na consulta
if (assuSel.compareTo("ASSUNTO")==0)
identificaAssunto(descAssu);
else {
descAssu = choice1.getSelectedItem();
if ((pos = vetDescAssu.indexOf(descAssu)) != -1) {
idAssu = (String) vetDescAssuId.elementAt(pos);
vetIdAssu.addElement(idAssu);
}
}
if (vetIdAssu.size() > 0) {
if (origSel.compareTo("ORIGEM")==0) {
orig = "n";
origSel = "";
}
else {
orig = origSel;
origSel = " AND Origem = '" + origSel + "'";
}
if (assuSel.compareTo("ASSUNTO")==0)
assuSel = "";
//Assuntos identificados
assunto = "";
assuntoPri = "";
if ((pos = vetDescAssu.indexOf(descAssu.toLowerCase())) != -1) {
idAssuPri = (String) vetDescAssuId.elementAt(pos);
155
assuntoPri = descAssu.toLowerCase();
posPri = vetIdAssu.indexOf(idAssuPri);
}
else {
posPri = 0;
idAssuPri = (String) vetIdAssu.elementAt(0);
if ((pos = vetDescAssuId.indexOf(idAssuPri)) != -1)
assuntoPri = (String) vetDescAssu.elementAt(pos);
}
//mostrar a página principal da consulta - CHAMAR SERVLET
if (assuSel.compareTo("")==0)
assuSel = "n";
campoLink = "http://localhost:8080/tabelaServlet?as="+assuntoPri+"&id="+idAssuPri+
"&or="+orig+"&se="+assuSel+"&ds="+ descAssu +"&nx=0" ;
try {
URL buscaEfetuada = new URL(campoLink);
ac.showDocument(buscaEfetuada,"_self");
}
catch (Exception ex) {
ex.printStackTrace();
}
} //fim do if tamanho do vetIdAssu
else {
label3.setText("ERRO: Nenhum assunto foi identificado com esse conteúdo.");
textField1.requestFocus();
}
}
catch (Exception eio) {
eio.printStackTrace();
}
} //fim do if para testar se foi digitado ou selecionado algo pelo usuário
else {
label3.setText("ERRO: Faltando argumento p/ realizar busca.");
textField1.requestFocus();
}
}
void label2_mouseMoved(MouseEvent e) {
Cursor c = new Cursor(Cursor.HAND_CURSOR);
label2.setForeground(Color.white);
label2.repaint();
label2.setCursor(c);
}
void label2_mouseExited(MouseEvent e) {
label2.setForeground(Color.orange);
label2.repaint();
}
public void iniciaVetBanco() {
String campoId, campoDesc;
String consulta = "SELECT IdAssu, DescAssu FROM TabAssunto";
vetDescAssu = new Vector();
vetDescAssuId = new Vector();
vetDescEquiv = new Vector();
vetDescEquivId = new Vector();
Statement st;
ResultSet rs;
156
try {
st = con.createStatement();
rs = st.executeQuery(consulta);
while (rs.next()) {
campoId = rs.getString(1);
campoDesc = rs.getString(2);
vetDescAssuId.addElement(campoId);
vetDescAssu.addElement(campoDesc);
}
consulta = "SELECT IdAssu, Equiv FROM TabEquiv";
rs = st.executeQuery(consulta);
while (rs.next()) {
campoId = rs.getString(1);
campoDesc = rs.getString(2);
vetDescEquivId.addElement(campoId);
vetDescEquiv.addElement(campoDesc);
}
st.close();
}
catch (SQLException sqlex) {
System.err.println(sqlex);
sqlex.printStackTrace();
}
}
public void identificaAssunto(String linha) {
int conta;
String assunto;
Vector vetToken = new Vector();
linha = linha.toLowerCase();
StringTokenizer token = new StringTokenizer(linha," \t\n\r()[]{}<>'!?.,:;/|@#$%&*-+=");
//montar vetor com os tokens para poder utilizar recursos de índice
while (token.hasMoreTokens())
vetToken.addElement(token.nextToken());
conta = 0;
//procurar assunto com 1 token de cada vez
while (vetToken.size() >= conta+1) {
assunto = (String) vetToken.elementAt(conta);
insereAssuntoNoVetor(assunto);
conta++;
} //fim laço 1 token
//procurar assunto com 2 tokens de cada vez
conta = 0;
while (vetToken.size() >= conta+2) {
assunto = ((String) vetToken.elementAt(conta)) + " " + ((String) vetToken.elementAt(conta+1));
insereAssuntoNoVetor(assunto);
conta++;
} //fim laço 2 tokens
//procurar assunto com 3 tokens de cada vez
conta = 0;
while (vetToken.size() >= conta+3) {
assunto = ((String) vetToken.elementAt(conta)) + " " + ((String) vetToken.elementAt(conta+1)) + " " +
((String) vetToken.elementAt(conta+2));;
insereAssuntoNoVetor(assunto);
conta++;
} //fim laço 3 tokens
}
157
public void insereAssuntoNoVetor(String assunto) {
int pos;
String campoIdAssu;
if ((pos = vetDescAssu.indexOf(assunto)) != -1) {
campoIdAssu = (String) vetDescAssuId.elementAt(pos);
if (vetIdAssu.contains(campoIdAssu) == false)
vetIdAssu.addElement(campoIdAssu);
}
else {
if ((pos = vetDescEquiv.indexOf(assunto)) != -1) {
campoIdAssu = (String) vetDescEquivId.elementAt(pos);
if (vetIdAssu.contains(campoIdAssu) == false)
vetIdAssu.addElement(campoIdAssu);
}
}
}
void label2_mousePressed(MouseEvent e) { //BUSCA INTERATIVA - NÃO IMPLEMENTADA
panel2.setVisible(true);
btSim.requestFocus();
}
void btCan_actionPerformed(ActionEvent e) {
panel2.setVisible(false);
textField1.requestFocus();
}
}
158
CÓDIGO DO SERVLET DE EXIBIÇÃO DOS RESULTADOS ENCONTRADOS
(329 LINHAS DE CÓDIGO)
package tabelaservlet;
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
import java.util.*;
import java.sql.*;
import java.net.*;
public class tabServlet extends HttpServlet {
private static final String CONTENT_TYPE = "text/html";
private Statement st = null;
private ResultSet rs = null;
private Connection con = null;
private String url = "jdbc:odbc:Indice";
private String user = "mia";
private String passwd = "agentes";
//vetores
private Vector vetIdAssu;
private Vector vetConta;
private Vector vetDescAssu; //assuntos cadastrados no banco
private Vector vetDescAssuId;
private Vector vetDescEquiv; //assuntos equivalentes cadastrados no banco
private Vector vetDescEquivId;
/**Initialize global variables*/
public void init(ServletConfig config) throws ServletException {
super.init(config);
}
/**Process the HTTP Get request*/
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException,
IOException {
int conta =0, total=0, pos=0, posPri=0, posAtual=0;
String campoIdAssu, campoLink, campoProba, campoOrigem;
String campoDataPag, campoVerifica, campoRelac, campoMemo;
String data, assunto, idAssu, assuntoPri, idAssuPri;
vetConta = new Vector();
vetIdAssu = new Vector();
//abre banco
try {
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
con = DriverManager.getConnection(url,user,passwd);
iniciaVetBanco();
}
catch (Exception e) {
System.err.println("Banco Indice não CONECTADO");
e.printStackTrace();
con = null;
}
//parâmetros
String assuntoAtual = request.getParameter("as");
String idAssuAtual = request.getParameter("id");
String origSel, orig = request.getParameter("or");
String assuSel = request.getParameter("se");
159
String descAssu = request.getParameter("ds");
String next = request.getParameter("nx");
int regInicial = Integer.parseInt(next);
if (orig.compareTo("n")==0)
origSel = "";
else
origSel = " AND Origem = '" + orig + "'";
if (assuSel.compareTo("n")==0)
assuSel = "";
response.setContentType(CONTENT_TYPE);
PrintWriter out = response.getWriter();
out.println("<html>");
out.println("<head><title>Resultado da Pesquisa</title></head>");
out.println("<body><h1 align=\"center\"><font face=\"Verdana\" size=\"5\" color=\"#000080\">");
out.println("INTRANET DA JUSTIÇA ELEITORAL</font><br>");
out.println("<font face=\"Verdana\" size=\"4\" color=\"#FF9900\">BUSCA DE
INFORMAÇÃO</font></h1>");
out.println("<APPLET");
out.println("CODEBASE = \".\"");
out.println("CODE = \"buscaintvisual.BuscaIntVisual.class\"");
out.println("ARCHIVE = \"BuscaIntVisual.jar\"");
out.println("NAME = \"Visualiza\"");
out.println("WIDTH = 700");
out.println("HEIGHT = 92");
out.println("HSPACE = 0");
out.println("VSPACE = 0");
out.println("ALIGN = top");
out.println(">");
out.println("Seu Browser não consegue visualizar APPLETS.");
out.println("</APPLET>");
out.println("<br>RESULTADO DA PESQUISA:");
//identificar quais os assuntos existentes na consulta
if (assuSel.compareTo("")==0)
identificaAssunto(descAssu);
else {
descAssu = assuSel;
if ((pos = vetDescAssu.indexOf(descAssu)) != -1) {
idAssu = (String) vetDescAssuId.elementAt(pos);
vetIdAssu.addElement(idAssu);
}
}
try {
pos=0;
while(vetIdAssu.size() > pos) {
idAssu = (String) vetIdAssu.elementAt(pos);
st = con.createStatement();
rs = st.executeQuery("SELECT IdAssu FROM TabIndice WHERE IdAssu = " + idAssu + origSel);
while (rs.next()) {
total++;
conta++;
}
vetConta.addElement(Integer.toString(conta));
conta = 0;
pos++;
}
160
if (total > 0)
out.println("<b> " + total + " </b><font size=\"2\">registro(s) encontrado(s)</font>");
else
out.println(" Nenhum registro catalogado no índice.");
out.println("<table width=700 cellspacing=0 cellpadding=3 bgcolor=\"#00FFFF\">");
out.println("<dl><td>Palavra-chave: <b>" + descAssu + "</b>");
if (assuSel.compareTo("")!=0) { //assunto selecionado
out.println("<dt>Filtro Selecionado: <i>assunto="+assuSel+"</i>");
if (orig.compareTo("n")!=0) //origem selecionada
out.println("<i>, origem="+orig+"</i>");
}
else
if (orig.compareTo("n")!=0) //origem selecionada
out.println("<dt>Filtro Selecionado: <i>origem="+orig+"</i>");
out.println("<dt>Assuntos Identificados:");
//Assuntos identificados
assunto = "";
assuntoPri = "";
if ((pos = vetDescAssu.indexOf(descAssu.toLowerCase())) != -1) {
idAssuPri = (String) vetDescAssuId.elementAt(pos);
assuntoPri = descAssu.toLowerCase();
posPri = vetIdAssu.indexOf(idAssuPri);
}
else {
posPri = 0;
idAssuPri = (String) vetIdAssu.elementAt(0);
if ((pos = vetDescAssuId.indexOf(idAssuPri)) != -1)
assuntoPri = (String) vetDescAssu.elementAt(pos);
}
if (assuSel.compareTo("")==0)
assuSel = "n";
if (assuntoAtual.compareTo(assuntoPri)!=0)
out.println("<dd>> <a href=\"http://localhost:8080/tabelaServlet?as="+assuntoPri+"&id="+idAssuPri+
"&or="+orig+"&se="+assuSel+"&ds="+ descAssu+"&nx=0\">"+ assuntoPri + " (" +
vetConta.elementAt(posPri) + ")</a> [principal]");
else {
out.println("<dd>> <b>"+ assuntoPri + " (" + vetConta.elementAt(posPri) + ")</b> [principal]");
posAtual = posPri;
}
pos = 0;
while(vetIdAssu.size() > pos) {
idAssu = (String) vetIdAssu.elementAt(pos);
if ((conta = vetDescAssuId.indexOf(idAssu)) != -1)
assunto = (String) vetDescAssu.elementAt(conta);
if (assunto.compareTo(assuntoPri)!=0) {
if (assunto.compareTo(assuntoAtual)!=0) {
campoLink = "http://localhost:8080/tabelaServlet?as="+assunto+"&id="+idAssu+
"&or="+orig+"&se="+assuSel+"&ds="+ descAssu+"&nx=0";
out.println("<dd>> <a href=\"" + campoLink + "\">" + assunto + " (" + vetConta.elementAt(pos) +
")</a>");
}
else {
out.println("<dd><b>> " + assunto + " (" + vetConta.elementAt(pos) + ")</b>");
posAtual = pos;
}
}
pos++;
161
}
out.println("<dl></td></table>");
out.println("<br><b>ASSUNTO: " + assuntoAtual.toUpperCase() + " (" + vetConta.elementAt(posAtual) +
")</b>");
st = con.createStatement();
rs = st.executeQuery("SELECT * from TabIndice WHERE IdAssu = " + idAssuAtual + origSel + " ORDER
BY Proba DESC");
total = 0;
descAssu = descAssu.toLowerCase();
int pulaReg = regInicial * 15;
while (rs.next()) {
if (total >= pulaReg)
if (total < pulaReg+15) {
campoIdAssu = rs.getString(1);
campoProba = rs.getString(2);
campoLink = rs.getString(3);
campoOrigem = rs.getString(4);
data = rs.getString(5);
campoDataPag = data.substring(8,10) + "/" + data.substring(5,7) + "/" + data.substring(0,4);
campoVerifica = rs.getString(6);
campoRelac = rs.getString(7);
campoMemo = rs.getString(8);
//colocar negrito quando houver fragmento de texto equivalente a submissão
pos = 0;
while ((pos = campoMemo.toLowerCase().indexOf(descAssu,pos)) != -1) {
campoMemo = campoMemo.substring(0,pos) + "<b>" +
campoMemo.substring(pos,pos+descAssu.length()) + "</b>" + campoMemo.substring(pos+descAssu.length());
pos = pos + descAssu.length();
}
if (campoVerifica.equals("0"))
campoVerifica = "NO AR";
else
campoVerifica = "FORA DO AR";
total++;
out.println("<dl><b>" + total + ". <a href=\"" + campoLink + "\">" + campoLink + "</b></a>" +
" , <font size=\"2\"><i>Probabilidade:</i></font> " + campoProba + "%");
out.println("<dd><font size=\"2\">" + campoMemo + "</font>");
out.println("<dd><font size=\"2\"><i>Origem:</i><b> " + campoOrigem + "</b>, <i>Data página:</i> " +
campoDataPag +
", <i>Última verificação:</i> " + campoVerifica + "</dl></font>");
}
else
break;
else
total++;
}
regInicial++;
if (rs.getRow()!=0) { //último registro
campoLink = "http://localhost:8080/tabelaServlet?as="+assuntoAtual+"&id="+idAssuAtual+
"&or="+orig+"&se="+assuSel+"&ds="+ descAssu+"&nx="+Integer.toString(regInicial);
out.println("<a href=\"" + campoLink + "\">>Próximos Registros</a>");
}
else
out.println("<b><font size=\"2\" color=\"#FF9900\">--- FIM DA PESQUISA ---</font></b>");
st.close();
}
catch (SQLException sqlex) {
System.err.println(sqlex);
sqlex.printStackTrace();
162
}
out.println("</body></html>");
out.close();
//fecha banco
try {
con.close();
}
catch (Exception e) {
System.err.println("Problema fechando o banco");
}
}
/**Clean up resources*/
public void destroy() {
}
public void iniciaVetBanco() {
String campoId, campoDesc;
String consulta = "SELECT IdAssu, DescAssu FROM TabAssunto";
vetDescAssu = new Vector();
vetDescAssuId = new Vector();
vetDescEquiv = new Vector();
vetDescEquivId = new Vector();
try {
st = con.createStatement();
rs = st.executeQuery(consulta);
while (rs.next()) {
campoId = rs.getString(1);
campoDesc = rs.getString(2);
vetDescAssuId.addElement(campoId);
vetDescAssu.addElement(campoDesc);
}
consulta = "SELECT IdAssu, Equiv FROM TabEquiv";
rs = st.executeQuery(consulta);
while (rs.next()) {
campoId = rs.getString(1);
campoDesc = rs.getString(2);
vetDescEquivId.addElement(campoId);
vetDescEquiv.addElement(campoDesc);
}
st.close();
}
catch (SQLException sqlex) {
System.err.println(sqlex);
sqlex.printStackTrace();
}
}
public void identificaAssunto(String linha) {
int conta;
String assunto;
Vector vetToken = new Vector();
linha = linha.toLowerCase();
StringTokenizer token = new StringTokenizer(linha," \t\n\r()[]{}<>'!?.,:;/|@#$%&*-+=");
//montar vetor com os tokens para poder utilizar recursos de índice
while (token.hasMoreTokens())
vetToken.addElement(token.nextToken());
conta = 0;
163
//procurar assunto com 1 token de cada vez
while (vetToken.size() >= conta+1) {
assunto = (String) vetToken.elementAt(conta);
insereAssuntoNoVetor(assunto);
conta++;
} //fim laço 1 token
//procurar assunto com 2 tokens de cada vez
conta = 0;
while (vetToken.size() >= conta+2) {
assunto = ((String) vetToken.elementAt(conta)) + " " + ((String) vetToken.elementAt(conta+1));
insereAssuntoNoVetor(assunto);
conta++;
} //fim laço 2 tokens
//procurar assunto com 3 tokens de cada vez
conta = 0;
while (vetToken.size() >= conta+3) {
assunto = ((String) vetToken.elementAt(conta)) + " " + ((String) vetToken.elementAt(conta+1)) + " " +
((String) vetToken.elementAt(conta+2));;
insereAssuntoNoVetor(assunto);
conta++;
} //fim laço 3 tokens
}
public void insereAssuntoNoVetor(String assunto) {
int pos;
String campoIdAssu;
if ((pos = vetDescAssu.indexOf(assunto)) != -1) {
campoIdAssu = (String) vetDescAssuId.elementAt(pos);
if (vetIdAssu.contains(campoIdAssu) == false)
vetIdAssu.addElement(campoIdAssu);
}
else {
if ((pos = vetDescEquiv.indexOf(assunto)) != -1) {
campoIdAssu = (String) vetDescEquivId.elementAt(pos);
if (vetIdAssu.contains(campoIdAssu) == false)
vetIdAssu.addElement(campoIdAssu);
}
}
}
}
UM MODELO DE INDEXAÇÃO SEMÂNTICA
PARA INTRANET
QUESTIONÁRIOS
165
QUESTIONÁRIO 1: APLICADO ANTES DO EXPERIMENTO
INSTRUÇÕES: Nas questões abaixo, marque um X dentro dos parênteses para indicar a
alternativa de sua escolha. Pode-se indicar apenas uma alternativa para cada questão.
1 QUAL SUA ÁREA DE ATUAÇÃO NA ORGANIZAÇÃO?
( ) Informática
( ) Judiciária
( ) Recursos Humanos
( ) Administrativa
( ) Financeira
2 QUAL O SEU CONHECIMETO EM INFORMÁTICA?
( ) Básico (utiliza por necessidade e somente quando necessário)
( ) Intermediário (fez cursos técnicos ou aprendeu pela prática do uso diário)
( ) Avançado (tem curso de nível superior na área ou adquiriu boa experiência pelo grande interesse que possui
nessa área)
3 COM QUE FREQUÊNCIA UTILIZA O COMPUTADOR NO TRABALHO?
( ) Diariamente
( ) Semanalmente
( ) Mensalmente
4 COM QUE FREQUÊNCIA UTILIZA A INTRANET (ver email, acessa a página do TRE)?
( ) Diariamente
( ) Semanalmente
( ) Mensalmente
5 JÁ VISITOU A PÁGINA PRINCIPAL DA INTRANET DE OUTROS TREs?
( ) Sim
( ) Não (indique o motivo)
__________________________________________________________________________________________
__________________________________________________________________________________________
__________________________________________________________________________________________
166
6 O QUE PODERIA MELHORAR A PRODUTIVIDADE DO TRABALHO DESEMPENHADO PELO
TRE DE MODO GERAL?
( ) O aumento da troca de experiências (informações) entre os TREs
( ) O aumento da integração entre as Secretarias do próprio TRE através de uma maior clareza do trabalho
executado por cada uma (melhor compartilhamento de informações)
( ) Os dois itens acima
7 QUAL A MELHOR FORMA DE SE COMPARTILHAR INFORMAÇÕES DENTRO DO TRE?
( ) Através do contato direto em reuniões
( ) Através de publicações de relatórios
( ) Através de um meio eletrônico que todos tenham acesso livre a qualquer momento (rede intranet: email,
página de intranet, área de disco pública, etc)
8 COMO VOCÊ ENCONTRA AS INFORMAÇÕES QUE PRECISA PARA DESEMPENHAR SUAS
ATIVIDADES?
( ) Pedindo o auxílio de várias pessoas entre as Secretarias
( ) Pedindo o auxílio apenas dos colegas que trabalham no seu mesmo local
( ) As informações estão disponíveis e você consegue acessá-las sozinho
9 CASO EXISTISSE UM PROGRAMA DE BUSCA DE INFORMAÇÃO DISPONÍVEL NA INTRANET,
VOCÊ IRIA:
( ) Sempre tentar usá-lo antes de recorrer aos colegas
( ) Não faria diferença na sua forma de procurar as informações necessárias
10 A INFORMÁTICA HOJE, NO TRE, FACILITA A REALIZAÇÃO DO SEU TRABALHO?
( ) Sim
( ) Não (apresente soluções)
__________________________________________________________________________________________
__________________________________________________________________________________________
__________________________________________________________________________________________
TERMO DE CONCORDÂNCIA
NOME DO ENTREVISTADO: _______________________________________________________________
LOTAÇÃO................................: ____________________
Atesto que respondi as questões com honestidade e concordo com a utilização deste questionário para a
tabulação e análise dos dados nele contidos visando a divulgação dos resultados obtidos.
Fortaleza, ____/____/ 2001
___________________________________
ASSINATURA
167
QUESTIONÁRIO 2: APLICADO APÓS O EXPERIMENTO
INSTRUÇÕES: Nas questões abaixo, marque um X dentro dos parênteses para indicar a
alternativa de sua escolha. Pode-se indicar apenas uma alternativa para cada questão. A última
questão é opcional.
1 QUAL A FACILIDADE DE USO DO PROGRAMA DE BUSCA?
( ) Pouca (o programa não deixa claro o que eu devo fazer para utilizá-lo)
( ) Razoável
( ) Muita (a interface é agradável e intuitiva)
2 QUAL A APLICABILIDADE DESSE PROGRAMA NO DIA A DIA DO SEU TRABALHO?
( ) Nenhuma
( ) Pouca
( ) Razoável
( ) Muita
3 SUGESTÕES DE MELHORIAS PARA O PROGRAMA? (opcional)
__________________________________________________________________________________________
__________________________________________________________________________________________
__________________________________________________________________________________________
__________________________________________________________________________________________
__________________________________________________________________________________________
TERMO DE CONCORDÂNCIA
NOME DO ENTREVISTADO: _______________________________________________________________
LOTAÇÃO................................: ____________________
Atesto que respondi as questões com honestidade e concordo com a utilização deste questionário para a
tabulação e análise dos dados nele contidos visando a divulgação dos resultados obtidos.
Fortaleza, ____/____/ 2001
___________________________________
ASSINATURA
Livros Grátis
( http://www.livrosgratis.com.br )
Milhares de Livros para Download:
Baixar livros de Administração
Baixar livros de Agronomia
Baixar livros de Arquitetura
Baixar livros de Artes
Baixar livros de Astronomia
Baixar livros de Biologia Geral
Baixar livros de Ciência da Computação
Baixar livros de Ciência da Informação
Baixar livros de Ciência Política
Baixar livros de Ciências da Saúde
Baixar livros de Comunicação
Baixar livros do Conselho Nacional de Educação - CNE
Baixar livros de Defesa civil
Baixar livros de Direito
Baixar livros de Direitos humanos
Baixar livros de Economia
Baixar livros de Economia Doméstica
Baixar livros de Educação
Baixar livros de Educação - Trânsito
Baixar livros de Educação Física
Baixar livros de Engenharia Aeroespacial
Baixar livros de Farmácia
Baixar livros de Filosofia
Baixar livros de Física
Baixar livros de Geociências
Baixar livros de Geografia
Baixar livros de História
Baixar livros de Línguas
Baixar livros de Literatura
Baixar livros de Literatura de Cordel
Baixar livros de Literatura Infantil
Baixar livros de Matemática
Baixar livros de Medicina
Baixar livros de Medicina Veterinária
Baixar livros de Meio Ambiente
Baixar livros de Meteorologia
Baixar Monografias e TCC
Baixar livros Multidisciplinar
Baixar livros de Música
Baixar livros de Psicologia
Baixar livros de Química
Baixar livros de Saúde Coletiva
Baixar livros de Serviço Social
Baixar livros de Sociologia
Baixar livros de Teologia
Baixar livros de Trabalho
Baixar livros de Turismo