Desenvolvimento de um Módulo de Indexação para Sistemas de

Transcrição

Desenvolvimento de um Módulo de Indexação para Sistemas de
SAMIRA CAMPOS FEITOSA
DESENVOLVIMENTO DE UM MÓDULO DE INDEXAÇÃO PARA
SISTEMAS DE RECUPERAÇÃO DE INFORMAÇÕES WEB
TRABALHO DE CONCLUSÃO DE CURSO
PALMAS
2004
TO
SAMIRA CAMPOS FEITOSA
DESENVOLVIMENTO DE UM MÓDULO DE INDEXAÇÃO PARA
SISTEMAS DE RECUPERAÇÃO DE INFORMAÇÕES WEB
Monografia
apresentada
como
requisito parcial da disciplina Prática de
Sistemas de Informação II (TCC) do
curso de Sistemas de Informação,
orientada pelo Prof. Fernando Luiz de
Oliveira .
PALMAS - TO
2004
SAMIRA CAMPOS FEITOSA
DESENVOLVIMENTO DE UM MÓDULO DE INDEXAÇÃO PARA
SISTEMAS DE RECUPERAÇÃO DE INFORMAÇÕES WEB
Monografia
apresentada
como
requisito parcial da disciplina Prática de
Sistemas de Informação II (TCC) do
curso de Sistemas de Informação,
orientada pelo Prof. Fernando Luiz de
Oliveira .
Aprovada em Julho de 2004.
BANCA EXAMINADORA
_______________________________________________________
Prof. Fernando Luiz de Oliveira.
Centro Universitário Luterano de Palmas
_______________________________________________________
Profª. Parcilene Fernandes de Brito, M.Sc.
Centro Universitário Luterano de Palmas
_______________________________________________________
Prof. Eduardo Leal, M.Sc.
Centro Universitário Luterano de Palmas
PALMAS
2004
... a Deus por estar sempre ao meu lado.
AGRADECIMENTOS
Agradeço primeiramente a Deus, que sempre me guia e auxilia em todos os
momentos de minha vida.
Aos meus pais pela força, estímulo e paciência.
Aos meus amigos, pela ajuda incondicional, principalmente a Daniela, que está
sempre pronta a ajudar.
Ao meu amigo e colega no desenvolvimento deste, Aislan, cuja ajuda foi de grande
valor na elaboração e desenvolvimento deste.
Ao meu orientador Fernando, pela paciência e dedicação em todos os momentos da
realização deste trabalho.
A todos professores deste curso que diretamente ou indiretamente contribuíram
para minha aquisição de conhecimentos.
SUMÁRIO
1. INTRODUÇÃO ...............................................................................................................10
2. REVISÃO DE LITERATURA........................................................................................12
2.1 Recuperando informações...............................................................................12
2.2 Recuperação de Informações na Web .............................................................13
2.3 Sistemas de Recuperação de Informações na Web .........................................15
2.3.1 O Processo de Indexação ..........................................................................19
2.3.2 Trabalhos Correlatos.................................................................................21
2.3.3 Módulo de Indexação................................................................................22
3. MATERIAIS E MÉTODOS............................................................................................24
3.1 Materiais .........................................................................................................24
3.2 Método ............................................................................................................25
4 RESULTADOS E DISCUSSÕES ....................................................................................26
4.1 Visão Geral da Implementação.......................................................................26
4.2 Arquitetura do Sistema ...................................................................................27
4.2.1 Bases de Índices........................................................................................28
4.2.2 Eliminação: Caracteres Especiais, Sinais de Pontuação, Palavras
Irrelevantes e Números ................................................................................................28
4.2.3 Algoritmo para Extração de Radicais (Stemming)....................................29
4.3 Considerações sobre a Implementação ...........................................................29
4.4 Testes ..............................................................................................................35
4.5 Resultados .......................................................................................................38
4.6 Limitações.......................................................................................................39
5 CONSIDERAÇÕES FINAIS ...........................................................................................40
6 TRABALHOS FUTUROS ...............................................................................................41
7 REFERÊNCIAS BIBLIOGRÁFICAS .............................................................................42
8 ANEXOS ..........................................................................................................................44
LISTA DE FIGURAS
Figura 1: Arquitetura Padrão SRI Web ...............................................................................17
Figura 3: Estrutura do Banco, Relacionamentos e Cardinalidade .......................................28
Figura 4: Recuperação das tags importantes para o processo de indexação........................30
Figura 5: Método BuscaTag................................................................................................31
Figura 6: Método BuscaTags ...............................................................................................32
Figura 7: Inserção de Tags Na base de índices ....................................................................32
Figura 8: Método deleteIgnoradas .......................................................................................33
Figura 9: Método deleteCharacter .......................................................................................34
Figura 10: Extração dos Radicais e Sufixos / Armazenamento Base de Índices.................35
Figura 11: Documento a ser Indexado .................................................................................35
Figura 12: Código Fonte Documento Testado.....................................................................36
Figura 13: Extração de tags .................................................................................................36
Figura 14: Tabela de Radicais .............................................................................................37
Figura 15: Tabela de Sufixos ..............................................................................................38
Figura 16: Resultado da Indexação......................................................................................39
LISTA DE ABREVIATURAS
HTML
HiperText Markup Language
HTTP
Hypertext Transfer Protocol
SGBD
Sistema Gerenciador de Banco de Dados
SMART
System for Manipulation and Retrieval of Text
SRI WEB
Sistema de Recuperação de Informações Web
TCP/IP
Transmission Control Protocol / Internet Protocol
TREC
Text Retrieval Conference
URL
Uniform Resource Locator
RESUMO
A grande quantidade de documentos disponíveis na Web tem aumentado
substancialmente o número de pesquisas e propostas que visam facilitar e agilizar as
buscas por informações úteis na Web. Estas pesquisas englobam desde o desenvolvimento
de ferramentas de busca, até formas de melhor representar a informação.
Sendo a palavra a fonte principal de acesso a informação, os Sistemas de
Recuperação de Informações Web buscam cada vez mais, aprimorar seus métodos e
técnicas de forma a garantir a satisfação do usuário quando este realiza uma busca.
Este trabalho propõe o desenvolvimento de uma Estrutura de Indexação, que busca
potencializar o Processo de Indexação através do uso de algoritmos responsáveis pela
extração de radicais, eliminação de palavras irrelevantes, entre outras técnicas. Tendo
como objetivo principal a geração e o gerenciamento de uma base de índices, este trabalho
desenvolve apenas parte de um Sistema de Recuperação de Informação Web, porém, uma
parte de grande importância, visto que todo o resto do sistema trabalha sobre sua estrutura.
ABSTRACT
The large amount of documents on the Web has increased the number of researches
and purposes that wants to facilitate and make fast the searches about excellent
information. This researches enclose the development of search tools, as the best away to
present the information.
As the word is the main source of information access, the Retrieval Information
Web Systems search to make better the methods and techniques to make sure the
satisfaction to the user with their searches.
This work to aim at development a Index Struct, that try to make better the Index
Process through of use algorithms that are responsable by extract radicals, cut out
irrelevant words, among other techniques. As main goal the creation and the management
of a index source, this work develop just part of the Retrieval Information Web System,
but a important part, because the remain of the system work about this struct.
1. INTRODUÇÃO
Com o crescimento do volume de documentos disponibilizados para os usuários
através da rede mundial de computadores e devido a enorme diversidade de conteúdos
encontrado nos mesmos, tornou-se necessário o desenvolvimento de Sistemas de
Recuperação de Informações Web. Uma das maiores dificuldades encontradas por este tipo
de sistema é recuperação rápida e precisa de documentos relevantes às necessidades de
seus usuários.
Segundo MACEDO (2001), encontrar informações úteis na Internet é uma tarefa
considerada complexa, demorada e frustrante para muitos usuários. Isto acontece devido as
imprecisões dos atuais Sistemas de Recuperação de Informações Web (SRI Web) e a
inadequada formulação da consulta feita pelos usuários inexperientes.
Os SRI´s Web, em sua arquitetura padrão, são compostos por três módulos
distintos. O primeiro refere-se ao Módulo Controlador de Robots, que tem por finalidade
percorrer a WWW em busca de novos documentos (páginas), fazer uma cópia dos mesmos
e armazená-los em um repositório de documentos (diretório), mantido por este módulo. O
segundo, Módulo Indexador, tem por objetivo verificar o repositório de documentos criado
pelo Controle de Robots, e para cada documento ali existente, extrair destes as palavras que
melhor identificam seu conteúdo, armazenando estas palavras em uma base de dados,
conhecida na literatura como base de índices, que este módulo gerencia. Já o terceiro,
denominado por Módulo de Consulta, tem por objetivo permitir que o usuário realize
consultas, sendo que estas serão aplicadas sobre a base gerada pelo Módulo Indexador.
No entanto, conforme SALTON & MCGILL (1983) apresenta, a precisão e rapidez
de um SRI Web são medidas importantes e que devem ser levadas em consideração nos
Módulos de Indexação e Consulta. Isto porque, se a indexação do documento for feita da
11
maneira correta, a recuperação através do Módulo de Consulta será mais rápida e eficiente,
retornando documentos realmente relevantes para o usuário.
O objetivo deste trabalho é desenvolver um Módulo Indexador, que é parte de um
SRI Web, tendo como finalidade desenvolver uma estrutura de indexação de documentos
Web. Para isso, foram estudadas diversas formas de indexação, os quais serão apresentados
nas seções seguintes.
O presente trabalho está assim distribuído: a seção 2, referente a Revisão de
Literatura, aborda os conceitos necessários para o bom entendimento e conclusão deste
trabalho; a seção 3, traz os Materiais e Método utilizados para o desenvolvimento; a seção
4, apresenta os Resultados e Discussão, apresentando o Módulo de Indexação
desenvolvido; e, por fim, a seção 5 trata das Considerações Finais referentes a este
trabalho.
2. REVISÃO DE LITERATURA
Para que o objetivo deste trabalho seja alcançado, faz-se necessário que alguns
conceitos envolvidos sejam apresentados e aprofundados. Para que o Módulo de Indexação
possa ser desenvolvido é necessário ter o conhecimento de como um Sistema de
Recuperação de Informação Web está organizado, e onde e com quem este módulo se
relaciona. Por isto, esta seção inicia com o conceito de Recuperação de Informação e sobre
a necessidade dos Sistemas de Recuperação de Informação (SRI) no processo de
desenvolvimento da Web. Após estas definições, a arquitetura geral de um SRI Web é
apresentada, sendo nela contextualizado o foco deste trabalho, ou seja, o Módulo de
Indexação. Também serão apresentados alguns trabalhos correlatos, estudados e
analisados, que serviram de base para a correta conclusão deste trabalho.
2.1 Recuperando informações
DRETSKE(1981) afirma que a informação é o conhecimento sobre uma fonte, onde
a fonte é representada pelo documento original, a qual é transmitida ao receptor, sendo este
o observador da fonte.
O conceito de Recuperação de Informação, definido inicialmente em 1951 por
MOEERS (1951), avalia a recuperação de informação como sendo um processo ou método
onde o usuário converte a sua necessidade de informação numa lista real de documentos
que contenham informações relevantes para este. Afirma ainda que, a Recuperação de
Informação abrange os aspectos intelectuais da descrição da informação, a sua
especificação para a busca, assim como a utilização de sistemas ou máquinas utilizados na
recuperação da informação.
13
Estando o usuário de um Sistema de Recuperação de Informações interessado em
recuperar alguma informação sobre determinado assunto, para este a Recuperação de
Informação consiste na identificação, em um conjunto de documentos armazenados, de
documentos relevantes à sua necessidade de informação. Contudo pode-se definir como
função do Processo de Recuperação de Informações a tarefa de conversão da necessidade
do usuário em uma lista de documentos que atendam esta necessidade, sendo que o
desempenho deste processo é medido através da similaridade entre a necessidade do
usuário e a lista de documentos.
Segundo SARACEVIC (1995), a busca em um SRI é:
Um processo de alta complexidade envolvendo numerosos fatores e variáveis
além de decisões e o entrelaçamento dos sub-processos inter-relacionados com a
busca. Uma das chaves para um dos sub-processos é a da seleção dos termos para
a estratégia de busca que por sua vez é influenciada por outros fatores,
particularmente os relacionados com os resultados. Esta questão pode ser
sintetizada através da pergunta: Que
termos da busca devem ser selecionado
para um determinado tema que represente efetivamente o problema de informação
do usuário? .
Para BAEZA-YATES & RIBEIRO-NETO (1999), inicialmente, a Recuperação de
Informações era feita conforme as necessidades do usuário, ou seja, a pesquisa era feita
sobre bases de dados sem nenhuma estrutura ou organização. Neste caso, o texto era
tratado de forma natural, não considerando as ambigüidades semânticas, ou melhor, as
similaridades nos significados existentes na linguagem padrão. Muitos avanços foram
obtidos através dos diversos estudos na área de Recuperação de Informação. No entanto,
um dos maiores desafios nesta área ainda continua sendo a de definir meios para que as
informações recuperadas tenham o maior grau de relevância e aproveitamento possível,
atendendo assim as necessidades dos usuários.
Segundo SOERGEL(1985), o desempenho do Processo de Recuperação depende
principalmente da similaridade entre os termos de indexação de um documento e as
exigências da pergunta e da adaptação da pergunta às características do Processo de
Recuperação.
2.2 Recuperação de Informações na Web
14
Diversos estudos para o desenvolvimento de Sistemas capazes de compartilhar e
recuperar Informações na rede vêm sendo projetados desde 1969, quando o DOD
(Departamento de Defesa dos Estados Unidos) desenvolveu o sistema de comunicação que
permitia a interligação de computadores.
A partir do sistema de comunicação, diversas foram as redes desenvolvidas por
instituições de pesquisa e empresas privadas, criando assim uma comunidade que trocava
informações entre si. Em 1980, foi adotado como protocolo de comunicação entre redes, o
TCP/IP, formando assim uma rede de redes, também conhecida como Internet, permitindo
a troca de informações por milhares de usuários.
Em 1992 foram desenvolvidos os sistemas ARCHIE e GOPHER, sendo o
primeiro um sistema de busca em arquivos e o segundo um sistema de busca que utiliza
menus e diretórios.
Em 1989 começou a ser desenvolvida uma tecnologia com o objetivo de
compartilhar informações. Neste período as informações compartilhadas resumiam-se
apenas em documentos textuais e este compartilhamento de informações foi chamado de
Internet. Surgiu então a linguagem HTML, linguagem específica para Web juntamente
com os protocolos de comunicação denominado TCP/IP. A Web é considerada a maior
fonte de informação nas principais áreas do conhecimento, sendo formada por um conjunto
de documentos denominados páginas. Cada página disponibilizada na Internet possui seu
endereço, também chamado de URL, protocolo de transferência HTTP e a especificação
padrão para sua estrutura. A estrutura de uma página é definida pela linguagem de
marcação HTML, sendo que através desta definem-se os diferentes componentes utilizados
em uma página.
Com o advento da Web e com a facilidade de geração e disponibilização de
documentos, a Internet vem se tornando a maior fonte de armazenamento de dados, tendo
aumentado consideravelmente a quantidade de informações por esta disponibilizadas. Em
conseqüência disto, começaram a ser desenvolvidos Sistemas para Recuperação de
Informações Web que tem como objetivo a Recuperação de Informações baseada nas
necessidades de informação do usuário.
No contexto Web, a Recuperação de Informação consiste principalmente em
determinar quais documentos pertencentes a uma coleção, contém as palavras-chaves
provenientes de uma consulta de usuário. Porém, estes documentos recuperados,
15
freqüentemente, não são suficientes para satisfazer a necessidade de informação destes
usuários (BAEZA-YATES & RIBEIRO-NETO, 1999).
2.3 Sistemas de Recuperação de Informações na Web
Com o crescimento do volume de documentos disponibilizados para os usuários
através da rede mundial de computadores e devido a enorme diversidade de conteúdos
encontrado nos mesmos, tornou-se necessário o desenvolvimento de Sistemas de
Recuperação de Informações Web. Uma das maiores dificuldades encontradas por estes
sistemas referem-se à questão da recuperação rápida e precisa de documentos relevantes às
necessidades do usuário.
O problema da Recuperação de Informação Web, devido a grande quantidade de
informações que esta disponibiliza, pode ser caracterizado da seguinte forma: de que
maneira distinguir uma informação relevante que atende alguma necessidade de uma
informação irrelevante . Os sistemas automáticos cuja finalidade é resolver o problema da
Recuperação de Informação são chamados de Sistemas de Recuperação de Informações
Web (LALMAS & RIJSBERGEN, 1996).
Um Sistema de Recuperação de Informações Web (SRI Web) tem como tarefa
armazenar, manter e recuperar informações sendo estas estruturadas ou não. Seu objetivo
principal é fornecer os meios que permita diminuir o esforço humano na busca de
informações, recuperando informações que realmente atendam as necessidades dos
usuários.
É comum observar a existência de SRI relativos à áreas específicas, tal como a área
médica, a área jurídica, sistemas de bibliotecas digitais, entre outros. Porém existem outros
que trabalham com a recuperação de informação genérica. Como exemplos destes últimos
podem ser citados: Miner1, Google2, AltaVista3, entre outros tantos disponíveis na Internet.
1
Endereço: www.miner.uol.com.br
Endereço: www.google.com.br
3
Endereço: www.altavista.digital.com
2
16
A arquitetura padrão de um SRI Web é apresentado na Figura 1. Esta arquitetura
caracteriza-se por ser composta por três módulos: Controle de Robots, Módulo Indexador e
o Processo de Consulta.
Os documentos são obtidos pelo Módulo Controle de Robots, sendo que este
percorre a internet localizando novos documentos através da análise inicial de um conjunto
de documentos. Ao localizar novos documentos, estes são armazenados em um repositório
de documentos, também chamado de repositório de páginas. Após o armazenamento é
finalizada a tarefa deste módulo. A Figura 1 apresenta detalhadamente a arquitetura de um
SRI.
17
Documentos
Necessidade do usuário
Perda
de
Informação
Processo
de
Processo
de
especificação
indexação
de consulta
Uma representação dos
Índices
documentos
Processo
Consulta
de
recuperação
Lista de documentos
recuperados
Figura 1: Arquitetura Padrão SRI Web [NOGUEIRA, 1997]
O segundo, Módulo Indexador, tem como finalidade analisar cada documento
(página) encontrado no repositório de documentos. Este módulo caracteriza-se por extrair
de cada documento, as palavras-chave, assim como outras informações relevantes sobre
18
estes, armazenando-as em uma base de dados, conhecida na literatura como base de
índices.
O Módulo de Consulta permite ao usuário realizar consultas, através de uma
interface disponibilizada ao mesmo. Esta consulta é aplicada sobre a base de índices onde
estão as informações que permitem ao Módulo de Consulta, recuperar as informações que
mais se aproximam das necessidades do usuário.
Os SRI s tiveram sua importância aumentada com o advento da Internet, sendo que,
os primeiros baseavam-se na contagem da freqüência das palavras no texto (Freqüência
Absoluta4 e Freqüência Relativa5) e na eliminação de palavras de pouca relevância ou
significância, como algumas classes pertencentes à gramática como os artigos,
preposições, entre outros. No entanto, pesquisas foram surgindo até que SALTON &
MCGILL(1983), em seu livro, descreve a aplicação do processamento da linguagem
natural e da Lógica Fuzzy na Recuperação de Informações desencadeando, assim,
pesquisas relacionadas a Inteligência Artificial (IA). Além do processamento da linguagem
natural, diversas outras áreas da IA foram e estão sendo empregadas na solução de
problemas relativos à Recuperação de Informação, tais como: Sistemas Especialistas,
Redes Neurais e Algoritmos Genéticos.
Assim, os SRI´s Web devem obter os documentos (páginas) disponíveis na Web,
através do Módulo de Controle de Robots, representar o conteúdo destes documentos,
através do Módulo de Indexação e recuperá-los e apresentá-los ao usuário, através do
Módulo de Consulta.
Segundo LALMAS & RIJSBERGEN (1996) a eficiência de um sistema de
recuperação de informações Web é necessariamente medida por dois parâmetros, sendo
estes a qualidade da abrangência e a precisão dos resultados. A qualidade da abrangência
4
Freqüência Absoluta: é o número de vezes que o valor de determinada variável é observado.
Freqüência Relativa: é o quociente entre a freqüência absoluta do valor da variável e o número total de
observações
5
19
refere-se ao poder de análise de diferentes tipos de documentos utilizando-se a mesma
estrutura de indexação. Já a precisão dos resultados muitas vezes está diretamente
relacionada com questões referentes a ambigüidades inerentes à língua padrão,
dificuldades do usuário na elaboração das consultas, diferenças entre os vocabulários do
autor do documento e do usuário do sistema de recuperação, assim como deficiências no
processo de indexação.
Este trabalho, no entanto, foca apenas o Módulo de Indexação, tendo como objetivo
criar uma estrutura que permita criar os meios para melhorar a eficiência de um SRI Web.
Esta eficiência poderá ser posteriormente observada, quando o Módulo de consulta for
implementado. Porém, este último módulo citado não será abordado neste trabalho.
Para
LALMAS & RIJSBERGEN (1996), um SRI Web para ser considerado
preciso deve recuperar apenas documentos originais relevantes que correspondem
exatamente as necessidades de informação.
Para o desenvolvimento de uma estrutura de Indexação, é necessário conhecer
detalhadamente cada componente do processo de indexação. Estes componentes serão
abordados na próxima seção.
2.3.1 O Processo de Indexação
O Processo de Indexação consiste no desenvolvimento ou especificação de
estruturas de Indexação. Atualmente, o desenvolvimento de estruturas com esta finalidade
tem como meio principal de acesso aos documentos a palavra ou termo, sendo que a partir
desta foram e estão sendo desenvolvidas diversas técnicas para a indexação cada vez mais
precisas de documentos Web.
Para SOERGEL (1985), a exatidão em um Processo de Indexação é garantida pela
ausência de erros neste processo, evitando assim um menor desempenho do Processo de
Recuperação. O Processo de Indexação é suscetível a dois tipos de erros tais como: Erro de
Omissão, neste caso uma palavra relevante não é atribuída como termo de indexação e
Erro de Co-omissão, que ocorre quando uma palavra irrelevante é atribuída no Processo de
Indexação.
A Indexação é essencialmente um processo de classificação onde é realizada uma
análise conceitual do documento ou elemento de informação. A Indexação envolve a
atribuição de elementos de informação a certas classes, onde uma classe é o conjunto de
20
todos os elementos de informação para o qual um termo de Indexação (ou palavra-chave),
em particular, tem sido atribuído. Os elementos de informação podem fazer parte de várias
classes. Algumas técnicas atribuem pesos aos termos de Indexação de um elemento de
informação de forma a refletir sua relativa relevância. Nas técnicas baseadas no modelo
estatístico, os termos de indexação são extraídos a partir de uma análise de freqüência das
palavras ou frases em cada documento e em toda a fonte de informação. Nas técnicas
lingüísticas, os termos de indexação são extraídos utilizando técnicas de processamento da
linguagem natural, por exemplo, análise morfológica, lexical, sintática e semântica.
(GIRARDI, 1995).
O Processo de Indexação pode ser feito de duas formas: manual e automático. A
Indexação Manual, é feita por profissionais relacionados a área da Indexação que
especificam os assuntos, classificando-os e indexando as páginas através desta
classificação, sendo este processo similar ao realizado em bibliotecas tradicionais. Este
Processo de Indexação é considerado eficiente e de alta precisão quando a busca do usuário
está relacionada a uma categoria existente, sendo que caso contrário o resultado não terá a
precisão esperada .A Indexação Automática é feita através da seleção de endereços URL de
páginas e pela indexação destas páginas, gerando para cada uma termos de indexação que
representem seu conteúdo. Processo de Indexação Automática é bastante utilizado, apesar
de não serem revelados os métodos adotados para a realização da Indexação, fato este que
compromete o processo de avaliação dos Sistemas de Recuperação de Informações Web
(FERNEDA, 2003).
Porém diversas são as técnicas desenvolvidas para serem utilizadas juntamente com
os processos de Indexação Automática. Uma técnica é conhecida por atribuir pesos ao
conteúdo do documento, sendo que o peso do conteúdo é medido pela tag que o delimita.
A eliminação de palavras pouco significativas, como artigos e preposições e a utilização de
algoritmos para extração de radicais(Stemming) também são bastante utilizados pelos
atuais Processos de Indexação.
O Processo de Indexação tem como finalidade a extração de palavras-chave em
documentos, com o intuito de contribuir dessa forma com o Processo de Recuperação de
Informações. São diversas as maneiras e os métodos que um Processo de Indexação pode
utilizar, sendo que alguns processos relevantes para a área de Recuperação de Informação
serão apresentados a seguir.
21
Alguns sistemas computacionais se utilizam de propriedades como o grau de
relevância de um termo para o documento, sendo esta técnica melhor explicada ao
considerar como termo de indexação uma palavra que apareça em poucos documentos
reduzindo assim número de documentos que atendam as necessidades dos usuários.
Contudo, serão apresentadas abaixo algumas estruturas de Indexação já
desenvolvidas e que serviram de alicerce para o desenvolvimento da estrutura proposta
neste trabalho.
2.3.2 Trabalhos Correlatos
2.3.2.1 System for Manipulation and Retrieval of Text (SMART)
Um projeto de grande contribuição para a área de Recuperação de Informação,
desenvolvido em 1961 por Gerald Salton denominado SMART (SALTON, 1971) tem sua
implementação baseada na utilização de vetores numéricos, sendo que cada documento é
por este representado. O valor de cada palavra ou termo deste vetor descreve a importância
do termo dentro do contexto do documento. A importância dos termos para um documento
é medida através de métodos automáticos, sendo que estes calculam o peso de cada palavra
para o documento A medida utilizada para o cálculo do peso do termo é dada pela
freqüência deste no documento e pelo número de documentos nos quais este aparece.
Assim o método utilizado para a atribuição de pesos indica como melhor termo de
indexação as palavras que apresentam maior peso, sendo que estas são as que ocorrem com
grande freqüência em poucos documentos (FERNEDA, 2003).
O sistema SMART calcula e atribui pesos não só para os termos do documento
como para a expressão de busca, onde esta também é representada por um vetor, sendo
que o usuário atribui a cada termo da expressão de busca um peso, onde este especifica a
relevância de cada termo da expressão para a necessidade do usuário. Sendo este método
considerado bastante útil quando utilizado por usuários experientes e um recurso bastante
confuso quando trata-se de usuários inexperientes.
Para a utilização do sistema SMART, é necessário antes da atribuição de pesos aos
termos de indexação dos documentos, definir quais palavras do documento serão
consideradas termos de indexação, sendo que este sistema incorpora algumas ferramentas
de análise lingüística para extração automática de termos de indexação.
22
Portanto, o Processo de Indexação do sistema SMART se dá por etapas, onde o
primeiro passo é a identificar e isolar cada palavra do texto. Após este processo, são
eliminadas palavras com grande freqüência e pouco valor semântico, também chamadas de
(stop-words), tais como: preposições, artigos, entre outras palavras de pouca relevância
para a indexação de documentos. O próximo passo consiste em extrair, do conjunto de
palavras resultantes do primeiro passo, o radical, eliminando-se os sufixos e afixos,
processo este conhecido por Stemming. Após a extração do radical, estes são incorporados
aos vetores dos documentos e a este vetor é atribuído um peso que é calculado através da
medida de obtenção de pesos descrita anteriormente. Este sistema trabalha também com a
formação de termos de indexação compostos, sendo estes formados pelo agrupamento de
palavras de baixo peso formando assim termos mais específicos( FERNEDA, 2003).
2.3.1.2
Arquivos Invertidos
Outra técnica utilizada em Processos de Indexação é a utilização de Arquivos
Invertidos, por apresentar eficiência, possuir estrutura simples e por apresentar diversas
possibilidades de compressão, reduzindo assim os custos com espaço para armazenamento.
Esta técnica se utiliza de índices, que servem para localizar determinado termo em um
documento. Para a utilização desta técnica, é necessário o auxílio de uma estrutura, ou seja,
uma lista (vocabulário) composta por todos os termos contidos no documento. É
denominado Arquivo Invertido o índice que aponta os documentos que contém as palavras
que pertencem à lista ou vocabulário. Logo, um Arquivo Invertido apresenta, para cada
termo deste vocabulário, um conjunto de documentos que contém o referido termo.
Apesar de sua estrutura e funcionamento serem relativamente simples, a utilização
desta técnica torna-se inviável pelo fato da utilização dos Arquivos Invertidos consumirem
um espaço considerável. Isto levando-se em conta a quantidade de documentos existentes
na Web, sendo que isto pode ser resolvido com a utilização de armazenamento secundário
no Processo de Indexação (SILVEIRA, 1999).
2.3.2
Módulo de Indexação
23
Em um Sistema de Recuperação de Informações, o Módulo de Indexação tem como
objetivo criar estruturas de índices para que o Módulo de Consulta possa trabalhar. Para
isto, é necessário que o mesmo consulte constantemente o repositório de documentos, que
é gerado pelo Módulo Controle de Robots, para que, cada documento encontrado neste
repositório, possa ser analisado. Esta análise é a responsável por, a partir do conteúdo de
um documento, criar as estruturas de indexação, armazenando em uma base de índices as
palavras-chave, o título, subtítulos e partes do conteúdo do documento relevantes para o
processo de consulta.
Portanto, a maneira pela qual o documento será analisado está diretamente ligada
com a estrutura de indexação utilizada pelo módulo. Os primeiros Módulos de Indexação
foram desenvolvidos retirando do documento, ou seja, de seu código fonte, as tags
html/htm, eliminando também palavras repetidas dentro do documento, e palavras sem
relevância para a recuperação.
No entanto, a função do Módulo de Indexação em um Sistema de Recuperação de
Informação é a geração de uma base de índices, sendo que esta contém o endereço do
documento, título, as palavras-chave, entre outras informações que possibilitam uma maior
precisão no Processo de Recuperação.
24
3. MATERIAIS E MÉTODOS
3.1 Materiais
As pesquisas para a realização deste trabalho foram feitas
no Laboratório
Reservado aos Alunos de Estágio e TCC, utilizando os recursos de hardware e software
disponíveis.
Hardware:
Pentium III, 750MHz, com 128 MB de memória RAM;
Softwares:
Windows 2000 Professional;
SGBD MySql;
Eclipse;
J2SDK versão 1.2;
25
3.2 Método
Foram feitos levantamentos bibliográficos sobre o Processo de Recuperação de
Informações,
Sistemas de Recuperação de Informação Web, análise e adoção de
metodologias de trabalhos já desenvolvidos.
4 RESULTADOS E DISCUSSÕES
4.1 Visão Geral da Implementação
A implementação do Módulo de Indexação proposta neste trabalho foi realizada de
maneira genérica, sendo um exemplo de generalidade a opção de modificação de Banco de
Dados utilizado, onde para isso basta somente trocar o tipo de conexão, viso que as
instruções SQL utilizadas não são específicas do SGBD adotado. Outra característica é a
opção de execução da aplicação em diversas plataformas sem a necessidade de rescrever o
código, pelo fato da aplicação ser desenvolvida em Java e esta ser multiplataforma
(Windows, Linux, etc).
Para o desenvolvimento do Módulo de Indexação, objetivo deste trabalho, foi
utilizado a Linguagem de Programação Java e seus recursos, tal como o uso de Threads
para melhorar a performance do sistema, levando em conta a grande quantidade de
documentos a serem trabalhados. O motivo pela utilização desta linguagem refere-se ao
caráter multiplataforma apresentado por esta, bem como as facilidades advindas com ela,
visto que muito das estruturas a serem usadas já estão implementadas e são passíveis de
serem utilizadas.
Para desenvolver esta estrutura, foram necessários estudos sobre processos
semelhantes disponíveis na tentativa de obter uma melhor forma de indexação,
aprimorando, desta forma, o processo de Recuperação de Informações. Por isto, o Processo
de Indexação desenvolvido foi baseado no Sistema SMART, contendo também algumas
características extraídas de outros sistemas descritos na seção de trabalhos correlatos.
Considerando a quantidade de documentos e a diversidade de estruturas destes,
este trabalho propõe a Indexação de documentos que estão armazenados em um diretório
27
específico. Os documentos devem ser arquivos com extensão html/htm e estarem bem
formados seguindo os padrões da linguagem HTML 1.0.
A implementação é dividida em módulos, cada qual com sua função, sendo que o
objetivo geral desta é a extração e armazenamento do radical assim como o
armazenamento das terminações deste. No entanto, a indexação de um documento deve
focar apenas as palavras que melhor representam o conteúdo de um determinado
documento. Assim, palavras que muito se repetem ou que não são relevantes não devem
ser indexadas. Para isso, foi utilizado um vocabulário de palavras consideradas irrelevantes
para o Processo de Indexação, tais como: artigos, preposições, além de desconsiderar
acentos, sinais, caracteres especiais e números.
4.2 Arquitetura do Sistema
A arquitetura do Sistema desenvolvido é composta por três partes distintas: o
diretório, composto por documentos Web, que é o dispositivo de entrada para o Processo
de Indexação; o processamento, parte do sistema que analisa e Indexa cada documento
encontrado no repositório; e, por fim, a base de índices que é a saída do Módulo de
Indexação, onde nesta estão armazenadas informações do documento, como seu endereço,
título e palavras-chave. A arquitetura do sistema será apresentada a seguir, através da
Figura 2.
Gera
Sistema
Consulta
Repositório de Documentos
Base de Índices
O funcionamento do sistema consiste na verificação do repositório de documentos.
Se este possuir algo, o sistema inicia seu Processo de Indexação e após a execução deste
armazena os índices gerados em uma base de índices. A seguir serão apresentados os
recursos utilizados assim como as estruturas da base de índices.
28
4.2.1
Bases de Índices
Para armazenar a estrutura de índices, gerados por este módulo, foi utilizado o
Sistema Gerenciador de Banco de Dados (SGDB) MySql. A base criada para suportar a
estrutura de índices será apresentada a seguir.
Figura 3: Estrutura do Banco, Relacionamentos e Cardinalidade
A tabela url armazena o endereço de cada página juntamente com o título desta. Na
tabela topicos, para cada url armazena-se várias tags que são consideradas importantes
para o Processo de Recuperação. Cada url armazenada pode possuir vários radicais e, cada
radical presente na tabela radicais, pode apresentar diversos sufixos, sendo estes,
armazenados na tabela sufixo.
4.2.2
Eliminação: Caracteres Especiais, Sinais de Pontuação, Palavras Irrelevantes e
Números
A eliminação de caracteres especiais juntamente com sinais de pontuação faz-se
necessária para esta aplicação como intuito de evitar que palavras com significado
idêntico, mas com grafias diferentes sejam armazenadas, causando assim redundância no
armazenamento das informações. Um exemplo de fatos como este é a ocorrência da
palavra email que também pode ser encontrada com a grafia e-mail , e assim por diante.
Ao utilizar o algoritmo de eliminação, o segundo termo terá sua grafia igual ao primeiro
através da retirada do caractere - , evitando assim o armazenamento redundante. Para a
29
eliminação dos caracteres especiais e sinais de pontuação foi feita uma pesquisa sobre
estes, sendo que a lista destes a serem eliminados estão em anexo.
Com o mesmo objetivo, ou seja, indexar somente as palavras que melhor
representam um determinado documento, outra atividade a ser trabalhada refere-se a
eliminação dos artigos, preposições, conjunções, lista de palavras que deverão ser
desconsideradas para o Processo de Indexação, restringindo bastante o número de palavras
sobre as quais serão aplicadas o algoritmo para extração do radical e dos sufixos. A lista
com as palavras a serem desconsideradas foi obtida através de pesquisas em dicionários e
gramáticas da língua portuguesa e a mesma encontra-se anexada neste trabalho.
4.2.3
Algoritmo para Extração de Radicais (Stemming)
Os algoritmos de Stemming, que realizam a extração dos radicais de palavras de um
documento, são bastante utilizados por serem algoritmos genéricos, que se preocupam em
retirar o radical das palavras. Estes algoritmos têm como propósito reduzir um conjunto de
palavras em um mesmo radical sendo este chamado de Stem. Outro objetivo deste tipo de
algoritmo é chegar a um Stem que recupere uma palavra genérica. Estes algoritmos, no
entanto, podem apresentar falhas, não conseguindo, por exemplo, extrair o radical correto.
Nesta aplicação, foi desenvolvido um algoritmo que analisa um conjunto de
palavras e através de um contador de caracteres semelhantes define o grau de similaridade
entre palavras, sendo que o maior grau é considerado o radical para o conjunto de palavras
analisadas. Este algoritmo armazena então este radical e também os sufixos ou terminações
de cada radical, tornando assim a base de índices bastante genérica, oferecendo com isso
diversas maneiras de desenvolvimento do Processo de Indexação.
4.3 Considerações sobre a Implementação
Com o objetivo de desenvolver uma estrutura de indexação e considerando que
para a realização deste processo é necessário a existência de arquivos em um diretório,
parte-se do princípio que o processo de aquisição de documentos, realizado pelo primeiro
módulo, Controle de Robots, já tenha sido executado.
30
Contudo o Processo de Indexação inicia-se com a verificação da existência ou
não de novos documentos no repositório que é gerenciado pelo módulo Controle de
Robots. Este módulo armazena os novos documentos, sendo estes, arquivos html/htm, e
também os endereços ou url de cada documento, onde estas são armazenadas em arquivos
com o mesmo nome dos arquivos htm/html exceto a extensão do arquivo.
A implementação desta aplicação se dá por módulos, dividida por funções onde
cada uma tem seu objetivo, sendo que a união de todas as funções presentes na aplicação
permite que esta atinja seu objetivo principal, gerar índices representativos para os
documentos.
O primeiro passo da implementação é a verificação da existência ou não de
documentos a serem Indexados, sendo que esta rotina é descrita a seguir:
1. Verificação da existência ou não de documentos no Repositório de
Documentos;
1.1 Caso existam documentos neste repositório o Processo de Indexação aciona
as Threads, conforme a capacidade de processamento, sendo que para cada
documento existente neste uma thread é criada.
1.2 Acionamento do Processo de Indexação pelas Threads.
1.3 Inicia-se a execução do Processo de Indexação.
2 Processo de Indexação
2.1 O Processo de Indexação inicia-se com a análise do documento através de
seu código fonte.
2.2 É extraído do arquivo o conteúdo, limpo e armazenado na base de índices.
Através do código fonte do documento são extraídas as tags consideradas
relevantes para o Processo de Recuperação de Informações. O trecho de código da
aplicação que executa a extração de tags é apresentado na Figura 4.
1
2
3
4
5
while(linha.indexOf("</html>")==-1)
&&(linha.indexOf("</HTML>")==-1));
titulo = this.BuscaTag("TITLE");
linha = this.BuscaTags("H1");
tags = linha.split(" ");
Figura 4: Recuperação das tags importantes para o processo de indexação
31
O código apresentado na Figura 4, as linhas 1 e 2 percorrem todo o código fonte do
documento até ser encontrada a tag </html>, que indica o fim do código. Na linha 3, ao
percorrer todo o documento, é extraído deste o conteúdo encontrado dentro da tag <title>.
Nas linhas 4 e 5 é feita a extração do conteúdo encontrado na tag h1, sendo que a busca e
extração das tags é realizada pelas funções BuscaTags e BuscaTag, sendo a primeira
utilizada quando for possível existir mais de uma ocorrência da mesma tag e a segunda
quando a tag só ocorre uma vez, como é o caso da tag <title> ...</title>. O código dos
respectivos métodos são apresentados nas Figuras 5 e 6.
Private String BuscaTag(String tag){
1 int inicio,fim,tamanho;
2
inicio =
texto.toString().toUpperCase().indexOf("<"+tag.toUpperCase()+">");
3
fim =
texto.toString().toUpperCase().indexOf("</"+tag.toUpperCase()+">",
inicio);
4
tamanho= tag.length()+2;
5
return(texto.toString().substring(inicio+tamanho,fim));}
Figura 5: Método BuscaTag
O método BuscaTag é utilizado para buscar tags cuja ocorrência se restringe a uma
por documento. Ao instanciar este método, deve-se informar qual tag deverá ser retornada,
sendo que esta é passada por parâmetro. Na linha 1 são declaradas as variáveis que serão
utilizadas nesta função. Na linha 2, percorre-se o documento em busca da tag,
armazenando o ponto inicial desta. Na linha 3 armazena-se o ponto final da referida tag. O
retorno desta função é executado na linha 5, sendo que este é dado pelo conteúdo
encontrado entre a ocorrência de início e fim da referida tag.
Private String BuscaTags(String tag){
1 int inicio=0,fim=0,tamanho;String retorno=" ";
2do{
3 inicio
texto.toString().toUpperCase().indexOf("<"+tag.toUpperCase()+">",f
im);
4 fim
texto.toString().toUpperCase().indexOf("</"+tag.toUpperCase()+">",
32
inicio);
5 tamanho=
tag.length()+2;
6 if(inicio>=0 && fim > 0)
7 retorno = retorno +"#" +
this.HTML2Texto(texto.substring(inicio+tamanho,fim));
8
}while(texto.toString().toUpperCase().indexOf("<"+tag.toUpperCase(
)+">",fim)>0 &&
texto.toString().toUpperCase().indexOf("</"+tag.toUpperCase()+">",
inicio)>0);
9 return(retorno);
}
Figura 6: Método BuscaTags
A função BuscaTags trabalha de maneira similar a função apresentada
anteriormente. No entanto, esta é utilizada quando a tag ocorre mais de uma vez no
documento, sendo que para capturar todas as ocorrências é utilizada uma estrutura de
repetição.
Após a extração das tags, é realizado o armazenamento destas na base de índices. O
trecho de código que executa esta operação será apresentado na Figura 7.
1 for(int i=0;i<tags.length;i++){
2 strSql = "insert into
topicos(urlid,tag,conteudo)values('"+this.URL+"','<H1>','"+tags[i]
+"')";
3 stexec.execute(strSql);
Figura 7: Inserção de Tags Na base de índices
A inserção de tags na base de índices é apresentada na Figura acima, sendo
que a linha 1 executa uma estrutura de repetição para armazenar todas as ocorrências de
uma tag na base e o armazenamento é feito com a execução da linha 3
Após a extração das tags, o documento é novamente percorrido para retirar deste
todas as tags, restando somente o documento sem nenhuma tag ou script referentes a
linguagens de programação. Neste ponto, executa-se sobre o documento, a extração dos
33
caracteres especiais, sinais de pontuação e números, juntamente com a extração de palavras
irrelevantes. Esta extração é feita baseando-se em documento contendo uma lista de
palavras irrelevantes para o Processo de Indexação e em outro documento contendo uma
lista de sinais, números e caracteres a serem extraídos do documento. O método utilizado
para extração tanto dos caracteres quanto das palavras é o mesmo, mudando somente o
arquivo de referência. O código para extração é apresentado nas Figuras 8 e 9.
Private void deleteIgnoradas() throws FileNotFoundException,
IOException{
1RandomAccessFile pont new RandomAccessFile(this.PalavrasIg,"r");
2String linha="xxxx";
3
while(linha!=null){
4
linha =pont.readLine();
5
if(linha!=null)
6
this.deleteCharacter(linha,0);
}
}
Figura 8: Método deleteIgnoradas
No método apresentado na Figura 8, a linha 1 acessa o arquivo de palavras a serem
ignoradas. Na estrutura de repetição, linha 4, a variável linha recebe, linha por linha, as
palavras a serem ignoradas do arquivo correspondente e quando chegar ao final deste
arquivo, é chamada a função deleteCharacter (linha 6 ), onde por esta são passadas o
caracter a ser excluído e uma variável inteira. Para a exclusão de caracteres, sinais e
números, o processo é o mesmo, mudando somente o arquivo de sinais a ser ignorado. O
código da função deleteCharacter (String Inicial,int x) será apresentado na Figura 9
Private void deleteCharacter(String Inicial,int x)
{
int inicio,fim; String limpo="";
1
do{
2
inicio = texto.toString().toUpperCase().indexOf("
"+Inicial.toUpperCase()+" ");
3
if(inicio>=0){
4
limpo =
texto.substring(inicio,inicio+Inicial.length()+1);
5
if (inicio>=0){
texto.delete(inicio,Inicial.length()+inicio+1);
}
}
6
}while(inicio>=0);
34
}
Figura 9: Método deleteCharacter
Após a exclusão dos caracteres especiais e das palavras a serem ignoradas, o
restante das palavras são ordenadas, sendo este processo realizado através de uma função
nativa da linguagem Java, o método Sort.
Assim, após estas verificações, o documento resultante conterá somente as palavras
consideradas Termos de Indexação onde, sobre estas, é aplicado um algoritmo para
extração de seus radicais e sufixos. O trecho de código que realiza a extração de radicais
bem como sufixos e os armazena na base de índices é apresentado na Figura 10.
Private void vrPalavraChave() throws SQLException{
Int Grau;
1 lst = new ArrayList();
2 String strSql,radicalid;
3 PreparedStatement stexec;
4 ResultSet rs;
5 int menor;
6
strSql ="Select * from urls where url='"+this.URL+"'";
7
stexec = conexao.prepareStatement(strSql);
8
9
10
11
12
13
for(int i=0;i<pchaves.length-1;i++){
Grau=0;
if(pchaves[i].length()>pchaves[i+1].length()){
menor=pchaves[i+1].length();
}else{
menor=pchaves[i].length();
}
14
for(int j=0;j<menor;j++){
15
if(pchaves[i].length()> 1 && pchaves[i+1].length()> 1
&& Grau+1<pchaves[i].length() && Grau+1<pchaves[i+1].length())
16
if (pchaves[i].charAt(j) == pchaves[i+1].charAt(j) &&
pchaves[i].substring(0,Grau+1).equalsIgnoreCase(
pchaves[i+1].substring(0,Grau+1))){
17
Grau++;
}}
18
if(pchaves[i].substring(0,Grau).equalsIgnoreCase(pchaves[i+1].subs
tring(0,Grau))&&Grau>1){
19
lst.add(pchaves[i].substring(Grau));
20
strSql ="select * from radical where urlid="+this.URL+" and
palavra='"+pchaves[i].substring(0,Grau)+"'";
21
rs = stexec.executeQuery(strSql);
22
if(!rs.first()){ strSql = "insert into
radical(urlid,palavra)VALUES('"+this.URL+"','"+pchaves[i].substrin
g(0,Grau)+"')";
35
23
stexec.execute(strSql);}
24
strSql ="select * from radical where urlid="+this.URL+" and
palavra='"+pchaves[i].substring(0,Grau)+"'";
25
rs = stexec.executeQuery(strSql);
26
rs.first();
27
radicalid = rs.getObject("id").toString();
28
strSql = "insert into
sufixo(radicalid,sufixo)values("+radicalid+",'"+pchaves[i].substri
ng(Grau,pchaves[i].length())+"')";
29
stexec.execute(strSql);
30
strSql = "insert into
sufixo(radicalid,sufixo)values("+radicalid+",'"+pchaves[i+1].subst
ring(Grau,pchaves[i+1].length())+"')";
31
stexec.execute(strSql);
}
}
}
Figura 10: Extração dos Radicais e Sufixos / Armazenamento Base de Índices
A figura acima apresenta o algoritmo utilizado para extração do radical bem como
dos sufixos e o armazenamento de ambos na base de índices. Este algoritmo trabalha com a
verificação de um conjunto de palavras semelhantes, sendo que esta semelhança é medida
pela variável grau. Esta variável determina até onde o conjunto de palavras é idêntico,
armazenando na base de índices este resultado como o radical da palavra, e o restante de
cada palavra é armazenado como sufixo.
Após a extração do radical e dos sufixos e do armazenamento destes na base de
índices, o documento é excluído do repositório de documentos.
4.4 Testes
Um Modelo Subsimbólico para Indexação de Informações Textuais
Resumo
Este documento apresenta o atual estágio de desenvolvimento da pesquisa que visa implementar e
avaliar o desempenho de um modelo subsimbólico para indexação de informações textuais
destinadas a um Sistema de Informações descentralizado para a Web. O resultado do
processamento deste modelo é a sugestão de termos que representam o conteúdo de artigos que
versam sobre Inteligência Artificial, bem como os respectivos pesos que indicam o grau de
importância de cada termo em relação ao tema discutido no texto.
Figura 11: Documento a ser Indexado
36
Esta figura apresenta o documento que será usado para teste da aplicação
desenvolvida. Este é um documento refere-se a uma página htm.
A seguir será apresentado o código fonte do mesmo.
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<!-- saved from
url=(0077)http://www.inf.ufrgs.br/pos/SemanaAcademica/Semana99/cla
udiabr/claudiabr.html -->
<HTML><HEAD><TITLE>wei 95</TITLE>
<META http-equiv=Content-Type content="text/html; charset=isso8859-1">
<META content="MSHTML 6.00.2600.0" name=GENERATOR>
<META content="C:\Program Files\Microsoft Office\Office\html.dot"
name=Template></HEAD>
<BODY vLink=#800080 link=#0000ff><B><FONT size=4>
<P align=center>Um Modelo Subsimbólico para Indexação de
Informações Textuais</P></FONT>
<P align=justify>Resumo</P></B><I>
<P align=justify>Este documento apresenta o atual estágio de
desenvolvimento da pesquisa que visa implementar e avaliar o
desempenho de um modelo subsimbólico para indexação de informações
textuais destinadas a um Sistema de Informações descentralizado
para a Web. O resultado do processamento deste modelo é a sugestão
de termos que representam o conteúdo de artigos que versam sobre
Inteligência Artificial, bem como os respectivos pesos que indicam
o grau de importância de cada termo em relação ao tema discutido o
texto. </P></I></FONT>
</BODY></HTML>
Figura 12: Código Fonte Documento Testado
Esta figura apresenta o código fonte do documento utilizado para teste da aplicação,
sendo que esta trabalha com o código fonte dos documentos.
As tags extraídas deste documento são apresentadas na Figura 13.
Figura 13: Extração de tags
37
Figura 14: Tabela de Radicais
A figura 14 apresenta os radicais extraídos do documento apresentado na figura 11.
Já a Figura 15, apresenta os sufixos extraídos deste mesmo documento, cujos radicais são
apresentados na Figura 14.
38
Figura 15: Tabela de Sufixos
4.5 Resultados
A análise dos resultados desta aplicação é apresentada na figura 16.
39
Quantidade de Palavras no Documento
Quantidade
Radicais
88
de Quantidade
de
Sufixos
14
38
Figura 16: Resultado da Indexação
Assim, é possível observar a importância da utilização de um Processo de
Indexação para Sistemas de Recuperação de Informações Web, onde com a utilização
deste, a quantidade de tempo e processamento gastos pelo Processo de Recuperação é
consideravelmente reduzida.
4.6 Limitações
Para que o sistema desenvolvido consiga atingir por completo seus objetivos, é
necessário que os documentos a serem analisados estejam bem formados, de acordo com
os padrões html 1.0.
Outra limitação refere-se a sua abrangência. Isto porque, como o sistema de
Indexação foi desenvolvido apenas utilizando a gramática da língua portuguesa, ele não
conseguiria fornecer bons resultados caso indexasse documentos em outras línguas. Porém,
esta limitação poderia ser sanada criando listas de palavras e caracteres não indexados para
estas referidas linguagens.
5 CONSIDERAÇÕES FINAIS
Com o crescimento da utilização da Web e, consequentemente, dos Sistemas de
Recuperação de Informações, em decorrência da enorme variedade de informações
disponibilizadas pela Internet, a cada dia que passa aumentam o número de pesquisas e
propostas na tentativa de melhorar as respostas fornecidas por estes tipos de sistemas a
seus usuários.
Foram analisados para o desenvolvimento desta aplicação trabalhos já realizados e
propostas de novos meios de indexação, todos estes visando o aprimoramento no Processo
de Recuperação de Informações Web.
O sistema desenvolvido tem o intuito de acrescentar os trabalhos referentes ao
Processo de Indexação, pelo fato de que a utilização deste processo ocorre na maioria dos
SRI´s disponíveis, porém ocultados o processo de indexação, fato este que acaba impondo
barreiras na evolução de novas estruturas de indexação. Se os Processos de Indexação
fossem divulgados, necessitaria apenas o desenvolvimento de técnicas para melhorar o que
já está pronto, mas como isso não ocorre, o desenvolvimento de Processos de Indexação
tem que ser feito por completo, o que acaba gerando um atraso na evolução da área de
Recuperação de Informação.
Para o desenvolvimento desta estrutura foi feito um estudo sobre as vantagens
oferecidas pelos diversos Processos de Indexação existentes, assim como das propostas
para o desenvolvimento destas. Com isso, foi obtido um conhecimento amplo sobre as
dificuldades durante o Processo de Indexação, sendo que este influi consideravelmente
para a avaliação de desempenho de SRI,s.
41
6 TRABALHOS FUTUROS
Como trabalho futuro pode ser citado a necessidade de se fazer um gerenciamento
para melhorar este no que se refere ao controle de documentos existentes. Neste trabalho,
todos os documentos existentes estão sendo indexados, mesmo que este já tenha sido
indexado anteriormente. Isto pode se tornar um problema visto que não há a necessidade
de se re-indexar um documento que não tenha sido modificado. Desta forma, pode-se,
futuramente, criar mecanismos que impeçam este re-trabalho, economizando tempo e
processamento do Sistema de Indexação.
Outro ponto a ser trabalhado, refere-se a limitação atual da ferramenta com relação
à abrangência do processo de indexação. Para que a ferramenta possa trabalhar e indexar
qualquer tipo de documento, sem perder sua funcionalidade, é necessário estudar e montar
as listas de caracteres e de palavras que não necessitam ser indexadas nas diversas
linguagens existentes.
42
7 REFERÊNCIAS BIBLIOGRÁFICAS
BAEZA-YATES, R. e RIBEIRO-NETO, B. Modern Information Retrieval.
ACM Press, Addison Wesley, 1999.
F.I.DRETSKE. Knowledge and the Flow of Information. Basic Blackwell
Publisher, 1981.
FERNEDA, E. Recuperação de Informação: Análise sobre a contribuição da
Ciência da Computação para a Ciência da Informação. 2003. Tese de
Doutorado.
GIRARDI, R. Classification and Retrieval of Software through their
Descriptions in Natural Language. Ph.D. Dissertação, No. 2782,
Geneva, Dezembro, 1995.
MACEDO, J. Recuperação de Informação Textual Distribuída por Fontes
Autônomas com Sobreposição. Tese de Doutorado, Universidade do
Ninho, Portugal, Julho 2001.
M. LALMAS & C.J. van RIJSBERGEN. Information Retrieval and Situation
Theory, 1996.
MOOERS, C. Zatocoding applied to mechanical organization of Knowledge.
American Documentation, v.2, n.1, p. 20-32, 1951.
NOGUEIRA, P.C.O., Recuperação de Informação. Universidade Federal de
Lavras, Departamento de Ciência da Computação, 1997.
SALTON, G.; McGLL, M.J. Introduction to modern information Retrieval.
Auckland: McGraw-Hill, 1983, 448p.
43
SARACEVIC, T. Interdisciplinary nature of information science. Ciência da
Informação. V. 24, n.1. p. 31-36, 1995.
SILVEIRA, M. Recuperação Aproximada de Informação em Textos
Comprimidos e Indexados. Universidade Federal de Minas Gerais.
Departamento de Ciência da Computação, 1999.
SOERGEL, D. Organizing Information. Principle of data base and Retrieval
Systems. Orlando, FL: Academic Press, 1985.
44
8 ANEXOS
45
Lista Palavras Ignoradas
o a os as eu me mim comigo tu te ti contigo ele ela se lhe si ele consigo nós conosco vós
convosco eles elas lhes si eles consigo
você senhor senhorita Vossa Excelência Vossa
Reverendíssima Eminência Santidade Majestade Imperial Alteza meu meus minha minhas
teu teus tua tuas seu seus sua suas nosso nossos nossa nossas vosso vossos vossas este
esta isto estes estas esse essa esses essas aquele aquela aquilo aqueles aquelas algum mais
qualquer bastante menos quanto cada muito tanto certo nenhum todo tudo diferente
outro um diversos pouco vários demais qual
cada qual qualquer um tal e seja qual for
sejam quem for todo quer que uma ou outra tais tal qual quais quanto quantos quanta
quantas que cujo cujos cuja cujas onde QUANTOS QUEM QUAL sempre amanhã aqui
ali talvez quando poderá será vir ser dia enquanto com isso como portanto contudo todavia
no entanto por porque por que porquê por quê certo certa certamente brevemente sendo
dessa deste desta disto
Lista de Sinais, Caracteres e Números
"'!@#$%&*( )_-+=`´¨{[ª^~}]º\|,.:;?/°0123456789
46
Código
Arquivo Testa.Java
import java.io.*;
import java.sql.SQLException;
/**
* @author Samira Feitosa
* To change this generated comment edit the template variable
"typecomment":
* Window>Preferences>Java>Templates.
* To enable and disable the creation of type comments go to
* Window>Preferences>Java>Code Generation.
*/
public class Testa {
public static void main(String[] args) {
LerArq Larq;
Thread
t;
File arq = new File("c:\\temp");
File files[];
files = arq.listFiles();
String Arquivo,urlarq;
for(int i=0;i<files.length;i++){
if (files[i].getPath().indexOf(".")>0)
if(files[i].getPath().substring(files[i].getPath().length()3,files[i].getPath().length()).equalsIgnoreCase("htm")||files[i].g
etPath().substring(files[i].getPath().length()3,files[i].getPath().length()).equalsIgnoreCase("html")){
Arquivo = files[i].getPath();
urlarq=
files[i].getPath().substring(0,files[i].getPath().indexOf("."))+".
url";
try {
Larq = new LerArq(urlarq,Arquivo)
t = new Thread(Larq);
t.start();
} catch (SQLException e) {
System.out.print(e.getMessage());
47
} catch (IllegalAccessException e) {
System.out.print(e.getMessage());
} catch (ClassNotFoundException e) {
System.out.print(e.getMessage());
} catch (InstantiationException e) {
System.out.print(e.getMessage());
} catch (IOException e) {
System.out.print(e.getMessage());
}finally{
files[i].deleteOnExit();
}
}
}
}
}
48
Arquivo LerArq.java
import java.io.*;
import java.util.*;
import java.sql.*;
/**
* @author Samira Campos Feitosa
*
* To change this generated comment edit the template variable
"typecomment":
* Window>Preferences>Java>Templates.
* To enable and disable the creation of type comments go to
* Window>Preferences>Java>Code Generation.
*/
public class LerArq implements Runnable {
private RandomAccessFile file;
private StringBuffer texto;
private String[] pchaves;
private Connection conexao;
private Driver drv;
private String URL;
private List lst;
private String pontuacaofile = "c:/temp/tcc/pontuacao.txt";
private String PalavrasIg = "c:/temp/tcc/clsgramat.txt";
private int i;
public LerArq(String Urlfile,String DadosHtml) throws
FileNotFoundException, IllegalAccessException,
ClassNotFoundException, InstantiationException, IOException,
SQLException {
RandomAccessFile furl;
file = new RandomAccessFile(DadosHtml,"r");
49
furl = new RandomAccessFile(Urlfile,"r");
texto=new StringBuffer();
drv
=
(Driver)Class.forName("org.gjt.mm.mysql.Driver").newInstance();
conexao =
DriverManager.getConnection("jdbc:mysql://localhost:3306/Bdtcc","r
oot","");
URL = furl.readLine();
furl.close();
}
public void run() {
try {
ler();
} catch (IOException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
}
public int ler() throws IOException, SQLException{
int inicio,fim;
PreparedStatement stexec;
ResultSet rs;
String linha="",titulo,textolimpo,limpo="";
String tags[];
String strSql;
do{
linha =file.readLine();
texto.append(linha);
}while((linha.indexOf("</html>")==1)&&(linha.indexOf("</HTML>")==-1));
titulo = this.BuscaTag("TITLE");
strSql ="Select * from urls where url='"+this.URL+"'";
50
stexec = conexao.prepareStatement(strSql);
rs = stexec.executeQuery();
if (!rs.first()){
strSql = "insert into urls
(url,titulo)values('"+this.URL+"','"+titulo+"')";
stexec.execute(strSql);
}else{
strSql = "update urls set titulo='"+titulo+"' where
url='"+this.URL+"'";
stexec.execute(strSql);
}
strSql ="Select * from urls where url='"+this.URL+"'";
stexec = conexao.prepareStatement(strSql);
rs = stexec.executeQuery();
rs.first();
this.URL = rs.getObject("id").toString();
strSql = "delete from topicos where urlid='"+this.URL+"'";
stexec.execute(strSql);
tags = this.BuscaTags("H1").split("#");
for(int i=0;i<tags.length-1;i++){
strSql = "insert into
topicos(urlid,tag,conteudo)values('"+this.URL+"','<H1>','"+tags[i]
+"')";
stexec.execute(strSql);
}
tags = this.BuscaTags("H2").split("#");
for(int i=0;i<tags.length-1;i++){
strSql = "insert into
topicos(urlid,tag,conteudo)values('"+this.URL+"','<H2>','"+tags[i]
+"')";
stexec.execute(strSql);
}
tags = this.BuscaTags("H3").split("#");
for(int i=0;i<tags.length-1;i++){
51
strSql = "insert into
topicos(urlid,tag,conteudo)values('"+this.URL+"','<H3>','"+tags[i]
+"')";
stexec.execute(strSql);
}
tags = this.BuscaTags("H4").split("#");
for(int i=0;i<tags.length-1;i++){
strSql = "insert into
topicos(urlid,tag,conteudo)values('"+this.URL+"','<H4>','"+tags[i]
+"')";
stexec.execute(strSql);
}
tags = this.BuscaTags("H5").split("#");
for(int i=0;i<tags.length-1;i++){
strSql = "insert into
topicos(urlid,tag,conteudo)values('"+this.URL+"','<H5>','"+tags[i]
+"')";
stexec.execute(strSql);
}
tags = this.BuscaTags("H6").split("#");
for(int i=0;i<tags.length-1;i++){
strSql = "insert into
topicos(urlid,tag,conteudo)values('"+this.URL+"','<H6>','"+tags[i]
+"')";
stexec.execute(strSql);
}
linha= this.BuscaTags("B");
tags = linha.split("#");
for(int i=0;i<tags.length-1;i++){
strSql = "insert into
topicos(urlid,tag,conteudo)values('"+this.URL+"','<B>','"+tags[i]+
"')";
stexec.execute(strSql);
}
this.deleteExpressao("<!",">");
this.deleteExpressao("<script","</script>");
this.deleteExpressao("&",";");
52
this.deletePontuacao();
this.deleteIgnoradas();
textolimpo = this.HTMLtoTexto();
pchaves = textolimpo.split(" ");
Arrays.sort(pchaves);
for(int i=1;i<pchaves.length;i++){
if(pchaves[i].equalsIgnoreCase(pchaves[i-1]) &&
(!pchaves[i].equalsIgnoreCase(""))){
pchaves[i]="";
Arrays.sort(pchaves);
i--;
}
}
strSql = "delete from radical where urlid="+this.URL;
stexec.execute(strSql);
this.vrPalavraChave();
return(0);
}
/**
* Método utilizado para a recuperação de tags que ocorrem
apenas 1 vez no documento como o título da página.
* @param tag- tag a ser recuperada
* @return conteúdo relativo a tag.
* **/
private String BuscaTag(String tag){
int inicio,fim,tamanho;
inicio =
texto.toString().toUpperCase().indexOf("<"+tag.toUpperCase()+">");
fim =
texto.toString().toUpperCase().indexOf("</"+tag.toUpperCase()+">",
inicio);
tamanho=
tag.length()+2;
return(texto.toString().substring(inicio+tamanho,fim));
}
53
/**
* Método utilizado para a recuperação de tags que ocorrem
mais 1 vez no documento como o negrito,título de capítulos .
* @param tag- tag a ser recuperada
* @return conteúdo relativo a tag.
* **/
private String BuscaTags(String tag){
int inicio=0,fim=0,tamanho;
String retorno=" ";
do{
inicio =
texto.toString().toUpperCase().indexOf("<"+tag.toUpperCase()+">",f
im);
fim =
texto.toString().toUpperCase().indexOf("</"+tag.toUpperCase()+">",
inicio);
tamanho=
tag.length()+2;
if(inicio>=0 && fim > 0)
retorno = retorno +"#" +
this.HTML2Texto(texto.substring(inicio+tamanho,fim));
}while(texto.toString().toUpperCase().indexOf("<"+tag.toUpper
Case()+">",fim)>0 &&
texto.toString().toUpperCase().indexOf("</"+tag.toUpperCase()+">",
inicio)>0);
return(retorno);
}
/**
* Metodo utilizado para apagar partes do texto
* @param tag- inicio e fim para localizacao do texto a ser
apagado
* @return
* **/
private void deleteExpressao(String Inicial,String Final){
54
int inicio,fim;
String limpo="";
do{
inicio =
texto.toString().toUpperCase().indexOf(Inicial.toUpperCase());
fim
=
texto.toString().toUpperCase().indexOf(Final.toUpperCase(),inicio)
;
if(fim>inicio && inicio>=0){
limpo = texto.substring(inicio,1+fim);
if (inicio>=0){
texto.delete(inicio,Final.length()+fim);
}
}
}while(inicio>=0);
}
/**
* metodo utilizado para apagar caracteres
* @param tag- inicio do local para apagar;
* @return .
* **/
private void deleteCharacter(String Inicial)
{
int inicio,fim;
String limpo="";
do{
inicio =
texto.toString().toUpperCase().indexOf(Inicial.toUpperCase());
if(inicio>=0){
limpo =
texto.substring(inicio,inicio+Inicial.length());
if (inicio>=0){
texto.delete(inicio,Inicial.length()+inicio);
}
}
55
}while(inicio>=0);
}
/**
* Metodo utilizado para apagar determinado caracter
* @param tag- inicio do local para apagar e o caracter a ser
apagado;
* @return .
* **/
private void deleteCharacter(String Inicial,int x)
{
int inicio,fim;
String limpo="";
do{
inicio = texto.toString().toUpperCase().indexOf("
"+Inicial.toUpperCase()+" ");
if(inicio>=0){
limpo =
texto.substring(inicio,inicio+Inicial.length()+1);
if (inicio>=0){
texto.delete(inicio,Inicial.length()+inicio+1);
}
}
}while(inicio>=0);
}
/**
* Metodo utilizado para percorrer todo texto em busca de
tags html
* @param tag- ;
* @return texto sem tag .
* **/
private String HTMLtoTexto(){
int inicio,fim;
String limpo="";
56
StringBuffer textolimpo;
fim=0;
textolimpo = texto;
do{
inicio = textolimpo.indexOf("<");
fim
= textolimpo.indexOf(">",inicio);
if(fim>0 && inicio>=0){
limpo = textolimpo.substring(inicio,1+fim);
textolimpo.delete(inicio,fim+1);
}
}while(limpo.compareToIgnoreCase("</HTML>")!=0 && fim>0 &&
inicio>=0);
return(textolimpo.toString());
}
/**
* Metodo utilizado para percorrer todo texto em busca de
determinada tags
* @param tag- tag a ser recuperado ;
* @return texto sem tag .
* **/
private String HTML2Texto(String txt){
int inicio,fim;
String limpo="";
StringBuffer texto = new StringBuffer(txt);
StringBuffer textolimpo;
fim=0;
textolimpo = texto;
do{
inicio = textolimpo.indexOf("<");
fim
= textolimpo.indexOf(">",inicio);
if(fim>0 && inicio>=0){
limpo = textolimpo.substring(inicio,1+fim);
textolimpo.delete(inicio,fim+1);
}
57
}while(limpo.compareToIgnoreCase("</HTML>")!=0 && fim>0 &&
inicio>=0);
return(textolimpo.toString());
}
/**
* metodo utilizado para apagar os sinais de pontuacao,
caracteres especiais e números definidos no arquivo
* @param tag- ;
* @return .
* **/
private void deletePontuacao() throws FileNotFoundException,
IOException{
RandomAccessFile pont = new
RandomAccessFile(this.pontuacaofile,"r");
String linha="xxxx";
while(linha!=null){
linha =pont.readLine();
if(linha!=null)
this.deleteCharacter(linha);
}
}
/**
* metodo utilizado para apagar palavras irrelevantes
definidos no arquivo
* @param tag- ;
* @return .
* **/
private void deleteIgnoradas() throws FileNotFoundException,
IOException{
58
RandomAccessFile pont = new
RandomAccessFile(this.PalavrasIg,"r");
String linha="xxxx";
while(linha!=null){
linha =pont.readLine();
if(linha!=null)
this.deleteCharacter(linha,0);
}
}
/**
* metodo utilizado para extrair o radical das palavras que
sobraram do texto
* @param tag- ;
* @return .
* **/
private void vrPalavraChave() throws SQLException{
int Grau;
lst = new ArrayList();
String strSql,radicalid;
PreparedStatement stexec;
ResultSet rs;
int menor;
strSql ="Select * from urls where url='"+this.URL+"'";
stexec = conexao.prepareStatement(strSql);
for(int i=0;i<pchaves.length-1;i++){
Grau=0;
if(pchaves[i].length()>pchaves[i+1].length()){
menor=pchaves[i+1].length();
}else{
menor=pchaves[i].length();
}
for(int j=0;j<menor;j++){
59
if(pchaves[i].length()> 1 &&
pchaves[i+1].length()> 1
&& Grau+1<pchaves[i].length() &&
Grau+1<pchaves[i+1].length())
if (pchaves[i].charAt(j) ==
pchaves[i+1].charAt(j) &&
pchaves[i].substring(0,Grau+1).equalsIgnoreCase(
pchaves[i+1].substring(0,Grau+1))){
Grau++;
}
}
if(pchaves[i].substring(0,Grau).equalsIgnoreCase(pchaves[i+1]
.substring(0,Grau))&&Grau>1){
lst.add(pchaves[i].substring(Grau));
strSql ="select * from radical where
urlid="+this.URL+" and
palavra='"+pchaves[i].substring(0,Grau)+"'";
rs = stexec.executeQuery(strSql);
if(!rs.first()){
strSql = "insert into
radical(urlid,palavra)VALUES('"+this.URL+"','"+pchaves[i].substrin
g(0,Grau)+"')";
stexec.execute(strSql);
}
strSql ="select * from radical where
urlid="+this.URL+" and
palavra='"+pchaves[i].substring(0,Grau)+"'";
rs = stexec.executeQuery(strSql);
rs.first();
radicalid = rs.getObject("id").toString();
strSql = "insert into
sufixo(radicalid,sufixo)values("+radicalid+",'"+pchaves[i].substri
ng(Grau,pchaves[i].length())+"')";
stexec.execute(strSql);
strSql = "insert into
sufixo(radicalid,sufixo)values("+radicalid+",'"+pchaves[i+1].subst
ring(Grau,pchaves[i+1].length())+"')";
60
stexec.execute(strSql);
}
}
}
}
This document was created with Win2PDF available at http://www.daneprairie.com.
The unregistered version of Win2PDF is for evaluation or non-commercial use only.

Documentos relacionados