You are on page 1of 127

Universidade do Estado do Rio de Janeiro Faculdade de Engenharia Departamento de Engenharia de Sistemas e Computao

FERRAMENTA DE CLIPPING USANDO LOGICA FUZZY E AGENTES PARA INTERNET

Alunos:
Guilherme Pompeu Esteves Fagner Takeshi Mituyassu

Orientador:
__________________________________________________

Orlando Bernardo Filho


RIO DE JANEIRO NOVEMBRO/2010

FERRAMENTA DE CLIPPING USANDO LOGICA FUZZY E AGENTES PARA INTERNET

Guilherme Pompeu Esteves Fagner Takeshi Mituyassu

Monografia submetida ao corpo docente da Faculdade de Engenharia da Universidade do Estado do Rio de Janeiro UERJ, como parte dos requisitos necessrios obteno do diploma de Engenheiro Eletricista com nfase em Engenharia de Sistemas e Computao.

Aprovada por: ____________________________________________ Orientador: Orlando Bernardo Filho, D. Sc., UERJ

____________________________________________ Jorge Duarte Pires Valrio, D. Sc., UERJ

____________________________________________ Flvio Joaquim de Souza, D. Sc., UERJ

II

Novembro de 2010

A Deus e a nossos pais. III

AGRADECIMENTOS

Agradeo primeiramente a Deus, Por que sem Ele, nada do que foi feito se fez, inclusive esta monografia, fruto de uma vida inteira de aprendizado. Agradeo aos meus pais, que me ensinaram a trilhar o caminho em que se deve andar. Investiram na minha educao e muito me ajudaram para que eu pudesse concluir mais esta etapa. Agradeo ao meu Pastor e a todos os membros da minha igreja, pelo apoio que me deram, pelas suas oraes, e pelo aprendizado, que juntos, contriburam para meu sucesso universitrio. Agradeo aos professores que tive na faculdade. Ser professor uma tarefa nobre, e transmitir conhecimento no tem preo. Agradeo especialmente ao professor Orlando, que nos orientou de maneira mpar este projeto final. Agradeo ao professor Pedro Lopes de Melo e toda a equipe de seu laboratrio, por que durante dois anos, pude conciliar o ambiente de estudos na universidade e o ambiente de trabalho, na iniciao cientfica, de maneira muito agradvel e os conhecimentos adquiridos ali foram de valor inestimvel. Agradeo I-hunter, pelo bom estgio que tenho feito, nesta empresa venho aprendendo muito e agregando valor minha profisso. Agradeo aos meus amigos, principalmente os amigos da faculdade, por que eles muito me ajudaram nos estudos da faculdade. Neste ambiente acadmico, pude perceber a facilidade que os alunos tem de se interagirem um com o outro e assim criar uma rede de amizade, em prol de um objetivo comum. Sem os amigos da UERJ, passar nas matrias da faculdade seria mais difcil. Um agradecimento especial vai para meu amigo Fagner, minha dupla neste projeto final, que faz parte desta histria. Enfim, agradeo a todos que direta ou indiretamente fizeram parte da minha histria universitria.

Guilherme Pompeu Esteves. IV

Agradeo a Deus, por toda fora que me deu nesses anos de faculdade. Aos meus pais, pela educao que me foi concedida. Aos meus irmos, principalmente Fabricia por ter me concedido a oportunidade de morar no Rio de Janeiro e ser sustentado por um tempo. A todos os professores, em especial, Orlando que nos ajudou em muito com seus conhecimentos. Aos meus amigos de republica, onde aprendi a conviver depois de intensas discusses. Aos amigos da faculdade, principalmente Guilherme, que sempre juntos fomos alcanando nossos objetivos. A Lab245, que me permitiu tirar um tempo para concluir essa monografia.

Fagner Takeshi Mituyassu.

FERRAMENTA DE CLIPPING USANDO LOGICA FUZZY E AGENTES PARA INTERNET


Autores: Guilherme Pompeu Esteves Fagner Takeshi Mituyassu 10/2010 Orientador: Orlando Bernardo Filho, D.Sc., UERJ. O projeto apresentado nesta monografia prope a automatizao de uma ferramenta de clipping, automatizao esta, feita na indexao das notcias que se procura. Para tal, utilizamos agentes feitos para a internet, a fim de coletar a informao, e utilizamos tambm a lgica fuzzy, a fim de classificar o resultado desta coleta nvel de relevncia. Palavras-chave: logica fuzzy, clipping, web-crawler, internet, web-parser, java.

VI

SUMRIO CAPTULO 1 - INTRODUO..........................................................................................................1 1.1 Apresentao...............................................................................................................................1 1.2 Objetivo......................................................................................................................................1 1.3 Organizao do Trabalho............................................................................................................2 CAPTULO 2 FUNDAMENTOS TERICOS.................................................................................4 2.1 Agentes de Software...................................................................................................................4 2.2 O ambiente dos agentes A internet..........................................................................................8 2.3 Estruturas da Web.....................................................................................................................10 2.3.1 HiperDocumentos Dinmicos...........................................................................................10 2.3.2 Modelos Cliente - Servidor................................................................................................11 2.3.3 Servidores Web..................................................................................................................12 2.4 Minerao de dados..................................................................................................................13 2.4.1 Minerao de dados na Web..............................................................................................13 2.5 Construo de robs na Web....................................................................................................14 2.5.1 Utilizando o crawler na Web profunda..............................................................................19 2.5.2 Outras funcionalidades do crawler....................................................................................22 2.6 Pr-processamento de pginas Web..........................................................................................22 2.6.1 Tokenizao.......................................................................................................................23 2.6.2 Stop words.........................................................................................................................23 2.6.3 Stemming ..........................................................................................................................24 2.7 Descoberta de Conhecimento na Web (Web Intelligence).......................................................25 2.8 Lgica Fuzzy............................................................................................................................25 2.8.1 Conjuntos e Operaes Fuzzy...........................................................................................26 2.8.1.1 Teoria dos Conjuntos Fuzzy...........................................................................29 2.8.1.2 Operaes Fuzzy Bsicas...............................................................................30 2.8.2 Variveis Lingusticas........................................................................................................33 2.8.3 Base de Regras..................................................................................................................34 2.8.4 Sistema de Inferncia Fuzzy (SIF)....................................................................................35 2.2.4.1 Fuzzificador....................................................................................................36 2.2.4.2 Inferncia........................................................................................................37 2.2.4.3 Defuzzificador................................................................................................37 2.9 Java...........................................................................................................................................37 2.9.1 A origem do Java...................................................................................................................37 2.9.2 Distribuies da tecnologia Java ......................................................................................38 2.9.3 Por que utilizar a tecnologia Java neste projeto................................................................39 2.9.4 A portabilidade do Java ....................................................................................................40 2.9.5 Java Runtime Environment (JRE).....................................................................................42 2.9.6 A plataforma NetBeans......................................................................................................42 CAPTULO 3 ORGANIZAO DO PROJETO...........................................................................44 3.1 Introduo.................................................................................................................................44 3.2 Diagramas de Casos de Uso.....................................................................................................45 3.2.1 Descrio dos casos de uso ...............................................................................................45 3.3 Diagramas de Classes...............................................................................................................47 3.3.1 Classe ClippingProjetoFinal.java......................................................................................48 3.3.2 Classe Conteudohtml.java.................................................................................................49 VII

3.3.3 Classe busca.java...............................................................................................................49 3.3.4 Classe Fuzzy.java...............................................................................................................50 3.3.5 Classe DeFuzzyBean.java.................................................................................................50 3.3.6 Classe DeFuzzy.java..........................................................................................................51 3.3.7 Classe CalculaCoeficientes.java........................................................................................52 3.3.8 Classe RankLinks.java......................................................................................................53 3.4 Modelagem do Sistema de Inferncia Fuzzy............................................................................53 3.4.1 Variveis Lingusticas........................................................................................................54 3.4.2 Funes de Pertinncia......................................................................................................55 3.4.3 Bases de Regras.................................................................................................................59 CAPTULO 4 IMPLEMENTAO DO PROJETO......................................................................60 4.1 Introduo.................................................................................................................................60 4.2 Base de Dados..........................................................................................................................60 4.2.1 Tabelas do Banco de Dados...............................................................................................60 4.2.1.1 Estrutura do Banco de Dados do Software.....................................................62 4.3 Modulo de Inferncia Fuzzy do Software................................................................................64 4.3.1 Classe DeFuzzy.java..........................................................................................................65 4.3.1.1 mtodo percorreRegras..................................................................................65 4.3.1.2 mtodo verificarTermoRegra.........................................................................66 4.3.1.3 mtodo avaliarMi...........................................................................................67 4.3.1.4 mtodo calculaAlfa........................................................................................67 4.3.1.5 mtodo VerificarTermoConsRegra.................................................................68 4.3.1.6 mtodo calculaCentroideRegra......................................................................68 4.3.1.7 mtodo calculaCentroide................................................................................69 4.3.1.8 mtodo calculaArea........................................................................................70 4.3.2 Classe Busca.java..............................................................................................................70 4.4 Implementao do Web Crawler..............................................................................................73 4.4.1 As variveis do Web Crawler............................................................................................73 4.4.2 O construtor do Web Crawler............................................................................................74 4.4.3 O mtodo actionSearch()...................................................................................................75 4.4.4 O mtodo ShowError()......................................................................................................83 4.4.5 O mtodo updateStats().....................................................................................................83 4.4.6 O mtodo addMatch()........................................................................................................84 4.4.7 O mtodo verifyUrl().........................................................................................................85 4.4.8 O mtodo downloadPage()................................................................................................86 4.4.9 O mtodo removeWwwFromUrl()....................................................................................87 4.4.10 O mtodo retrieveLinks()................................................................................................88 4.4.11 Expresses Regulares......................................................................................................88 4.4.12 Sintaxe das expresses regulares.....................................................................................90 4.4.13 O mtodo searchStringMatches()....................................................................................95 4.4.14 O mtodo crawl().............................................................................................................96 4.4.14 O mtodo Ordena()..........................................................................................................99 CAPTULO 5 CONCLUSES.....................................................................................................102 REFERNCIAS BIBLIOGRFICAS.............................................................................................103 APNDICE A...................................................................................................................................106 APNDICE B...................................................................................................................................111 VIII

IX

CAPTULO 1 - INTRODUO

1.1 Apresentao

O projeto explcito neste documento visa fazer a tarefa de buscar uma informao especfica atravs de um site que veicula notcia. Nos dias atuais no existe outra fonte de informao to extensa, dinmica e de fcil acesso quanto internet. Atravs da internet, possvel acessar um turbilho de informaes infinitas, sobre diversos assuntos, e tudo isso, sem nenhum custo adicional. Bastando somente que o usurio tenha acesso a internet. Mediante a uma fonte de informao to vasta, que a internet, e com uma taxa de crescimento que aumenta em um ritmo exponencial, e ainda, cada vez mais e mais usurios se conectando, usufruindo e compartilhando informaes, surge, a partir da, diversos desafios, a fim de estruturar toda essa informao. E uma das coisas mais relevantes na internet, so os mecanismos de busca, que fazem com que o usurio ache a informao que precisa, de forma automtica. Se mecanismos de busca no existissem, a tarefa de procurar uma informao especfica seria extremamente custosa, e teria grande chance de a procura manual no obter sucesso.

1.2 Objetivo

O objetivo deste trabalho fazer este mecanismo de busca, mas com um enfoque mais especfico. A idia por trs deste projeto pesquisar notcias em veculos de comunicao, em sites que veiculam informaes. Basicamente, uma ferramenta de Clipping automtica. Clipping uma ferramenta muito usada, que faz o recorte das informaes relevantes nos veculos de notcias, tais como jornais, revistas e, mais recentemente, sites de notcia. Clipping muito usado em empresas, pois atravs das informaes coletadas pelo Clipping, possvel auxiliar 1

as empresas na tomada de deciso relevante, que podem auxiliar nos negcios da empresa. Tais decises relevantes podem ser, por exemplo, o quanto uma empresa vai investir em marketing em um determinado lugar, ou que mudanas um empresa deve adotar, a partir de notcias veiculadas envolvendo o nome desta empresa. Nos dias atuais existem empresas que prestam o servio de Clipping na internet, mas todo o processo de busca da informao, seleo desta informao e sua posterior listagem para consulta, feita de maneira manual. Neste projeto, todo o processo de busca da informao, classificao desta informao quanto ao nvel de relevncia e listagem desta informao feita de maneira automtica, fazendo com que esta seja uma ferramenta de Clipping automtica. Tornando este, o nosso objetivo primrio.

1.3 Organizao do Trabalho

A organizao do trabalho feita da seguinte forma: O primeiro captulo refere-se s apresentaes e objetivos referentes a este trabalho, trazendo uma introduo sobre a monografia em geral, apresentando o campo de atuao do projeto, as virtudes e desafios deste campo, bem como o lugar deste projeto neste campo, campo este que a internet. Estabelecendo assim um paralelo entre as primeiras noes do que a ferramenta em questo e seu campo de atuao. O segundo captulo refere-se aos fundamentos tericos do projeto em questo. A teoria por trs do software. Iremos falar sobre Agentes de Software, o ambiente da internet, Web-crawler, Minerao de Textos na Web, Lgica Fuzzy, Tecnologia Java, entre outros. O terceiro captulo refere-se organizao do projeto, um paralelo sobre como se desenvolveu o projeto. Haver uma anlise UML, mostrando os diagramas de casos de uso e os diagramas de classes. O quarto captulo refere-se aos detalhes da implementao do software deste projeto, seu funcionamento atravs de um manual com figuras e exemplos, e, alm disso, uma seo mostrando os testes realizados. O quinto captulo refere-se concluso do projeto, tecendo um paralelo entre os principais 2

avanos conquistados e o que pode ser melhorado, para possveis projetos futuros. Localizadas posteriormente ao captulo cinco, esto as referncias bibliogrficas e demais fontes de pesquisa indispensveis para a elaborao deste trabalho. Complementando este trabalho, est um apndice, melhorando a compreenso dos captulos propostos, conforme abaixo. O apndice A refere-se modelagem Fuzzy existente no software deste projeto, contendo as variveis lingusticas, as funes de pertinncia e a tabela de base de regras.

CAPTULO 2 FUNDAMENTOS TERICOS

Este Captulo visa explicitar de maneira geral, o conjunto de metodologias empregadas neste projeto de graduao. Comearemos explicando os conceitos por de trs do Web Crawler, em seguida falaremos sobre Lgica Fuzzy, aps este, falaremos sobre a linguagem Java e suas API's.

2.1 Agentes de Software

Nesse projeto procuramos entender melhor o funcionamento da internet e tentar criar estruturas para que se possa captar e disponibilizar a informao de uma forma mais estruturada. Procuramos desenvolver maneiras de capturar informaes que so relevantes e que so indexadas pelos motores de busca ou informaes ainda no indexadas. Maneiras de poder analisar e recuperar informaes automaticamente. A internet um meio heterogneo e suas caractersticas dificultam a busca pois no existe uma estrutura padro. A disponibilidade da informao desorganizada, muli-modal e distribuda em diversos sites pelo mundo. O nmero e a variedade das fontes de informaes cresce cada dia mais e mais. Alm disso, constantemente essas informaes so atualizadas e modificadas rapidamente. Por isso, cada vez mais difcil para um usurio ou rob de internet captar , analisar e utilizar a informao para resoluo de um problema. A noo de agentes de software tem sido proposta para enfrentar este desafio. Apesar da definio de um agente no contexto da Web ainda no est bem definida, pois existem vrias definies para agentes, a noo do trabalho atual que um agente um programa que age em favor 4

dos usurios, a fim de realizar tarefas de recolha de informao trabalhosa, como a leitura e o acesso a informaes de vrias fontes de informao on-line e resoluo de inconsistncias nas informaes recuperadas, filtragem de informaes relevantes ou informaes no desejadas, integrao da heterogeneidade de fontes de informao e adaptao ao longo do tempo para os seus usurios. A maioria dos atuais agentes orientados incidiram sobre o que chamamos de agentes de interface e um nico agente com o simples conhecimento e capacidades de resoluo de problemas, cuja tarefa principal a filtragem de informaes para aliviar a pesquisa do usurio. Uma das propostas seria utilizar apenas um agente porm essa proposta tem srias limitaes, pois um nico agente deveria tratar de todas as requisies do usurio que cobrem uma variedade de tarefas. Alm disso, um sistema centralizado pode gerar um gargalo de processamento e tambm conter um nico ponto de falha. Finalmente, a complexidade da busca e o filtro de realizar as tarefas e a grande quantidade de informaes pode sobrecarregar um nico agente. Outra soluo, usar a abordagem de multi-agentes para acessar, filtrar , avaliar, e integrar as informaes. Tais sistemas multiagentes podem dividir o conhecimento para cada tarefa especfica, organizar-se para evitar gargalos de processamento, e pode ser construdo para lidar com mudanas dinmicas no seu ambiente. Alm disso, vrios agentes inteligentes de coordenao so adequados s caractersticas predominantes da internet, por causa da heterogeneidade das fontes de informao, reunindo a diversidade de informaes e tarefas de resoluo de problemas que apia a informao recolhida, e a presena de mltiplos usurios com necessidades de informaes relacionadas. Portanto, a soluo de um sistema multi-agentes torna-se mais vivel para o ambiente de internet. O contexto de sistemas multi-agente amplia a noo de agente inteligente, pois ele deve ser projetado com mecanismos explcitos para comunicar e interagir com outros agentes. Nossa idia que os sistemas multi-agentes podem incluir agentes de interface estreitamente ligado a um objetivo de um usurio, a tarefa dos agentes envolvidos nos processos associados a resoluo de problemas, e agentes de informaes que esto intimamente ligadas a uma fonte de dados. Um agente de informao diferente de um agente de interface pois um agente de informao mais estreitamente ligado aos dados que est sendo fornecido, enquanto um agente de interface interage com o usurio. Tipicamente, um agente de informao nico servir as necessidades de informao de muitos outros agentes. Um agente de informao tambm bastante diferente de um tpico 5

servio WWW que fornece dados para vrios usurios. Um agente de informao pode raciocinar sobre a forma como ele ir lidar com as solicitaes externas e a ordem em que ir realiz-los. Alm disso, agentes de informao no realizaro apenas a coleta de informaes em resposta s consultas, mas tambm pode realizar a longo prazo interaes que envolvem o acompanhamento dos dados em condies particulares,bem como sobre a atualizao desses dados. O sistema multi-agente permite que o usurio no procure a informao necessria manualmente, mas atravs da colaborao dos agentes possvel analisar informaes automaticamente. Existem 3 tipos de agentes: Agentes de interface interagem com o usurio recebendo especificaes do usurio e entregando os resultados obtidos. Agentes de tarefa ajudam os usurios a executar planos de tarefas com performance, resolvendo problema e a realizao destes planos atravs de consultas e trocas de informaes com outros agentes de software. Agentes de informao fornecem meios inteligentes de acesso a um conjunto heterogneo de fontes de informao. Muitas definies tm sido propostas para um sistema multi-agente. A diferena entre agentes de um programa convencional a flexibilidade dos agentes, eles possuem um conjunto de aes que executam e modificam o ambiente. Logo, suas aes influenciam o ambiente e sua eficincia depende de suas aes tomadas. Segundo BRAGA E PEREIRA (2001) citado por ARAUJO (2007), flexibilidade significa que o sistema : Reativo: agentes devem perceber seu ambiente e responder oportunamente s mudanas que ocorrem nele; Pr-ativo: agentes no devem simplesmente atuar em resposta ao ambiente, devendo exibir um comportamento oportunista e direcionado ao seu objetivo e tomar a iniciativa quando apropriado; Social: agentes devem interagir, quando apropriado, com outros agentes artificiais ou 6

humanos para completar suas prprias solues de problemas ou ajudar outros com suas atividades. Para a implementao neste projeto, caracterizamos nossos agentes como reativos pois eles atuam no ambiente da internet interagindo com o usurio e trazendo informaes gerando resultados que dependem do meio onde os agentes esto atuando. Existem algumas vises sobre o conceito de agentes, a seguir citamos algumas: De acordo com PINTO (2000), citado em ARAUJO (2007), um agente uma entidade inteligente que possui objetivo e busca atingi-los de forma racional e intencional, conforme o estado atual de seu conhecimento. O comportamento autnomo inerente sua prpria existncia e independe da existncia de outros agentes, tendo a capacidade de criar objetivos prprios, baseados em seu interesse motivacional e agir de forma flexvel e adaptativa para alcan-los. J na viso de RUSSEL E NORVIG (1995), citado em ARAUJO(2007), os agentes so projetados com base em alguma especialidade particular, incluindo em sua arquitetura o conhecimento do domnio que agir e as aes necessrias para conduzir esta especialidade. Sobretudo, o conceito sobre agentes ainda no est consolidado. Seu conceito depende da sua usabilidade e aplicabilidade. Os agentes da Web possuem duas aplicaes que so a coleta e a distribuio da informao, que produz conhecimento a partir de informaes coletadas na internet. Os Agentes de Informao podem ser considerados como Sistemas Multi-Agentes, e segundo BJRN (1999), citado em ARAUJO (2007) ,possui um modelo denominado Trs Camadas, o qual composto por trs camadas: a primeira o lado da demanda de informao, que busca a informao; a segunda, o lado do fornecedor de informao, que fontes individuais de informaes devesse ter; a terceira, os intermedirios, so agentes que fazem a mediao entre as outras duas camadas. Este modelo pode ser visto como um tipo de coordenao entre os agentes, pois os agentes tem funes determinadas, onde cada agente tem seu papel predefinido para a soluo de um problema, interagindo na mesma camada, e o mais importante criando novas estruturas de informao baseadas nas informaes existentes.

2.2 O ambiente dos agentes A internet

A internet um conjuntos de redes de milhes de computadores interligados por protocolos e padres de comunicaes que permitem o acesso a informaes de todo mundo.. Em 1980, Tim Bernres-Lee construiu o primeiro computador para compartilhamento de documentos de pesquisa entre seus amigos de pesquisa, chamado ENQUIRE. A internet no geral muito mais ampla do que entendemos, pois pensamos em internet somente na WWW (World Wide Web), que utiliza o protocolo http para acessar as pginas seguidas por links hipermdia. Porm, a internet contem outros protocolos como ftp, telnet, email,rss entre outros servios oferecidos como comunicao instantnea e compartilhamento de arquivos. Mesmo somente na WWW, a maioria dos usurios tem conhecimento apenas do contedo que servido pela Web superficial atravs de buscas em motores de busca. Segundo BERGMAN (2000), 85% dos usurios da Web utilizam os motores de busca para encontrarem informaes. Segundo VIEGAS (2006), "A World Wide Web (Web) uma rede de recursos e servios de informao. Existem 3 mecanismos que permitem o acesso a tais recursos: 1. Um esquema uniforme de atribuio de nomes, de forma a se poderem localizar os recursos na Web (ex: URIs). 2. Protocolos, para o acesso aos recursos nomeados atravs da Web (ex: HTTP). 3. Hipertexto, para uma navegao mais fcil atravs dos referidos recursos (ex: HTML). Hipertexto E Hiperdocumento O hipertexto um texto qualquer porm sua diferena que ele possui ligaes para outras partes do texto ou com outros documentos que podem ser lidos sem estar na ordem lgica do documento, podendo ir para outras partes e voltar para o documento anterior. As ligaes dos documentos so chamados de hiperlinks que so os caminhos percorridos pelos documentos. 8

Pginas HTML (Hypertext Markup Language), que significa Linguagem de Marcao de Hipertexto so documentos hipertextos que so interpretados por navegadores Web e podem ser editados por qualquer editor de textos simples. A estrutura bsica de um documento HTML o seguinte: <html> <head> <title>Ttulo do Documento</title> </head> <body> texto, imagem, links, ... </body> </html>

<html>:Indica o inicio de um documento HTML que ser identificado pelo navegador e assim tudo que vier posteriormente deve ser interpretado como cdigo HTML.

<head>: Indica o cabealho do documento corrente <body>: Indica o corpo principal do documento HTML, aqui entram as formataes, tabelas, campos, enfim todo o layout pode ser construdo no corpo do documento. 9

URIs Todos os documentos que esto na Web podem ser acessados atravs de ligaes que so endereos conhecidos como Identificador de Recursos Universal, ou "URI" (Universal Resource Identifier). So constitudos de 3 partes, segundo VIEGAS (2006): O esquema de nomeao do mecanismo usado para se ter acesso ao recurso; O nome da mquina de hospedagem desse recurso; O nome do prprio recurso, atribudo na qualidade de trajeto (path). Como exemplo, temos a seguinte URI: "http://www.w3.org/TR, significa que este documento ser acessado pelo protocolo HTTP, e est hospedado na mquina www.w3.org, e ser acessado pelo diretrio virtual TR.

2.3 Estruturas da Web

2.3.1 HiperDocumentos Dinmicos

So documentos construdos dinamicamente em tempo de execuo atravs de cdigos de programao que tornam os documentos mais interativos partindo de requisies de usurios, executando cdigos diretamente no servidor ou chamando outros programas para serem executados. Aps toda a execuo dos cdigos do servidor, a pgina construda e enviada a resposta para o cliente que fez a requisio. Quando a pagina enviada ao cliente, ela pode conter scripts que sero executados no browser do cliente, gerando mais dinamismo na pgina.

10

2.3.2 Modelos Cliente - Servidor

um modelo conceitual onde diversos processos interagem para resolver um problema computacional comum. Os processos podem executar no mesmo processador ou podem estar distribudos por vrios processados pela rede. Na arquitetura cliente/servidor existem 2 processos cooperante: o processo cliente e o processo servidor. O cliente se comunica com o servidor atravs do protocolo HTTP (HYPERTEXT TRANSFER PROTOCOL). Um servidor Web um programa que fornece documentos para clientes de acordo com as requisies do cliente, geralmente o servidor fica esperando uma requisio de uma pagina que pode ser esttica ou dinmica. No caso de paginas dinmicas o servidor pode acessar outros recursos como banco de dados ou outros programas para gerar a pagina de resposta e enviar para o cliente. Um cliente Web um programa que realiza a interface com o servidor realizando as requisies de documentos atravs do protocolo HTTP,e permitindo a visualizao pelo lado do cliente geralmente por uma interface grfica. Os browsers mais conhecidos so internet Explorer e Mozzila. O servidor Web estabelece a conexo com o cliente atravs do protocolo HTTP e fornece os documentos solicitados pelos clientes que podem ser em qualquer tipo de formato, como exemplos temos arquivos de imagens (gif, jpg), arquivos de udio (wav, mid, mp3), arquivos de vdeo (avi, mov), programas Java e Activex. Os servidores Web podem executar scripts, receber chamadas por parmetros para executar programas, acessar banco de dados, controlar acesso a arquivos grupos, usurios, domnios ou IP, tambm podem aceitar e responder aos comandos do protocolo HTTP do tipo GET, PUT,POST E HEAD. O servidor Web tambm pode mapear endereos virtuais em endereos fsicos por exemplo: /~pompeu/ pode ser convertido para /home/pompeu/. A internet surgiu com documentos sendo apresentados estaticamente, ou seja, ficavam armazenados em arquivos prontos para serem enviados para os clientes que requisitavam atravs de hiperlinks. Porm no era possvel, o envio dinmico de informaes consultando banco de dados ou realizando operaes para construir a pagina dinamicamente. Havia relativamente poucos 11

documentos e sites, a tarefa de colocar todos os documentos estticos na Web era muito trabalhosa. Porque todos os resultados eram persistentes e constantemente atualizados, porem eles poderiam ser facilmente rastreados pelos motores de busca convencionais. Segundo BERGMAN (2000), em julho de 1994, Lycos disponibilizou para o pblico um catlogo de apenas 54 mil documentos, hoje estamos com uma estimativa de 1000 milhes de documentos,a taxa de crescimento da Web foi de 200%. Eram dezenas a centenas de pginas que deveriam ser colocadas dentro de uma estrutura de diretrios de paginas HTML estticas para disponibilizar o contedo de um site. No entanto,no inicio de 1996,ocorreram mudanas como a introduo de tecnologias de banco de dados para a Web, a internet tornou-se comercializvel atravs dos motores de busca, evoluindo os sites e introduzindo os sistemas de e-commerce. E, por fim, os servidores Web foram adaptados para permitir a criao de paginas dinmicas com tecnologias como ASP e PHP. E o modelo antigo de rastreamento de informaes atravs de hiperlinks j no se aplica para todos os sites, principalmente os sites com pginas dinmicas.

2.3.3 Servidores Web

So programas que aceitam requisies do cliente, executam operaes no servidor e enviam o resultado para o browser do cliente. Quando o servidor atende um pedido feita pela pagina, ele processa o cdigo da pagina e devolve a resposta em HTML para o cliente. Temos os seguintes servidores Web: Internet Information Service (IIS) - servidor Web da Microsoft capaz de atender solicitaes de paginas HTML e executar cdigos ASP e tambm possvel executar cdigos PHP atravs da instalao de APIs. O servidor IIS capaz de executar tambm CGIs. Servidor Apache - Servidor mais utilizado no mundo, possvel rodar em sistemas operacionais Linux e Windows e tambm podem ter suas funes estendidas para que ele execute cdigo de script. 12

2.4 Minerao de dados

Graas aos avanos da tecnologia, hoje podemos cada vez mais coletar, armazenar uma grande quantidade de informaes. A tecnologia do banco de dados permitiu armazenar de grandes quantidades de informaes e a Web permitiu distribuir a informao para qualquer lugar do mundo. Hoje quase todo tipo de negcio vital que se tenha informao como, por exemplo: bancos, finanas, comrcio, indstria, universidade, enfim todas as reas esto utilizando a internet para disponibilizar suas informaes. Porm a grande quantidade de informaes disponibilizadas na internet trouxe um problema. Cada vez mais difcil encontrar informaes relevantes, e com intuito de facilitar a busca e a anlise dessas informaes que surgiram as tecnologias de minerao de dados, que so ferramentas para a anlise das informaes em grandes bases de dados, que so consideradas no triviais, pois so informaes que esto disponveis, porm muitas das vezes despercebida ou no so encontradas. Essas informaes depois de descoberta e analisada podem ser teis para gerar conhecimento e para suporte a decises.

2.4.1 Minerao de dados na Web

Pode ser definida como a descoberta e anlise de informaes oriundas da internet, ou seja, informaes que esto disponveis na rede que podem ser captadas e analisadas e transformadas em conhecimento. Por exemplo, a minerao dos arquivos de log, pode gerar conhecimentos sobre o acesso dos usurios a determinadas reas de um site, podendo fazer estatsticas de acesso e verificar qual produtos menos acessados. Tambm possvel a personalizao na oferta de produtos, na estruturao do site de acordo com o perfil do usurio. A minerao na Web divide-se em 3 reas: 13

Minerao de contedo que a minerao do texto disponibilizado nas pginas Web. Minerao da estrutura que a minerao dos links das pginas Web. Minerao do uso que a extrao de informaes do uso das pginas Web, que a minerao dos hbitos dos usurios e aes tomadas pelos usurios. Segundo KOSALA (2000), citado em BASTOS (2006) Web Content Mining se divide em

sub-tarefas que efetuam: Busca de contedo recuperao de informaes dos documentos da Web; Pr-processamento e seleo de informao pr-processamento e a seleo automtica de informao til extrada dos termos obtidos na tarefa anterior; Generalizao descoberta automtica de padres entre sites; Anlise validao e/ou interpretao dos padres minerados.

2.5 Construo de robs na Web

Os agentes de software que vasculham a rede so programas de computador capazes de percorrer documentos na Web seguindo links de hiperdocumentos atravs do protocolo HTTP. Tambm so conhecidos como aranhas (spiders) ou andarilhos (wanders), bots, Web crawlers, Web robots ou Web Scutter. O processo de capturar informaes na Web chamado de Web Spidering ou Web crawling. O crawler parte de uma url inicial e gera uma lista de todos os links dessa url inicial para visitar, depois ele visita cada pagina listada gerando mais links para visitar. O crawler mantm uma lista de links que j foram visitados para no precisar visitar os links novamente. Podem-se definir filtros para o crawler, para que ele possa visitar somente as urls da pgina de partida ou tambm podemos definir um nmero mximo de links para visitar. 14

Os motores de busca como Google e Altavista utilizam crawlers para visitar pginas e construir ndices de contedo. Cada um utiliza um algoritmo prprio para gerar os contedos mais relevantes, mas o processo basicamente possui o crawler e o parser, que constitui a parte principal de um projeto de busca. Enquanto o crawler navega entre os links encontrados, o parser trabalha validando os termos encontrados, identificando a relevncia de cada termo. Cada link encontrada colocado numa lista "to-do", para poder posteriormente efetuar o crawling desse link e parser do mesmo. A fila dos links uma fila FIFO (First-in First-out) para podermos determinar qual a prxima url visitada. Para a implementao do crawler alguns projetos utilizam a tabela de dados, necessrias para guardar as informaes de termos coletados durante o crawling e outra tabela para armazenar os links para visitar e que fazem parte do mesmo domnio da url de origem. As tabelas devem tratar os dados como CASE INSENSITIVE para evitar tabelas muito grandes. A tabela de termos guarda informaes relativas aos termos de cada pgina e a estrutura para as tabelas a hash table para economia de tempo na busca de informaes. tambm importante armazenar os termos coletados durante o crawling em uma base de dados, armazenando o termo como chave primria da tabela de termos, e a lista de URLs dos termos que aparecem. possvel armazenar outras informaes como as frequncias calculadas, posio do termo no documento. Utilizamos o crawler para recuperar as informaes disponveis nos sites, armazenando as informaes para uma possvel anlise. Alguns crawlers possuem a funcionalidade de prprocessamento das pginas HTML e requer uma ferramenta de anlise textual que depende da linguagem natural. Esta ferramenta funciona como um parsing de todo texto encontrado sendo que alguns termos encontrados como artigos, pronomes, advrbios so desconsiderados do processo de anlise do texto por no conter informao til. O processo de reduo dos termos para seu radical correspondente chamado de stemming. Existem vrios processos de minerao de textos para obteno de conhecimento, nesse projeto utilizamos a lgica Fuzzy para encontrarmos termos relevantes. A otimizao do crawler pode ser feita utilizando a tcnica de programao Multithread para executar os procedimentos de crawler e parsing independentes, com isso podemos reduzir consideravelmente o tempo de processamento. 15

A seguir vamos verificar o algoritmo bsico do crawler retirado de BALDI (2003) citado em BASTOS(2006): Crawler (C0, D, E) 1 Q C0 2 enquanto Q 0 3 faa u Tira_da_Fila (Q) 4 d(u) Visita (u) 5 Salva_Links (D, (d(u), u)) 6 L Parse (d(u)) 7 para cada v em L 8 faa Salva_Links (E, (u, v)) 9 se ((v D or v E) and v Q) 10 ento Enfileira (Q, v) 11 fim faa 12 fim faa

Onde Co a Url inicial D repositrio de documentos E repositrio de links Q a fila fifo que guarda os links encontrados durante o crawling 16

L lista temporria O algoritmo comea atribuindo na fila Q a url Co, e enquanto a fila no estiver vazia, a funo Tira_da_fila(Q) retira um elemento da fila de acordo com a poltica FIFO, e atribudo a um objeto URL u. A pgina u visitada fazendo o download do documento, a funo Visita salva as informaes em d(u). Na linha 5, o documento armazenado no repositrio D. Na linha 6, o parser feito para a url sobre as informaes que foram armazenadas em d(u) e atribudas a lista temporria L,so extradas todas as urls filhas de u. Os elementos da lista L so introduzidos na lista Q, a no ser que j tenham sido visitados ou foram enfileirados pelo processo de crawling. Na linha 8, os links so armazenados em E para poder ser visitados mais tarde. Tambm necessrio efetuar o teste na linha 9 para evitar loops no caso de ciclos no site. Uma viso geral do processo de pesquisa de informaes atravs de mecanismos automticos de busca, retirada de CAZELLA (2001).

figura 1: Web Crawler Podemos encontrar vrias bibliotecas para implementar um crawler, principalmente em Java, segue abaixo alguns Web crawlers open source escritos em Java: 17

HERITRIX um projeto crawler aberto totalmente escalvel e extensvel,pois permite vasculhar vrias pginas e possvel adicionar novas funcionalidades. WebSPHINX WebSPHINX ( Website-Specific Processors for HTML INformation eXtraction) uma biblioteca de classe escrita em java para o desenvolvimento de aplicaes interativas que processa paginas Web automaticamente. JSpider Um motor de busca altamente configurvel e personalizvel, desenvolvido sob a licena LGPL Open Source, 100% escrito em java. Web-Harvest Web-Harvest um cdigo open source para extrao de dados na Web tambm escrito em java. Ele oferece um caminho para coletar informaes na Web e extrair dados uteis a partir deles. Para isso utiliza tecnologias como XSLT, XQuery e Expresses Regulares. Escrito para coletar informaes que esto em pginas HTML e XML pode ser facilmente integrado a um projeto desenvolvido em java. WebEater 100 % do cdigo escrito em Java para recuperao de informaes da Web. Bixo Bixo um toolkit para minerao de dados que pode ser facilmente customizado e pode-se criar rapidamente aplicaes de extrao de dados que so otimizadas para casos particulares. Java Web Crawler um simples Web crawler escrito em Java, suporta o protocolo de excluso de robs. 18

WebLech WebLech uma ferramenta escrita em Java para extrao de dados na Web,que suporta muitos recursos necessrios para fazer o download de sites e emular o comportamento do navegador Web padro, tanto quanto possvel. WebLech Multi-thread e possui uma interface grfica (gui). Arachnid Arachnid um framework escrito em Java para extrao de dados que inclui um objeto parser HTML simples que analisa o fluxo de entrada do contedo HTML. Podem ser criados sub crawlers que monitoram informaes de diversos sites analisando e classificando essas informaes. Jobo Jobo um programa simples que baixa completamente os sites para seu computador, internamente funciona como uma "teia de aranha". A principal vantagem dessa ferramenta que ela pode automaticamente preencher formulrios( como exemplo formulrios de login) e tambm utilizar cookies para manipulao de sesses. Todos esses Web crawlers podem ser encontrados em no site Java-source.net localizado em: http://java-source.net/open-source/crawlers

2.5.1 Utilizando o crawler na Web profunda

Os crawlers funcionam percorrendo links de pginas para recuperao da informao, porm a grande parte das informaes est no que chamamos de Web profunda, que a parte da Web que no localizada por um simples crawler farejador de links, pois so pginas que geram seu contedo dinamicamente, ou seja, o contedo construdo em tempo real, com a interao do usurio preenchendo informaes e executando cdigos que rodam no servidor como ASP, JSP, PHP, entre outros. So pginas de formulrio que geralmente retornam contedos diferenciados de acordo com 19

os parmetros fornecidos no formulrio. A Web Superficial, segundo BERGMAN (2000), o conjunto de paginas apontadas por hiperlinks, onde os motores de busca como Google visitam indexando informaes numa base para consulta de seus usurios e a Web profunda que est escondida atrs de formulrios dinmicos que so gerados em tempo de execuo consultando banco de dados e outros servios. Segundo BERGMAN (2000), foi avaliado que a Web profunda 500 vezes maior que a Web superficial , onde centenas de milhes de documentos esto escondidos nas bases de dados e que no podem ser recuperados pela Web superficial. BERGMAN (2000) compara pesquisar na Web superficial como arrastar um liquido sobre a superfcie do oceano, pois a maior poro de informaes relevantes no so pesquisadas. Para uma pgina Web ser descoberta pelos motores de busca ela deve ter uma parte esttica que ser varrida por um farejador de links que se chama crawler e deve estar ligado a outras paginas. A Web profunda diferente da superficial pois seu contedo geralmente acessado atravs de requisies dos usurios, gerando uma pagina de resposta dinmica construda em tempo de execuo. Segundo BERGMAN (2000), temos a seguir a comparao da Web profunda com a Web superficial: A Web profunda contm 7.500 terabytes de informaes, em comparao com 19 terabytes de informaes da Web superficial A Web profunda contm cerca de 550.000 milhes de documentos individuais em relao ao 1 bilho da Web superficial Atualmente existem um nmero estimado de 100 mil sites da Web profunda 60 dos maiores sites da Web profunda contm juntos cerca de 750 terabytes de informaes - por si s suficiente para exceder o tamanho da superfcie da Web 40 vezes. Em mdia, os sites da Web profunda recebem um trfego mensal cerca de 50% maior 20

do que a Web superficial e so mais fortemente ligadas a sites de superfcie, no entanto, o tpico Web site profundo no bem conhecido do pblico de pesquisa na Internet A Web profunda a maior categoria crescente de novas informaes sobre a Internet A qualidade do contedo da Web profunda , no mnimo, 1.000 a 2.000 vezes maior que da Web superficial A Web profunda tem um contedo altamente relevante para todas as necessidades de informao do mercado Um total de 95% da Web profunda informao acessvel ao pblico - no sujeitos a taxas ou assinaturas. BERGMAN (2000) compara hoje a busca na Web como jogar uma rede atravs da superfcie do oceano. O contedo identificado somente o que est na superfcie a coleta bastante indiscriminada. H um contedo muito grande de informao que reside na parte mais profunda da Web. Confira a figura abaixo:

figura 2: Comparao da Web Superficial

Nesse projeto para encontrarmos informaes na Web profunda, foi preciso localizar as pginas que executam cdigos no servidor, enviar as informaes tratadas pelo sistema para o form e s depois efetuar o crawler nas pginas retornadas pelo resposta do cdigo.

21

2.5.2 Outras funcionalidades do crawler

Uma outra funcionalidade do crawler, a busca de informaes para comparao de contedos de sites afins, para identificao de similaridades e diferenas existentes entre sites concorrentes. A comparao feita atravs dos termos encontrados nas pginas. A sada dessa comparao pode ser o percentual de similaridade ou diferena entre as pginas comparadas. Pode- se criar um conjunto de termos e cada pgina ser representada pelo seu espao vetorial correspondente, so utilizados mtodos como clculos de frequncias em que os termos aparecem nos documentos. Pode ser que um termo isolado de uma pgina no contenha informao importante porm a combinao de vrias palavras pode ser relevante. Como exemplo, segundo BASTOS (2006): seja um texto com vrias palavras e dentre essas palavras ocorram descoberta e conhecimento. A ocorrncia de cada uma delas isoladamente pode no identificar nenhum significado interessante, porm, a ocorrncia de ambas, juntas e com certa frequncia na pgina, traduz um significado importante que deve ser investigado com mais detalhe. As regras de associao, que combinam palavras que ocorrem com frequncia utilizado para o tratamento desse processo.

2.6 Pr-processamento de pginas Web

Aps ocorrer o crawler das pginas Web, feito o pr-processamento das pginas, que a identificao de todos os termos existentes nos documentos,o objetivo dessa fase eliminar as informaes desnecessrias como cdigos em HTML, cdigos de script para obtermos somente a informao textual para a descoberta de conhecimento. Assim feita a anlise lxica do documento, efetuada por um parser que identifica cada seqncia de letras e/ ou dgitos. A anlise morfolgica feita por um stemmer, e sua funo reduzir o texto de cada termo ao seu radical, porm nesse 22

projeto no efetuamos o processo de stemming. Para a retirada de palavras que no tem valor para o conhecimento possvel efetuar o processo de retirada de palavras stopwords tais como: preposies, conjunes, artigos e etc.

2.6.1 Tokenizao

Cada termo encontrado no documento identificado no processo de Tokenizao que , onde cada smbolo separado por espaos, virgulas, pontos,etc. O token a sada do agrupamento de caracteres, e a seqncia de tokens forma um tokestream ou uma sentena que corresponde ao texto original. O caractere dispensado o espao. Um exemplo segundo BASTOS (2006) de Tokenizao: Semana que vem, se estiver calor, iremos ao clube. Cada token representado pela palavra entre (aspas) Semana que vem , se estiver calor , iremos ao clube . Em qualquer linguagem, o processo de Tokenizao uma seqncia de palavras separadas por delimitadores, que podem ser utilizados para processos subseqentes tais como: identificao de sinnimo,classificao gramatical, indexao, etc. O agrupamento de smbolos em unidades sintticas feita pelo parser. A sua sada a representao original do termo que salvo em um repositrio de dados para uso posterior.

2.6.2 Stop words

As palavras chamadas de stop words so palavras que no agregam valor de conhecimento para o processo de busca de informaes, sendo consideradas no relevantes e podem ser excludas. Nesse 23

conjunto encontram-se as conjunes, preposies, artigos, verbos auxiliares, abreviaturas, dentre outros. A lista de palavras stop words forma a stop list. Esta lista de palavras pode ser alterada de acordo com o contedo dos documentos para anlise, permitindo que palavras com alta incidncia, porm pouco relevantes sejam desconsideradas durante a anlise de contedo. Nesse projeto no foi implementada o processo de separao de stop words, porm ela pode ser facilmente implementada em projetos futuros.

2.6.3 Stemming

Aps eliminar as palavras que no so consideradas relevantes pelo processo de eliminao utilizando as stop list, o segundo processo utilizado na minerao de textos o Stemming, que consiste na eliminao de sufixos que identificam plurais, gnero ou formais verbais transformando esses termos em uma nica representao, que o seu radical. Geralmente, as variantes morfolgicas tem o mesmo significado semntico que podem ser considerados os termos equivalentes para a anlise de recuperao de informaes. O objetivo reduzir o tamanho do dicionrio, ou seja, termos com o mesmo significado no entram no dicionrio, somente os termos distintos, resultando na reduo do espao de armazenamento e no tempo de processamento. Os algoritmos de stemming so dependentes da lngua para qual o sistema est sendo desenvolvido. Dois erros comuns que ocorrem no processo de stemming so: Overstemming Ocorre quando a cadeia de caracteres no um sufixo, mas sim parte do stem. Como exemplo, temos a palavra gramtica, aps o processamento a palavra reduzida grama, que no representa seu radical que gramat. Understemming Esse erro acontece quando o sufixo no removido totalmente. Como exemplo, temos a palavra referncia, que aps o processamento reduzida para refernc, que no representa seu radicar refer. Estes erros so tratados como excees no processamento de stemming. Algumas das etapas do processamento de stemming so: 24

Remoo do plural, remoo do feminino,remoo do advrbio,remoo do aumentativo ou diminutivo,remoo de sufixo em nomes, remoo de sufixos em verbos, remoo de vogais, remoo dos acentos. O objetivo da etapa de pr-processsamento, como stop words e o processo de stemming reduzir o tamanho do problema, focando no tratamento das palavras que realmente tem valor semntico no contexto. O stemming tambm no foi realizado nesse projeto.

2.7 Descoberta de Conhecimento na Web (Web Intelligence)

Segundo BASTOS(2006), o conceito de Web Intelligence : Pode-se dizer que Web Intelligence (WI) uma rea de pesquisa que explora a Inteligncia Artificial e a Tecnologia de Informao avanada para o desenvolvimento de sistemas inteligentes para a Web (Web-Based Intelligent Information Systems). So utilizadas varias tcnicas para a extrao, classificao e anlise dessas informaes que possuem diversas aplicaes como a busca de informaes de interesse dos usurios, com a extrao automtica de contedo, capaz de procurar informaes especficas como nome de produtos, preos, locais, datas e relaes entre essas palavras. Com isso possvel automatizar tarefas como preenchimento automtico de formulrios, aprendizagem de padres de consumo, dentre outras aplicaes. possvel utilizar essas informaes para monitorar informaes de concorrentes, tendncias e estratgias de mercado, opinio e satisfao dos cliente, ou seja, a chamada inteligncia competitiva.

2.8 Lgica Fuzzy

A Lgica Fuzzy uma extenso da Lgica Booleana, por que nem tudo no dia a dia booleano. Na verdade muitos dos problemas ou situaes vividas no cotidiano so de natureza imprecisa ou nebulosa. A Lgica Fuzzy trata de valores lgicos intermedirios entre o verdadeiro e o falso, entre o certo e o errado, entre o falso (0) e o verdadeiro (1). Lgica Nebulosa a cincia que se preocupa 25

com os princpios formais do raciocnio aproximado (BERNARDO FILHO, 2001). Podemos explicitar algum exemplo, usando Lgica Fuzzy. Na temperatura, por exemplo: A princpio utilizaremos como patamar de mtrica os valores: quente e frio. Intuitivamente perceberemos que utilizar apenas dois patamares de medio muito pouco se comparado nossa capacidade de sentir o quanto est quente ou o quanto est frio. Se passarmos esta percepo para a Lgica Booleana, poderamos arbitrar que temperatura quente seria igual a zero (0) e temperatura fria seria igual a um (1), mas para esta situao a Lgica Booleana no funciona, pois no completa, h muitos valores relevantes entre 0 e 1. a que entra a Lgica Fuzzy, atravs dela podemos formar um conjunto nebuloso com tantos elementos qualitativos quantos forem necessrios e quanto maior o nmero de elementos mais precisa ser a avaliao final, ou o resultado. Neste exemplo, onde foi citado como problema a temperatura, podemos criar um conjunto nebuloso com os seguintes elementos: muito quente, quente, morno, frio e muito frio. Assim a tarefa de retornar um resultado mais coerente com o real, bem mais certa.

2.8.1 Conjuntos e Operaes Fuzzy

A teoria clssica de conjuntos permite o tratamento de categorias de elementos e suas inter-relaes em um universo definido. Este universo pode ser discreto ou contnuo, dependendo da natureza dos elementos que o constituem. Por exemplo, pode-se definir um universo U discreto que rene todos os nmeros entre -8 e 8 do conjunto dos nmeros inteiros. Algebricamente, esta definio pode ser expressa pela expresso 1: U : { x / mdulo x 10 } (1)

Os elementos de uma mesma categoria ou que possuem caractersticas semelhantes so agrupados em conjuntos. Neste contexto, um conjunto consiste de um grupo de elementos do universo de discurso. Segundo a literatura, existem trs formas de se definir um conjunto na teoria clssica de conjuntos. Por exemplo, pode-se definir um conjunto C, que agrupa os elementos de U positivos, pela enumerao de todos os seus elementos, como visto na expresso 2:

26

C : {1, 2, 3, 4, 5, 6, 7, 8}

(2)

A segunda maneira de definir um conjunto baseia-se no fato que os elementos de uma mesma categoria possuem caractersticas semelhantes e so reunidos em conjuntos que refletem estas caractersticas. Assim, um conjunto consiste de uma coleo de elementos do universo de discurso que possuem uma relao bem definida entre si. O conjunto C pode ento ser redefinido como na expresso 3, a seguir: C : { x U / x > 0 } (3)

Por fim, a terceira forma de definio de um conjunto a expresso de sua funo caracterstica. O grfico dessa funo no plano cartesiano, como mostrado na figura 3, uma forma comum de visualizao desse tipo de representao. Assim, o eixo x representa o universo de discurso e o eixo y representa os valores da funo caracterstica xC para elementos desse universo.

Figura 3: grfico representando o conjunto C no universo U. Considerando o universo U representado na expresso 1, o conjunto dos nmeros positivos, denotado por C na expresso 2, e o conjunto dos elementos de U entre -4 e 4, representado por B, as relaes de pertinncia de alguns elementos em relao a estes conjuntos podem ser obtidas por:
4 C

ou xC(4) = 1 ou xB(-6) = 0 No mundo real, tal qual na maioria das aplicaes de interesse na rea de engenharia,

6 B

existem propriedades que so vagas, imprecisas ou nebulosas e, portanto, impossveis de serem 27

caracterizadas pela definio da logica booleana. A teoria dos conjuntos Fuzzy pode ser vista como uma extenso da teoria clssica de conjuntos, e foi criada para tratar graus de pertinncia intermedirios entre a pertinncia total e a no pertinncia de elementos de um universo de discurso com relao a um dado conjunto, fugindo assim da restrio existente na bivalncia de valores da lgica booleana. Assim, um conjunto Fuzzy uma generalizao da noo clssica de um conjunto deste universo e ao mesmo tempo uma evoluo da lgica booleana. A definio da funo de pertinncia de um conjunto Fuzzy depende do significado lingustico definido para este conjunto e de sua interpretao no contexto do universo de discurso utilizado. Assim, na lgica Fuzzy, o grau de pertinncia de um elemento em relao a um conjunto definido por uma funo caracterstica real, que assume como valor qualquer nmero pertencente ao intervalo real fechado [0,1]. Algebricamente, ela mapeada por y(x) : U [0,1] REZENDE (2005). No universo de discurso definido na expresso 2.1, pode-se ter um conjunto Fuzzy chamado conjunto dos nmeros pequenos, denotado por P, no qual o grau de pertinncia dos elementos de U em P definido pela equao 4 a seguir:

P(x) =

0,0 , se mdulo x4 4mdulo x , se mdulo x4 4

(4)

Com esta nova configurao, j no existe mais um limite repentino que define os elementos que pertencem ou no ao conjunto P, como no caso dos conjuntos clssicos A e B. Alm disso, os graus de pertinncia dos elementos de U no conjunto P possuem variaes suaves no intervalo real [0,1], como mostrado na figura 4:

28

figura 4: Grfico representando o conjunto Fuzzy P no universo U

2.8.1.1 Teoria dos Conjuntos Fuzzy

Um conjunto Fuzzy F de um universo de discurso U caracterizado por uma funo caracterstica real, geralmente chamada de funo de pertinncia, mapeada por F : U [0,1], que associa a cada
x U um numero real F(x) no intervalo [0,1], representando o grau de pertinncia de x em F. O

suporte de F o subconjunto de pontos de U para o qual F(x) positivo. A representao de conjuntos Fuzzy depende basicamente da caracterstica e da dimenso do universo de discurso definido. Quando o universo discreto e composto de poucos elementos, a maneira mais usual adotada a representao analtica, como mostrado na expresso 5 para o caso do conjunto P. P(x) = {0,0/-8; 0,0/-7; 0,0/-6; 0,0/-5; 0,0/-4; 0,25/-3; 0,5/-2; 0,75/-1; 1,0/0 0,75/ 1; 0,5/ 2; 0,25/ 3; 0,0/ 4; 0,0/ 5; 0,0/ 6; 0,0/ 7; 0,0/ 8} Assim, de acordo com a expresso acima, so representados todos os elementos do universo de discurso separados por ponto e vrgulas. Cada elemento deste universo representado na forma P(xi)/xi, onde o primeiro termo indica o grau de pertinncia de xi no conjunto P e o segundo termo representa o prprio elemento xi. Entretanto, quando o universo de discurso contnuo ou possui grande quantidade de elementos discretos, a forma mais simples de representao o grfico de sua funo de pertinncia. Um conjunto F denominado conjunto dos nmeros pequenos, definido no universo dos nmeros reais entre -10 e 10, e possuindo uma funo de pertinncia similar mostrada na expresso 4, seria representado pelo diagrama mostrado na figura 4. (5)

29

Figura 5: Diagrama do conjunto Fuzzy F no universo real U:(-10, 10)

2.8.1.2 Operaes Fuzzy Bsicas

Suponha trs conjuntos Fuzzy denominados pequeno, mdio e grande, em um universo de discurso real U : [0,5], representados nas equaes 6. Estes conjuntos esto representados na figura 6. A seguir, sero descritas trs operaes Fuzzy bsicas executadas entre estes conjuntos.
1, se x1,5 x 1, se 1,5x2,5 0, se x2,5 3 x , se 1,5 x2,5 M(x)= 4 x , se 2,5x 3,5 G(x)= x2, se 2,5x3,5 P(x)= 0, se x2,5 0, se x 1,5 ou x3,5 1, se x3,5

} {

} {

(6)

figura 6: Diagrama dos conjuntos Fuzzy pequeno, mdio e grande 1 Complemento: O complemento de um conjunto Fuzzy A do universo de discurso U pode ser denotado por A, com uma funo de pertinncia definida por

30

A(xi) = 1 A(xi)

(7)

figura 7: Figura Fuzzy resultante da operao de complementao no grande O complemento corresponde ao conectivo NO. Ento, a partir das definies dos conjuntos mostrados nas expresses em 6 e da definio para o complemento da expresso de 7, tem como resultado o conjunto no grande, explicitado na figura 7. 2 Unio: A unio de dois conjuntos Fuzzy A e B do universo de discurso U feita de diversas maneiras na literatura. Por exemplo, pode-se representar A B ou A+B atravs da seguinte funo de pertinncia: AUB = max[A(xi), B(xi)] (8)

Uma forma mais generalizada de definir a operao de unio entre conjuntos Fuzzy atravs das normas S, isto , de uma famlia de funes com as seguintes propriedades: Comutatividade: S(a, b) = S(b, a) Associatividade: A(a, S(b,c)) = S(S(a,b), c) Monotonicidade: se a b e c d , ento S a , c S b , d Coerncia nos contornos: S(a, 1) = 1 e S(a, 0) = A Neste caso, qualquer funo da famlia das normas S pode ser empregada como um operador generalizado da unio entre conjuntos Fuzzy. A unio corresponde sempre ao conectivo OU, e a partir dos conjuntos mostrados em 6 e da definio para unio de 8, resulta a operao de unio 31

mostrada graficamente na figura 8.

figura 8: Conjunto Fuzzy resultante da operao de unio grande OU mdio 3 Interseo: A interseo entre dois conjuntos Fuzzy A e B do universo de discurso U definida de diversas formas. Por exemplo, pode-se representar AB ou A.B por meio de seguinte funo de pertinncia: AB = mim[ A(xi), B(xi)] (9)

Assim como o caso da unio, a operao de interseo entre conjuntos Fuzzy pode ser generalizada por meio de famlias especificas de funes, chamadas de normas T, com as seguintes propriedades: Comutatividade: T(a, b) =T(b, a); Associatividade: T(a, T(b, c)) = T(T(a, b), c); Monotonicidade: se a b e c d , ento T a , c T b , d ; Coerncia nos contornos: T(a, 1) = a e T(A, 0) = 0. Desta maneira, a interseo sempre vai corresponder ao conectivo E. Assim, a partir dos conjuntos mostrados em 6 e da definio para interseo da expresso 9, resulta a operao de interseo mostrada graficamente na figura 9:

32

figura 9: Conjunto Fuzzy resultante da operao de interseo mdio E pequeno

2.8.2 Variveis Lingusticas

A Lgica Nebulosa uma aplicao da teoria dos conjuntos nebulosos. Dentro do estudo da Lgica Nebulosa e do raciocnio aproximado bastante utilizado um objeto conhecido como varivel lingustica, tambm chamada de varivel de ordem mais alta. Essas variveis no possuem nmeros como valores, mas termos ou sentenas de uma linguagem natural ou artificial BERNARDO FILHO (2001). Um termo primrio de uma dada varivel lingustica pode ser representado por um conjunto Fuzzy existente no universo de discurso no qual esta varivel est definida. Assim, cada conjunto Fuzzy definido neste universo associado a um conceito lingustico que classifica ou define um valor impreciso para a varivel em questo. Para um dado elemento x do universo de discurso, o valor de pertinncia A(x) representa o quanto este elemento satisfaz o conceito representado pelo conjunto Fuzzy A RESENDE (2005). Os termos primrios criados para uma varivel lingustica qualquer formam a sua estrutura de conhecimento, explicitada de partio Fuzzy desta varivel. Na figura 2.8.8, mostrado um exemplo de partio Fuzzy de uma varivel lingustica chamada Temperatura. O universo em questo um segmento da escala Celsius de temperatura, com valores entre 0 e 50 graus.

33

Figura 10: Partio Fuzzy de uma varivel lingustica representando a temperatura A forma de utilizao das variveis lingusticas depende basicamente da definio das propriedades sintticas e semnticas que vo reger o comportamento do sistema de conhecimento Fuzzy. As propriedades sintticas definem o formato em que sero armazenadas informaes lingusticas Fuzzy. Elas proporcionam a criao de uma base de conhecimento contendo sentenas estruturadas, sistematizando os processos de armazenamento, busca e processamento dos dados existentes RESENDE (2005). No entanto, as propriedades semnticas vo direcionar de que maneira extrado e processado o conhecimento, armazenado na forma de declaraes condicionais Fuzzy, ou regras de produo Fuzzy, existente na estrutura definida pelas propriedades sintticas.

2.8.3 Base de Regras

O jeito mais difundido de guardar informaes em uma Base de Conhecimento Fuzzy, a representao por meio de Base de Regras Fuzzy. Uma Base de Regras geralmente formada de duas partes principais: 34

if <antecedente> then <consequente> O antecedente constitudo de um conjunto de condies que, uma vez satisfeitas, determinam o processamento do consequente da Base de Regra, pelo mecanismo de inferncia Fuzzy. Este o disparo da regra. No obstante, o consequente constitudo de um conjunto de aes ou diagnsticos que so criados com o disparo da regra. Os consequentes das regras disparadas so executados em conjunto, para criar uma resposta determinstica para cada varivel de sada do sistema.

2.8.4 Sistema de Inferncia Fuzzy (SIF)

Tambm chamado de Sistema de Inferncia Nebuloso (SIN), ou simplesmente, Controle Nebuloso, uma importante aplicao da Teoria dos Conjuntos Fuzzy. Segundo SANDRI E CORREA (1999), so encontrados na literatura alguns modelos de Sistemas de Inferncia Fuzzy, como o modelo Mamdani, Larsen, alm dos modelos de interpolao Takagi-Sugeno e Tsukamoto. A principal diferena entre os modelos a forma de representao dos termos na premissa, quanto representao das aes de controle e quanto aos operadores utilizados para implementao do controlador. O modelo Mandami foi o primeiro modelo de SIF a ser construdo, a partir da Teoria de Conjuntos Fuzzy, e tem sido o modelo mais difundido, sendo representado em vrios programas computacionais de SIF. No obstante, este foi o modelo para ser aplicado nos SIF da dissertao. Na figura abaixo, est uma representao grfica do Sistema de Inferncia Fuzzy.

35

Figura 11: Sistema de Lgica Fuzzy. Segundo BERNARDO FILHO (2001) o Sistema de Inferncia Fuzzy, possui a seguinte caracterstica: ... Nesses sistemas, so fornecidas entradas precisas para um mdulo fuzificador que, por sua vez, fornece parmetros nebulosos para um motor de inferncia, o qual processa a aplicao de regras do tipo SE-ENTO, constituda de proposies, envolvendo termos de variveis lingsticas. Aps o processamento do conjunto de regras, o valor nebuloso obtido como resposta da inferncia defuzificado, obtendo-se, dessa forma, a sada precisa do sistema. Conforme se observa na definio anterior BERNARDO FILHO (2001), o SIF possui trs mdulos principais: o Fuzzificador, a Inferncia e o Defuzzificador. Vamos analisar cada uma delas, a fim de entender, de maneira basilar, os processos de um Sistema de Inferncia Fuzzy.

2.2.4.1 Fuzzificador

Identifica as variveis de entrada, que so as variveis que caracterizam o estado do sistema (variveis de estado), e as normaliza em um universo de discurso padronizado. Esses valores so 36

fuzzificados, transformando as entradas em graus de pertinncia de conjuntos nebulosos, tornandose instncias das variveis lingsticas.

2.2.4.2 Inferncia

A partir de um conjunto de regras nebulosas do tipo SE-ENTO (IF-THEN) usado o procedimento de inferncia para a agregao de concluses. Isso resulta no conjunto nebuloso de sada. A ideia que as regras explicitam o conhecimento enquanto a inferncia traduz a maneira de raciocinar.

2.2.4.3 Defuzzificador

Aps o processo de agregao do conjunto de regras nebuloso, uma funo de pertinncia gerada, estabelecendo uma deciso de carter semntico. Nesse caso, necessrio efetuar uma interpretao de modo a traduzi-la para um valor determinstico. Utiliza-se o mtodo de determinao do centro de gravidade ou centro de rea, cujo valor da abscissa o valor de sada do SIF.

2.9 Java

2.9.1 A origem do Java

Java uma linguagem de programao orientada a objetos criada em 1991, por James, na empresa Sun Microsystems. A linguagem derivada muito em funo da sintaxe da linguagem C e C++. As aplicaes Java so tipicamente compiladas para bytecode (arquivos .class) onde podem rodarem qualquer Java Virtual Machine (JVM) independente da arquitetura do computador ou sistema operacional. Java foi originalmente desenvolvido para uso em dispositivos digitais mveis, como celulares. Entretanto, quando Java 1.0 foi lanado para o pblico em 1996, seu principal foco foi 37

descolado para uso na internet. Java era provido de mais interatividade com usurios por permitir aos desenvolvedores uma maneira de produzir Webpages animadas. Ao longo dos anos, Java foi se tornando uma linguagem de sucesso, para uso tanto dentro quanto fora da internet. Mais de uma dcada depois, Java continua sendo uma linguagem extremamente popular com mais de 6,5 milhes de desenvolvedores ao redor do mundo. Havia cinco principais objetivos na criao da linguagem java: 1. Deveria ser simples, familiar e orientada a objetos 2. Deveria ser robusta e segura 3. Deveria ser de arquitetura neutra e portvel 4. Deveria ser executada com alta performance 5. Deveria ser interpretativa, dinmica e permitir multitarefas

2.9.2 Distribuies da tecnologia Java

Atualmente a Oracle mantm os investimentos e controla a compatibilidade e o desenvolvimento das sucessivas verses do Java, disponibiliza trs distribuies dessa tecnologia, cada uma para um ambiente de execuo. Essas distribuies so pacotes de software que incluem todo o aparato para suportar a execuo de programas Java. Os principais elementos desse conjunto so APIs e um ambiente de execuo ou mquina virtual. J2SE Java2 Standard Edition - Fornece as principais APIs e enfoca o desenvolvimento de aplicaes Cliente/Servidor. No permite extensiva distribuio de objetos nem oferece suporte a tecnologias para Internet; NETO (2007) - Fornece a Java Runtime Environment (JRE) ou a JVM (Java Virtual Machine). NETO (2007) J2EE Java2 Enterprise Edition - Fornece um conjunto de APIs para desenvolvimento corporativo e enfoca a integrao entre sistemas. Permite alta distribuio de objetos e oferece total suporte a tecnologias para Internet; NETO (2007) 38

- Depende da J2SE e da JRE. NETO (2007) J2ME Java2 Micro Edition - Fornece as APIs necessrias para o desenvolvimento de aplicaes para computao mvel, em pequenos dispositivos ou tecnologias embarcadas; NETO (2007) - Fornece uma Java Runtime Environment (JRE) de Capacidade reduzida. NETO (2007) No nosso projeto, todo o desenvolvimento foi baseado sobre a distribuio J2SE. A organizao das APIs Java e da plataforma J2SE pode ser vista na figura 12 a seguir:

figura 12: Organizao das APIs e da plataforma do J2SE. (NETO, 2007)

2.9.3 Por que utilizar a tecnologia Java neste projeto

A tecnologia Java possui caractersticas que a torna nica no meio de desenvolvimento: Simplicidade: Contm apenas 50 palavras reservadas, ou keyword; 39

Orientada a objetos: Permite a programao orientada a objetos; NETO (2007) Capacidade de distribuio: Permite a distribuio de aplicaes em vrias estaes de trabalho e/ou servidores, por meio de rede; NETO (2007) Robustez: Utiliza compilao e interpretao de cdigo, o que aumenta a sua confiabilidade; NETO (2007) Portabilidade: Uma vez escrita e compilada, uma aplicao em Java pode ser executada em qualquer plataforma operacional em que esteja instalada uma JRE; NETO (2007) Multi-threading: Permite o desenvolvimento de aplicaes para rodar em servidores que atendam a muitos usurios simultneamente, ou de aplicaes que necessitem executar mais de uma tarefa ao mesmo tempo. (NETO, 2007) (No caso deste projeto, o suporte a mais de um Thread extremamente necessrio para rodar o Web Crawler);

API: distribudo com um vasto conjunto de bibliotecas (ou APIs), o que facilita e muito na hora de iniciar um projeto, porque muito do que se precisa j est disponvel atravs de APIs java.

Garbage Collector: Java possui desalocao de memria automtica por processo de garbage collector, facilitando a trabalho do programador. Carga Dinmica de Cdigo: Programas em Java so formados por uma coleo de classes armazenadas independentemente e que podem ser carregadas no momento de utilizao. Popularidade: Grande nmero de materiais gratuitos, fruns e artigos sobre Java podem ser encontrados na internet. A tecnologia Java simplifica download de pginas Web; HOLMES (2003) Suporte do Java ao processamento de expresses regulares simplifica a localizao de links; HOLMES (2003) O Collection Framework do Java fornece os mecanismos necessrios para armazenar uma lista de links. HOLMES (2003)

2.9.4 A portabilidade do Java

Java usa as duas formas computacionais de execuo de software: compilao e interpretao 40

reunindo as vantagens de ambas. As linguagens que utilizam apenas compilao necessitam de instrues adicionais da plataforma operacional, o que compromete a portabilidade. Por outro lado, as linguagens que se apiam apenas sobre a interpretao geralmente so muito lentas. A coordenao dos processos de compilao e interpretao permite a agilizao do processo de desenvolvimento do software ao mesmo tempo em que garante a portabilidade das aplicaes criadas. NETO (2007) A figura 13 mostra um esquemtico de como funciona a combinao das formas de execuo no Java: Em um primeiro momento, o cdigo compilado, ou seja, transformado em instrues compreensveis pelo Java Virtual Machine (bytecode), como mostra a figura 13.

figura13: Esquema do processo de compilao de um cdigo java. NETO (2007) Esse bytecode, por sua vez, pode ser interpretado em vrias plataformas operacionais, bastando que haja um interpretador Java (includo em uma JRE) instalado. Aplicaes totalmente desenvolvidas em Java so 100% portveis. NETO (2007)

Figura 14: Esquema representando o processo de execuo de um bytecode. NETO (2007)

41

2.9.5 Java Runtime Environment (JRE)

A JRE (Java Runtime Evironment) executa e por consequncia interpreta bytecodes em Java, sendo um elemento central no trabalho com a tecnologia Java. A JRE um pacote de software executado como um aplicativo do sistema operacional que executa programas Java de forma escalvel, segura e com alto desempenho. A figura 15 mostra os principais componentes da JRE. NETO (2007)

Figura 15: Esquema Representando os principais componentes da JRE.

2.9.6 A plataforma NetBeans

Como suporte ao desenvolvimento do software deste projeto final, uma vez feito em Java, o NetBeans foi a IDE (Integrated Development Environment ou Ambiente Integrado de Desenvolvimento) utilizada. A escolha do NetBeans se deve aos seguintes fatores: Editor de cdigo fonte integrado, rico em recursos para aplicaes Web (Servlets e JSP, JSTL, EJBs) e aplicaes visuais com Swing que uma API (Interface de Programao de Aplicativos) Java para interfaces grficas. A API Swing tem por 42

objetivo desenhar por contra prpria todos os componentes, ao invs de delegar essa tarefa ao sistema operacional, como a maioria das outras APIs de interface grfica trabalham; Visualizador de classes integrado ao de interfaces, que gera automaticamente o cdigo dos componentes de forma bem organizada, facilitando assim o entendimento de programadores; Help local e on-line; Debug apurado de aplicaes e componentes; Auto-completar avanado; Integrao de mdulos; Suporte a Database, Data view e Connection wizard que so os mdulos embutidos na IDE; Gerao de Javadoc: ferramente permite a gerao automtica de arquivos javadoc em HTML a partir dos comentrios escritos no cdigo, alm de recursos que facilitam a incluso de comentrios no cdigo.

43

CAPTULO 3 ORGANIZAO DO PROJETO

3.1 Introduo

Neste captulo abordaremos a lgica do projeto e a estrutura do mesmo, atravs de diagramas UML. UML significa Unified Modeling Language, sendo um conjunto de diagramas e padres para criao de modelos de Objetos. SAMPAIO (2007). Existem vrios tipos de ferramentas da UML, a saber: Diagrama de Casos de Uso. Diagrama de Classes. Diagrama de Objetos. Diagrama de Seqncias. Diagrama de Colaboraes. Diagrama de Transio de Estados. Diagrama de Atividades. Diagrama de Componentes. Diagrama de Implantao.

Abordaremos neste captulo os Diagramas de Casos de Uso e Diagramas de Classes, referentes ao software deste projeto. Na ltima seo deste captulo, abordaremos o Sistema de Inferncia Fuzzy implementado neste projeto.

44

3.2 Diagramas de Casos de Uso

figura 16: Diagrama de Casos de Uso 3.2.1 Descrio dos casos de uso

Os casos de uso so baseados nas funcionalidades disponveis no sistema. A seguir so descritos os principais casos de uso. a) Buscar Informaes Atores: Usurios do sistema Descrio: Este caso de uso inicia com o usurio entrando com os dados para a pesquisa. possvel 45

o usurio escolher uma palavra chave e uma palavra acessria. O usurio pode definir os limites mximo de URLs varridas, definir se a string de busca diferencia entre maisculas e minsculas no momento da varredura dos Web sites. Aps escolher todas as restries de pesquisa, o usurio clica no boto Busca e todos os controles de pesquisa so desativados e o boto de Busca se transforma em boto de Parar. b) Parar Busca Atores: Usurios do sistema Descrio: Este caso de uso inicia quando o usurio est executando a varredura dos Web sites. possvel que o usurio queira parar a busca de informaes clicando no boto Parar. Se clicado, a ultima varredura da url executada e depois o programa para a busca liberando os controles de pesquisa para um prxima pesquisa. c) Ordenar Busca Atores: Usurios do sistema Descrio: Este caso de uso inicia quando a busca de informaes j foi efetuada. O boto de Ordenao s fica ativado aps a busca ter retornado alguma informao na tabela de correspondncias. O usurio clica no boto de Ordenao e o sistema ordena a lista de links da tabela de correspondncias segundo a maior relevncia dos links. d) Parar Ordenao Atores: Usurios do sistema Descrio: Este caso de uso quando o usurio est executando a ordenao da lista de links. possvel que o usurio queira parar a ordenao da lista de links clicando no boto Parar. Se clicado, a ordenao para e os controles de pesquisa ficam habilitados para uma prxima pesquisa. d) Sair do sistema

46

Atores: Usurios do sistema Descrio: Este caso de uso quando o usurio est utilizando o sistema e deseja sair do sistema.

3.3 Diagramas de Classes

Um diagrama de classe uma viso esttica de um modelo de Objetos. Como um modelo relacional (Entidade Relacionamento) ele descreve as Entidades, neste caso, Classes, e os relacionamentos entre elas SAMPAIO (2007). Iremos primeiramente apresentar, de acordo com a figura 3.3.1 abaixo, As classes e seus relacionamentos, depois iremos detalhar cada classe, explicitando suas caractersticas.

Figura 17: esquema representativo do Diagrama de Classes UML

47

3.3.1 Classe ClippingProjetoFinal.java

Esta classe a classe principal, aonde saem todos os demais relacionamentos, nela esto os principais mtodos de busca.

48

Figura 18: classe ClippingProjetoFinal

3.3.2 Classe Conteudohtml.java

Esta a classe Conteudohtml, usada pela classe principal para extrair o contedo de uma pgina HTML e passar esse contedo como parmetro para o construtor da classe busca.

Figura 19: classe Conteudohtml

3.3.3 Classe busca.java

Esta a classe busca, usada para gerar os ndices de ocorrncia e de posio.

Figura 20: classe busca

49

3.3.4 Classe Fuzzy.java

Esta a classe fuzzy, esta classe tem como principal funo invocar mtodos da classe DeFuzzyBeans quantas vezes forem necessrias.

Figura 21: classe fuzzy

3.3.5 Classe DeFuzzyBean.java

Esta a classe DeFuzzyBean, Esta classe uma classe de suporte classe DeFuzzy, Ela faz chamada aos mtodos da classe DeFuzzy, aonde feito os clculos fuzzy.

50

Figura 22: classe DeFuzzyBean

3.3.6 Classe DeFuzzy.java

Esta a classe DeFuzzy. Esta classe o cerne do Sistema de Inferncia Fuzzy. Nesta classe so feitos os principais clculos, e chamadas ao banco de dados.

51

Figura 23: classe DeFuzzy

3.3.7 Classe CalculaCoeficientes.java

Esta a classe CalculaCoeficientes, uma classe de apoio classe DeFuzzy. Esta classe 52

responsvel pelo clculo dos coeficientes angulares e lineares, presentes nos clculos do Sistema de Inferncia Fuzzy.

Figura 24: classe CalculaCoeficientes

3.3.8 Classe RankLinks.java

Esta a classe RankLinks, tem como finalidade dar suporte classe principal na ordenao dos sites listados anteriormente pela busca.

Figura 25: classe RankLinks

3.4 Modelagem do Sistema de Inferncia Fuzzy

Esta seo apresenta a modelagem do Sistema de Inferncia Fuzzy existente neste projeto. Nesta primeira abordagem, apresentamos o sistema de uma maneira geral. Como o sistema 53

de ordenao trabalha com a busca de palavras chave (ou palavras primrias) e palavras acessrias (ou palavras secundrias) em um texto, e, alm disso, temos a diviso de relevncia quanto a posio e quanto a ocorrncia, temos ento nosso conjunto de variveis lingusticas, que so: Ipo = ndice de palavras primrias por ocorrncia encontradas no texto. Ipp = ndice de palavras primrias por posio encontradas no texto. Iso = ndice de palavras secundrias por ocorrncia encontradas no texto. Isp = ndice de palavras secundrias por posio encontradas no texto. Ip = ndice geral de palavras primrias encontradas no texto. Is = ndice geral de palavras secundrias encontradas no texto. I = ndice geral de palavras encontradas no texto.

Aps a definio do conjunto de variveis lingusticas, vem o esquema do modelo Fuzzy de ordenao do projeto, com 3 Sistemas de Inferncias Fuzzy:

Figura 26: Sistema de Inferncia Fuzzy

3.4.1 Variveis Lingusticas

Nesta seo, apresentaremos as caractersticas das variveis lingusticas, com seus intervalos fechados e seus respectivos conjuntos nebulosos: Ipo = intervalo fechado: [0..100] %; conjunto nebuloso: {baixo, mdio, alto, altssimo} 54

Ipp = intervalo fechado: [0..100] %; conjunto nebuloso: {incio, meio, fim} Iso = intervalo fechado: [0..100] %; conjunto nebuloso: {baixo, mdio, alto, altssimo} Isp = intervalo fechado: [0..100] %; conjunto nebuloso: {incio, meio, fim} Ip = intervalo fechado: [0..100] %; conjunto nebuloso: {muito pouco relevante, pouco relevante, relevante, muito relevante, muitssimo relevante} Is = intervalo fechado: [0..100] %; conjunto nebuloso: {muito pouco relevante, pouco relevante, relevante, muito relevante, muitssimo relevante} I = intervalo fechado: [0..100] %; conjunto nebuloso: {muito pouco relevante, pouco relevante, relevante, muito relevante, muitssimo relevante}

3.4.2 Funes de Pertinncia

Aqui apresentaremos as funes de pertinncia de cada varivel lingustica. Figura 27: Ipo: (Ipo) = [0..1]

55

Figura 28: Ipp: (Ipp) = [0..1]

Figura 29: Iso: (Iso) = [0..1]

56

Figura 30: Isp: (Isp) = [0..1]

Figura 31: Ip: (Ip) = [0..1]

57

Figura 32: Is: (Is) = [0..1]

Figura 33: I: (I) = [0..1]

58

3.4.3 Bases de Regras Tabela 1: Base de Regras da Tabela Fuzzy para o sistema de inferncia fuzzy SLN Primrias: Ocorrncia\Posio (Ipo) BAIXO (Ipo) MEDIO (Ipo) ALTO (Ipo) ALTISSIMO
(PR) Pouco Relevante. ( R ) Relevante. (MR) Muito Relevante. (MMR) Muitssimo Relevante.

(Ipp) INICIO R MR MMR MMR

(Ipp) MEIO PR R MR MMR

(Ipp) FIM PPR PR R MR

(PPR) Pouqussimo Relevante.

Tabela 2: Base de Regras da Tabela Fuzzy para o sistema de inferncia fuzzy SLN - Secundrias: Ocorrncia \ Posio (Iso) BAIXO (Iso) MEDIO (Iso) ALTO (Iso) ALTISSIMO
(PR) Pouco Relevante. ( R ) Relevante. (MR) Muito Relevante. (MMR) Muitssimo Relevante.

(Isp) INICIO R MR MMR MMR

(Isp) MEIO PR R MR MMR

(Isp) FIM PPR PR R MR

(PPR) Pouqussimo Relevante.

Tabela 3: Base de Regras da Tabela Fuzzy para o sistema de inferncia fuzzy SLN - Indice: Ocorrncia\Posio (Ip) PPR (Ip) PR (Ip) R (Ip) MR (Ip) MMR
(PR) Pouco Relevante. ( R) Relevante. (MR) Muito Relevante. (MMR) Muitssimo Relevante.

(Is) PPR PPR PR PR R R

(Is) PR PPR PR R R MR

(Is) R PR PR R MR MR

(Is) MR PR R R MR MMR

(Is) MMR R R MR MR MMR

(PPR) Pouqussimo Relevante.

59

CAPTULO 4 IMPLEMENTAO DO PROJETO

4.1 Introduo

Neste captulo, ser apresentada a implementao do software do projeto. Na seo 4.2 mostrada a base de dados assim como as tabelas utilizadas. Na seo 4.3, ser apresentado o Modulo de Inferncia Fuzzy do software, que faz parte da lgica que faz a classificao das URLs listadas quanto ao nvel de relevncia. Na seo 4.4, ser apresentado toda a implementao do Webcrawler.

4.2 Base de Dados

O projeto possui um banco de dados criado para consultar os dados do sistema de inferncia nebulosa. Tal banco de dados foi implementado em MYSQL Server verso 5.1, que um sistema gerenciador de banco de dados simples, de fcil utilizao e Open Source. Nesta seo, sero listadas as seis tabelas que compem a base de dados e o esquema relacional das mesmas.

4.2.1 Tabelas do Banco de Dados

As tabelas utilizadas pelo projeto so: Sistema Regra 60

Varivel Lingstica Termo Antecedente Segmento

A figura 34 apresenta o esquema relacional das tabelas.

Figura 34: Modelo relacional das tabelas do banco de dados.

61

4.2.1.1 Estrutura do Banco de Dados do Software

A descrio da estrutura do banco de dados do software deste projeto est nas tabelas abaixo.

Tabela 4: Tabelas que formam o banco de dados. Tabelas antecedente regra segmento sistema termo variavel_linguistica Descrio Tabela que contm as regras associadas a cada termo antecedente. Tabela que contm as regras cadastradas. Tabela que contm os segmentos cadastrados Tabela que contm as informaes dos sistemas cadastrados pelos usurios Tabela que contm os termos antecedentes e conseqentes de cada sistema. Tabela que contm as variveis lingsticas.

Tabela 5: Tabela de Antecedente. antecedente Campo Cod_regra Cod_termo

Tipo Dado INTEGER INTEGER

Opo Nulo NO NO

Descrio Chave estrangeira da tabela regra Chave estrangeira da tabela termo

Tabela 6: Tabela Regra. regra Campo Cod_regra cod_sistema Cod_termo_cons

Tipo Dado INTEGER INTEGER INTEGER

Opo Nulo NO NO NO

Descrio Chave primria da tabela Chave estrangeira da tabela sistema Chave estrangeira da tabela termo

62

Tabela 7: Tabela Termo. termo Campo Cod_termo Cod_variavel Nom_termo

Tipo Dado INTEGER INTEGER VARCHAR(50)

Opo Nulo NO NO NO

Descrio Chave primria da tabela Chave estrangeira da tabela variavel_ linguistica Nome do termo

Tabela 8: Tabela Segmento. segmento Campo cod_termo cod_segmento intervalo_esquerdo intervalo_direito coef_angular coef_linear mi_esquerdo mi_direito

Tipo Dado INTEGER INTEGER DECIMAL(10,5) DECIMAL(10,5) DECIMAL(18,4) DECIMAL(18,4) INTEGER INTEGER

Opo Nulo NO NO NO NO NO NO NO NO

Descrio Chave estrangeira da tabela termo Chave primria da tabela Intervalo esquerdo Intervalo direito Coeficiente angular Coeficiente linear Mi esquerdo Mi direito

Tabela 9: Tabela Varivel Lingstica. variavel_linguistica Campo Tipo Dado cod_variavel INTEGER cod_sistema INTEGER nome_variavel VARCHAR(50) ini_universo INTEGER fim_universo INTEGER flag_antecedente VARCHAR(1)

Opo Nulo NO NO NO NO NO NO

Descrio Chave primria da tabela Chave estrangeira da tabela sistema Nome da varivel lingstica Inicio do universo de discurso Fim do universo de discurso Flag que identifica se a varivel antecedente

63

Tabela 10: Tabela Sistema. sistema Campo cod_sistema nom_sistema

Tipo Dado INTEGER VARCHAR(20)

Opo Nulo NO NO

Descrio Chave primria da tabela Nome do sistema

4.3 Modulo de Inferncia Fuzzy do Software

O Modulo de Inferncia Fuzzy do software comea quando da classe principal, onde existem diversos mtodos para se efetuar o Crawling e efetuar buscas em cada URL vasculhada, se invoca a classe Busca.java. A classe Busca.java possui como caractersticas coletar 2 parmetros que so a(s) palavra(s) de busca (que podem ser tanto palavras chaves quanto palavras acessrias) e o texto de referncia. Esta classe, atravs de seus construtores, faz clculos, para a partir da retornar 2 ndices, que so ndices de posio desta(s) palavra(s) no texto e ndices de ocorrncia desta(s) palavra(s) no texto. Esta classe faz esse clculo independente do fato de a(s) palavra(s) de busca ser(em) palavra(s) chave ou palavra(s) secundrias, pois a prpria classe principal j faz esta distino. Veremos mais detalhes desta classe mais adiante. Aps passar pela classe Busca.java, a classe principal j tem os ndices de so fundamentais para o Sistema de Inferncia Fuzzy, Esses ndices so: -Ipo: ndice de palavras chave de acordo com o nmero de ocorrncia delas no texto. -Ipp: ndice de palavras chave de acordo com a posio mdia destas palavras no texto. -Isp: ndice de palavras secundrias de acordo com o nmero de ocorrncia delas no texto. -Iso: ndice de palavras secundrias de acordo com a posio mdia destas palavras no texto. No apndice A possvel conferir com detalhes a modelagem da lgica Fuzzy empregado neste projeto, explicitando aonde entram esses ndices e como funciona a lgica, que passa por Funes de Pertinncia e Bases de Regras. 64

Tendo posse dos ndices, a classe principal invoca a classe fuzzy.java esta classe invoca a classe DeFuzzyBean.java, que invoca a classe DeFuzzy.java. Esta ltima ainda invoca uma outra classe chamada CalculaCoeficientes.java, mas nesta classe (DeFuzzy.java) que os principais clculos para o Mdulo de Inferncia Fuzzy so feitos. A ideia de se ter vrias classes til, para se ter uma certa clareza e organizao nos mdulos, separando a classe que faz clculos da classe que estrutura as chamadas aos mtodos e da classe que recebe uma quantidade de informao para ser tratado e retornar um resultado. Aps a classe principal chamar a classe fuzzy.java e esta chamar outras classes em cadeia, ela retorna um ndice geral, que o quanto o texto, ou URL, relevante, de acordo com as palavras de busca. Para ento poder ordenar.

4.3.1 Classe DeFuzzy.java

A classe DeFuzzy responsvel pelo clculo do Sistema de Inferncia Fuzzy. nesta classe que ocorre a chamada ao banco de dados do sistema, afim de prover o suporte e a base necessria para efetuar os clculos. O clculo feito pelo mtodo percorrerRegras que inicialmente acessa a tabela regras e a transfere para um vetor (regraSistema). No decorrer da execuo do mtodo, outros seis mtodos da classe so acionados, pois eles so necessrios para que o resultado do clculo seja encontrado. Este processo fica mais evidente no algoritmo apresentado na 4.3.1.1.

4.3.1.1 mtodo percorreRegras

percorrerRegras(cod_var1, valor_var1, cod_var2, valor_var2) INICIO regraSistema <- regras da tabela de Regras PARA i DE 0 AT tamanho de regraSistema FAA centroideRegra <- 0 65

denominadorRegra <- 0 cod_regra <- regraSistema[i] cod_termo1 <- verificarTermoRegra(cod_regra, cod_var1) alfa1 <- avaliarMi(cod_termo1, valor_var1) cod_termo2 <- verificarTermoRegra(cod_regra, cod_var2) alfa2 <- avaliarMi(cod_termo2, valor_var2) SE alfa1 <= alfa2 ENTO menor_alfa <- alfa1 SENO menor_alfa <- alfa2 FIM SE cod_termo_cons <- verificarTermoConsRegra( cod_regra) centroideRegra <- calculaCentroideRegra(cod_termo_cons, menor_alfa) numeradorGeral <- NumeradorGeral + (centroideRegra * denominadorRegra) denominadorGeral <- denominadorGeral + denominadorRegra FIM PARA valor_final <- numeradorGeral / denominadorGeral RETORNA valor_final FIM

4.3.1.2 mtodo verificarTermoRegra

Mtodo responsvel por retornar o cdigo do termo que atende a cada regra e a cada varivel de entrada: verificarTermoRegra(cod_regra, cod_var) INICIO cod_termo <- 0 Rset <- cod_termo da tabela de Termo,regra,antecedente ONDE termo.cod_termo=antecedente.cod_termo OU 66 termo.cod_termo=Regra.cod_termo_cons) E

Regra.cod_regra=antecedente.cod_regra termo.cod_varivel=cod_var SE Rset possui registro ENTAO cod_termo <- Rset.cod_termo RETORNA cod_termo FIM

Regra.cod_regra=cod_regra

4.3.1.3 mtodo avaliarMi

Mtodo responsvel por retornar o grau de pertinncia: avaliarMi(cod_termo, valor_var) INICIO alfa <- 0 Rset <- cod_segmento,coef_angular,coef_linear da tabela de Segmento ONDE segmento.cod_termo = cod_termo E (intervalo_esquerdo <= valor_var) E (intervalo_direito >= valor_var) E (mi_esquerdo <> 0 OU mi_direito <> 0) SE Rset possui registro ENTO codsegmentos_termo=Rset.cod_segmento coef_linear = Rset.coef_linear coef_angular = rs.coef_angular alfa = calculaAlfa(coef_linear, coef_angular,valor_var) FIM DO SE RETORNA alfa FIM

4.3.1.4 mtodo calculaAlfa

Mtodo responsvel por calcular o grau de pertinncia: 67

calculaAlfa(coef_linear, coef_angular, valor_var) INICIO alfa <- (coef_angular * valor_var) + coef_linear RETORNA alfa FIM

4.3.1.5 mtodo VerificarTermoConsRegra

Mtodo responsvel por retornar o cdigo do termo que atende cada regra e a varivel conseqente: verificarTermoConsRegra( cod_regra) INICIO cod_termo <- 0 Rset <-cod_termo_cons da tabela de regra ONDE regra.cod_regra = cod_regra RETORNA Rset. cod_termo_cons FIM

4.3.1.6 mtodo calculaCentroideRegra

Mtodo responsvel por traduzir a sada nebulosa em um valor determinstico. Vale ressaltar que a traduo foi feita utilizando o mtodo da Mdia dos Centrides: calculaCentroideRegra(cod_termo_cons,MenorAlfa) INICIO centroideRegra <- 0 numeradorRegra <- 0 denominadorregra <- 0 Rset <cod_segmento,intervalo_esquerdo,intervalo_direito,mi_esquerdo,mi_direito ONDE cod_termo=cod_termo_cons E (mi_esquerdo<>0 OU mi_direito<>0) 68

ENQUANTO existe registro em Rset cod_segmento <- Rset.cod_segmento intesq <- Rset.intervalo_esquerdo intdir <- Rset.intervalo_direito miesq <- Rset.mi_esquerdo midir <- Rset.mi_direito numeradorsegmento <- 0 denominadorsegmento <- 0 SE miesq = 1 ENTO miesq = menorAlfa FIM DO SE SE midir = 1 ENTO midir=menorAlfa FIM DO SE coefAng = (miesq - midir) / (intesq - intdir) coefLinear = miesq (intesq * coefAng) numeradorSegmento = calculacentroide(intesq, intDir, coefAng, coefLinear) denominadorSegmento = calculaArea(intesq, intdir, coefAng, coefLinear) numeradorRegra = numeradorRegra + numeradorSegmento denominadorRegra = denominadorRegra + denominadorSegmento FIM ENQUANTO centroideRegra = numeradorRegra / denominadorRegra RETORNA CentroideRegra FIM

4.3.1.7 mtodo calculaCentroide calculaCentroide(intEsq, intDir, coef_linear, coef_angular) INICIO pot1 <- (intDir)3 69

pot2 <- (intDir)2 pot3 <- (intEsq)3 pot4 <- (intEsq)2 aux1 <- (pot1 * coef_angular) / 3 aux2 <- (pot2 * coef_linear) / 2 aux3 <- (pot3 * coef_angular) / 3 aux4 <- (pot4 * coef_linear) / 2 RETORNA (aux1 + aux2 - aux3 - aux4) FIM

4.3.1.8 mtodo calculaArea

calculaArea(intEsq, intDir, coef_linear, coef_angular) INICIO pot1 <- (intDir)2 pot2 <- (intEsq)2 area1 <- (potencia1 * coef_angular) / 2 area2 <- (intDir * coef_linear) area3 <- (potencia3 * coef_angular) / 2 area4 <- (intEsq * coef_linear) RETORNA (area1 + area2 - area3 - area4) FIM

4.3.2 Classe Busca.java

Esta classe uma classe de apoio ao Modulo de Inferncia Fuzzy do projeto. J foi falado desta classe na subitem anterior, e neste sub item iremos especificar um pouco mais. A classe Busca possui, alm de dois mtodos que retornam um ndice de ocorrncia e um ndice de posio, dois construtores. Sendo que um construtor invocado na classe principal e o outro invocado dentro deste primeiro construtor. A ideia por trs destes construtores fazer um 70

clculo ntegro para prover os ndices de ocorrncia e posio. Na classe Busca, o ndice de ocorrncia calculado contando o nmero de ocorrncia desta palavra no texto e o nmero total de palavras no texto. A partir da, feito um clculo para prover a porcentagem desta palavra no texto. Temos ento o ndice de ocorrncia desta palavra no texto, que pode ser qualquer valor entre 0 e 100. Vale lembrar que a string referente a palavras pode conter mais de uma palavra, basta esta string conter espaos entre dois caracteres, para tal, este ndice gerado referente a essas palavras. Ainda na classe Busca, o ndice de posio calculado, guardando em quais posies esta palavra est no texto. Primeiro todo o texto armazenado sob forma de um array, ou seja, cada posio deste array equivale a uma palavra do texto. Depois so registradas as posies em que o valor delas igual palavra que se procura. Temos ento um conjunto de nmeros representando a posio da palavra procurada no texto. Somamos os elementos deste conjunto, e depois dividimos pelo total de palavras encontradas. Aps isto, dividimos pelo nmero total de palavras no texto e multiplicamos por 100. Temos ento um valor mdio de ocorrncia desta palavra no texto, que pode variar entre zero e 100. O clculo feito desta forma, para representar em termos de porcentagem, a posio mdia desta palavra no texto, Sendo que 0% significa no incio e 100% significa no fim. Exemplo disso , se uma palavra aparecer no texto apenas no final, como ltima palavra, a posio desta palavra no texto ser igual ao tamanho total de palavras no texto. Este nmero seria ento dividido por 1 e depois dividido por ele mesmo, resultando em um valor igual a 1, para depois multiplicar por 100, ficando ento em 100%, ou seja, no final absoluto do texto. Vale lembrar que a string referente a palavras pode conter mais de uma palavra basta esta string conter espaos entre dois caracteres, para tal, este ndice gerado referente a essas palavras. A seguir, est um trecho de cdigo da classe Busca, que exemplifica o que foi dito. Basicamente este trecho o equivalente aos dois construtores desta classe. O primeiro construtor faz os clculos mais relevantes, enquanto o segundo construtor o que chama o primeiro e invocado pela classe principal. Este segundo construtor tem como funo tratar o caso de haver mais de uma palavra a procurar.

public busca(String key, String str) throws IOException { 71

String[] temp; int totpal = 0, tamtotal = 0, loc = 0, i; key=key.toLowerCase(); int[] pos = new int[100000]; for (i = 0; i < pos.length; i++) { pos[i] = 0; } str = str.replaceAll("[^\\p{L}\\p{N}]", " "); str = str.replace(" ", " "); temp = str.split(" "); for (i = 0; i < temp.length; i++) { tamtotal++; if (temp[i].toLowerCase().equals(key)) { pos[totpal++] = tamtotal; } } i = 0; while (pos[i] != 0) { loc = loc + pos[i++]; } if (totpal != 0) { IndPos = (double) loc / totpal; IndPos = (double) IndPos / tamtotal; IndPos = (double) IndPos * 100; IndOco = (double) totpal / tamtotal; IndOco = IndOco * 100; } else { IndPos = 0.0; IndOco = 0.0; } } 72

public busca(String palavra, String str, int a) throws IOException { String[] temp = palavra.split(" "); busca busca; double Ip=0.0000000000000, Io=0.0000000000; IndOco = 0.0; IndPos = 0.0; for (int j = 0; j < temp.length; j++) { busca = new busca(temp[j], str); Io = Io + busca.getIndOco(); Ip = Ip + (busca.getIndPos() * busca.getIndOco()); } IndOco = Io; IndPos = (Io!=0 ? Ip / Io : 0.0); }

4.4 Implementao do Web Crawler

4.4.1 As variveis do Web Crawler

A maioria das variveis declaradas inicialmente so para controles da interface. O array MAX_URLS do tipo String, declara a lista de valores a ser exibida na caixa de combinao Max URLs To Crawl para a caixa de combinao de varredura. A segunda varivel declarada o disallowListCache que a lista de no autorizao de robot para que elas no precisem ser recuperadas para cada URL varrido. Tambm so declaradas os controles de interface para as sees Search,Stats e Matches da interface. Aps essas declaraes, a flag crawling definida para monitorar se o rastreamento est ocorrendo ou se est parado. Por ultimo, declarado a varivel logFileWriter de instncia, utilizada para imprimir correspondncias de pesquisa no arquivo de 73

log.

4.4.2 O construtor do Web Crawler

Todos os controles da interface so inicializados quando a classe SearchCrawler instanciada, o construtor possui grande quantidade de cdigo porm so cdigos simples e diretos. A chamada ao mtodo setTitle() configura o ttulo da aplicao, em seguida configuramos a largura e a altura da janela em pixels com a chamada setSize(). Para tratar os fechamentos da janela, um listener de janela adicionado chamando addWindowListener(), que recebe o objeto WindowAdapter que sobscreve o handler do evento windowClosing(). Quando a janela fechada o mtodo actionExit() acionado por esse handler. Para organizar os controles na tela utilizado a classe GridBagLayout e sua classe associada GridBagConstraints. A seo Search da interface organizada,ela possui todos os controles para inserir os critrios de pesquisa e restries. Logo aps, a seo Stats, que armazena todos os controles afim de informar o status da varredura, assim como a quantidade de URLs que foram varridos e os que no foram varridos. O controle do campo de texto Matches Log File inicializado com uma string com o nome de arquivo chamado crawler.log, esse arquivo ser armazenado no diretrio a partir do qual a aplicao est sendo executada, especificado pela varivel de ambiente Java user.dir. Toda vez que o boto Search clicado acontece uma chamada ao mtodo actionSearch(), pois foi adicionado ao boto Search um ActionListener. A chamada setFont() chamada para atualizar e exibir os resultados de cada rtulo, ela utilizada para desativar o negrito das fontes de rtulo para destac-las na interface. A seo Matches, que consiste na tabela de correspondncias, que contm a lista de URLs que foram localizadas os contedos desejados, instanciada com uma nova subclasse DefaultTableModel recebida de seu construtor. Somente o mtodo isCellEditable() foi 74

implementado, porm a subclasse DefaultTableModel geralmente utilizada por completo para personalizar o modelo de dados utilizado no Jtable. O mtodo isCellEditable() instrui que nenhuma clula deve ser editvel, o seu retorno false, independente das linhas e colunas que so especificadas. Depois que a tabela de correspondncias inicializada, ela adicionada ao painel Matches. Adicionamos na interface os painis Search e Matches.

4.4.3 O mtodo actionSearch()

Toda vez que o boto Search ( ou Stop) clicado, o mtodo ActionSearch() invocado e as linhas de cdigo a seguir so executadas: If (Crawling){ Crawling=false; Return; } Se o boto Stop foi Clicado, a flag de varredura desativada. Como o boto Search da interface possui duas funes que so:Search e Stop, necessrio saber qual boto foi clicado. Caso a varredura esteja em execuo,a flag crawling configurada com true. Sendo assim, sabemos que o boto Stop foi clicado caso a flag crawling estiver true no momento em que o mtodo actionSearch() for invocado. A flag crawling setada como false e o actionSearch() retorna, e o restante do mtodo no executado. A varivel errorList do tipo ArrayList inicializada: ArrayList errorList=new ArrayList(); A funo da errorList armazenar quaisquer mensagens de erro geradas pelas prximas linhas de cdigo que validam que todos os campos requeridos da pesquisa foram inseridos. O seguinte cdigo verifica se a URL inicial vlida: 75

String startUrl= startTextField.getText().tim(); If (startUrl.lenght() <1) { errorList.add(Missing Start URL). } Else if (verifyURL(startUrl)==null){ errorList.add(Invalid Start URL.) } Caso as verificaes acima falhar, uma mensagem de erro adicionada lista de erros. A validao do valor da caixa de combinao Max URLs To Crawl feita: int maxUrls = -1; String max = ((String) maxComboBox.getSelectedItem()).trim(); if (max.length() > 0) { try { maxUrls = Integer.parseInt(max); } catch (NumberFormatException e) { } if (maxUrls < 1) { errorList.add("Invalid Max URLs value."); } } O campo Max URLS To Crawl pode conter um nmero positivo que indica o nmero mximo de URLs a serem percorridas ou pode-se deixar em branco para indicar que no existe limite a ser utilizado. Inicialmente, o maxUrls definido como -1 para indicar que nenhum mximo foi escolhido. Caso o usurio coloque algum valor, o campo validado como sendo um valor numrico vlido com uma chamada integer.parseint() que converte uma string em um valor int. 76

Caso no consiga validar o campo, uma exceo lanada atravs de NumberFormatException e o valor maxUrls no configurado. Logo aps, maxUrls verificado se for menor que 1. Se for, um erro adicionado a lista de erros. Em seguida, verificamos se o arquivo de logs foi inserido com o seguinte cdigo: String logFile = logTextField.getText().trim(); if (logFile.length() < 1) { errorList.add("Missing Matches Log File."); } Caso o nome do arquivo no conter caracteres adicionado uma mensagem de erro a lista de erros. Primeiro atribudo a varivel SearchString o campo searchTextField da interface retirando os espaos em branco. O mesmo processo feita para o campo AcessoriaString . A validao dos campos SearchString e AcessoriaString so validadas: String searchString = searchTextField.getText().trim(); String acessoriaString =acessoriaField.getText().trim(); if (searchString.length() < 1) { errorList.add("Missing Search String."); } A validao do campo feita caso no tenha sido atribudo nenhum valor a varivel searchString, ou seja, ela est vazia, lanada uma mensagem de erro ("Missing Search String.") para a lista de erros. O cdigo seguinte verifica se quaisquer erros foram registrados durante a validao dos campos. Caso ocorra algum erro, ou mais concatenado todos os erros em uma nica mensagem e exibida com uma chamada para showError(). 77

if (errorList.size() > 0) { StringBuffer message = new StringBuffer(); for (int i = 0; i < errorList.size(); i++) { message.append(errorList.get(i)); if (i + 1 < errorList.size()) { message.append("\n"); } } showError(message.toString()); return; } A varivel message do tipo StringBuffer utilizada para armazenar a mensagem concatenada. A lista de erros percorrida por um loop for, adicionando cada mensagem de erro capturada varivel message. Verifique que toda vez que adicionado uma nova mensagem, tambm ocorre a verificao para ver se a mensagem a ultima da lista, pois caso no for a ultima, um caractere de nova linha adicionado, de modo que cada mensagem ser exibida em sua linha prpria linha, mostrado com o mtodo showError. O mtodo append da classe StringBuffer adiciona ao final da string, o contedo dos erros separados pelo caractere de escape \n. Depois de todas as validaes dos campos, o actionSearch() conclui, removendo o WWW do URL inicial se houver e depois invoca o mtodo Search(). startUrl = removeWwwFromUrl(startUrl); Chamada ao mtodo search passando os parmetros logfile, starturl, maxulrs, searchString,acessoriaString. search(logFile, startUrl, maxUrls, searchString,acessoriaString); O processo de varredura da Web feito atravs do mtodo search(), esse um processo 78

lento, que pode durar um tempo considervel para concluir,por isso criado um novo thread, de modo que a pesquisa pode ser executada independentemente, com isso, liberamos a thread de eventos do Swing, para que qualquer alterao na interface pode ser captada enquanto estiver ocorrendo a varredura. Thread thread = new Thread(new Runnable()) { Public void run(){ Um novo objeto Thread instanciado com uma instancia Runnable recebida de seu construtor para executar o cdigo de pesquisa em uma thread separada. Os controles de interface so atualizados para que se possa indicar que a pesquisa est em execuo: setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR)); A chamada setCursor mostra o cursor de ampulheta enquanto a varredura est em andamento. O cursor configurado como WAIT_CURSOR para indicar que a aplicao est ocupada. A ampulheta considerada como smbolo padro do WAIT_CURSOR na maioria dos sistemas operacionais. Os controles de pesquisa so desativados para no serem editados durante a pesquisa. O mtodo para desativar os controles o setEnable passando como parmetro a flag false. startTextField.setEnabled(false); maxComboBox.setEnabled(false); limitCheckBox.setEnabled(false); logTextField.setEnabled(false); searchTextField.setEnabled(false); acessoriaField.setEnabled(false); 79

caseCheckBox.setEnabled(false); Aps o inicio da execuo, o boto Search transformado em boto de Stop, caso o usurio queira parar a execuo do programa. searchButton.setText("Stop"); Logo aps a seo Stats da interface reinicializada: table.setModel(new DefaultTableModel(new Object[][]{}, new String[]{"URL"}) {

@Override public boolean isCellEditable(int row, int column) { return false; } });

O reincio da tabela de correspondncias feita atravs do mtodo setModel() passando como parmetro um instancia vazia de DefaultTableModel inteiramente nova. updateStats(startUrl, 0, 0, maxUrls); Depois, o mtodo updateStats() chamado para atualizar a barra de progresso e os rtulos de status. Dando continuidade, o arquivo de log aberto e o flag crawling ativado, conforme a seguir: try { logFileWriter = new PrintWriter(new FileWriter(logFile)); } catch (Exception e) { showError("Unable to open matches log file."); return; 80

} Uma nova instncia de PrintWriter criada para a gravao do arquivo de log. Uma caixa de mensagem de erro exibida, se o arquivo no puder ser aberto, chamando o mtodo showError e passando a mensagem ("Unable to open matches log file."). A flag crawling ativada para indicar ao mtodo actionSearch() que a varredura est em execuo. crawling = true; A varredura feita pelo mtodo crawl passando os parmetros necessrios, conforme cdigo abaixo: crawl(startUrl, maxUrls, limitCheckBox.isSelected(), searchString,acessoriaString,

caseCheckBox.isSelected()); O flag crawling desativado aps o termino da varredura, e o arquivo de log de correspondncias fechado, como mostrado a seguir: crawling = false; try { logFileWriter.close(); } catch (Exception e) { showError("Unable to close matches log file."); } Caso ocorra algum erro, se exibida uma mensagem de erro: "Unable to close matches log file.. Os controles da pesquisa so ento reativados, aps a concluso da varredura atravs do seguinte cdigo: crawlingLabel2.setText("Done"); startTextField.setEnabled(true); 81

maxComboBox.setEnabled(true); limitCheckBox.setEnabled(true); logTextField.setEnabled(true); searchTextField.setEnabled(true); caseCheckBox.setEnabled(true); Agora o boto searchButton setado para exibir a mensagem Search, pois agora possvel efetuar uma nova pesquisa. searchButton.setText("Search"); Agora o cursor retorna ao cursor padro da aplicao. setCursor(Cursor.getDefaultCursor());

O cdigo a seguir, exibe uma mensagem caso a pesquisa no encontre nenhuma correspondncia, verificamos que o teste feita se a quantidade de linhas igual a zero.

if (table.getRowCount() == 0) { JOptionPane.showMessageDialog(SearchCrawler.this, "Your Search String was not found. Please try another.", "Search String Not Found", JOptionPane.WARNING_MESSAGE); } A concluso do mtodo search() o seguinte: } }); thread.start(); 82

} O thread de pesquisa iniciado com uma chamada thread.start(), aps ser definido o mtodo run() da implementao Runnable.O mtodo run() da instncia Runnable ser invocado, sob a execuo do thread.

4.4.4 O mtodo ShowError()

private void showError(String message) { JOptionPane.showMessageDialog(this, message, "Error", JOptionPane.ERROR_MESSAGE); } O mtodo showError exibe uma mensagem atravs de uma caixa de dialogo de erro com a mensagem recebida como parmetro. Esse mtodo invocado caso ocorra algum erro em abrir,fechar ou gravar o arquivo de log, ou se alguma opo de pesquisa requerida estiver faltando. 4.4.5 O mtodo updateStats()

A funo do mtodo updateStats() atualizar os valores exibidos na seo Stats da interface com o usurio: private void updateStats( String crawling, int crawled, int toCrawl, int maxUrls) { crawlingLabel2.setText(crawling); crawledLabel2.setText("" + crawled); toCrawlLabel2.setText("" + toCrawl); 83

if (maxUrls == -1) { progressBar.setMaximum(crawled + toCrawl); } else { progressBar.setMaximum(maxUrls); } progressBar.setValue(crawled); matchesLabel2.setText("" + table.getRowCount()); } So feitas atualizaes dos resultados da varredura como o nmero de URLs que foram varridos at ento e o nmero de URLs a serem varridos. Note que o campo URLs to Crawl exibe o nmero de links que foram agregados e colocados na fila To Crawl, e no a diferena entre os URLs mximos especificados e o nmero de URLs que j foram varridos. Para que o mtodo setText aceite os valores int convertendo para String passado a string . Caso o campo Max URLs to Crawl no for configurado, quer dizer que no existe um limite mximo de varredura, a barra de progresso configurado com o nmero de URLs que foram varridos + nmero de URLs para varrer. Caso exista um limite configurado, o limite mximo da barra de progresso o limite mximo da varredura. O valor atual da barra de progresso configurado logo aps a configurao do limite da barra. O nmero atual de URLs que a string de pesquisa contm atualizado no rtulo Search Matches.

4.4.6 O mtodo addMatch()

Toda vez que uma correspondncia de string de pesquisa for encontrada o mtodo crawl() chama o 84

mtodo addMatch(), que adiciona um URL tabela de correspondncias e ao arquivo de log. private void addMatch(String url) { DefaultTableModel model = (DefaultTableModel) table.getModel(); model.addRow(new Object[]{url}); try { logFileWriter.println(url); } catch (Exception e) { showError("Unable to log match."); } }

4.4.7 O mtodo verifyUrl()

A funo do mtodo verifyUrl() validar o formato da URL e tambm transformar a string recebida em um objeto URL. A Esse mtodo recebe como parmetro uma string contendo a url. O cdigo verifica se a URL um URL de HTTP, pois somente estes tipos so suportados pelo crawler, caso a url no for validada retornado o valor null. Em seguida se a url for vlida, instanciado um novo objeto URL, caso contrrio lanado uma exceo retornando para o valor null que significa que a url no valida. private URL verifyUrl(String url) { if (!url.toLowerCase().startsWith("http://")) { return null; 85

} URL verifiedUrl = null; try { verifiedUrl = new URL(url); } catch (Exception e) { return null; } return verifiedUrl; }

4.4.8 O mtodo downloadPage()

O mtodo recebe como parmetro uma url e faz o download da pgina retornando uma string contendo todo o contedo da pagina. private String downloadPage(URL pageUrl) { try { BufferedReader reader = new BufferedReader(new InputStreamReader(pageUrl.openStream())); String line; StringBuffer pageBuffer = new StringBuffer(); 86

while ((line = reader.readLine()) != null) { pageBuffer.append(line); } System.out.println(pageBuffer.toString()); return pageBuffer.toString(); } catch (Exception e) { } return null; }

4.4.9 O mtodo removeWwwFromUrl()

Para remover da url a parte da string www utilizamos o mtodo removeWwwFromUrl, pois muitos dos sites intercalam URLs que iniciam com WWW e outras no. O sistema utiliza essa tcnica para localizar a URL de menor denominador comum. Na maioria dos Web Sites ambos os URLs so os mesmos, e ter o menor denominador permite pular URLs duplicados. O mtodo inicia procurando na string url, o contedo ://WWW.. O :// indica para procurar www no inicio da url, pois somente no comeo que existe os dois pontos seguidos de duas barras. Aps a localizao exata do WWW, eliminado o WWW da string e concatenado as partes antes e depois do WWW. Caso no encontre o www no inicio da url, retornado a url inicial passada. private String removeWwwFromUrl(String url) { int index = url.indexOf("://www."); 87

if (index != -1) { return url.substring(0, index + 3) + url.substring(index + 7); } return (url); }

4.4.10 O mtodo retrieveLinks()

A anlise sinttica do contedo e a recuperao de todos os links relevantes de uma pgina Web feita atravs do mtodo retrieveLinks(). Armazenamos em um objeto String a pgina Web na qual todos os links so recuperados. Seria muito trabalhoso se fossemos analisar sintaticamente o contedo somente com os mtodos da classe String, por isso, para efetuar a anlise sinttica utilizamos uma biblioteca API de Java de expresses regulares que facilita o trabalho de anlise sinttica das strings. A API que trata das expresses regulares est contida em Java.util.regex.

4.4.11 Expresses Regulares

Para efetuarmos a anlise dos textos retirados da internet precisamos de uma ferramenta capaz de buscar padres de caracteres em textos, para isso utilizamos as expresses gulares.Segundo JARGAS ,uma expresso regular (ER) um mtodo formal de se especificar um padro de texto. uma composio de smbolos, caracteres com funes especiais, chamados "metacaracteres" que, agrupados entre si e com caracteres literais, formam uma seqncia, uma expresso. Expresses regulares so escritas numa linguagem formal que pode ser interpretada por um processador de expresso regular, um programa que ou serve um gerador de analisador sinttico ou examina o texto e identifica partes que casam com a especificao dada. Os padres de caracteres chamados padro (pattern) podem ser utilizados para localizar correspondncias em outras sequncias de caracteres. Expresses regulares podem especificar curingas, conjuntos de caracteres 88

e vrios quantificadores.

Varias sequncias de caracteres diferentes podem ter uma forma geral

que identificado por uma expreesso regular. Pattern e Matcher so duas classes que suportam o processamento de expresses regulares. O pattern utilizado para definir uma expresso regular e para localizar o padro em outra sequncia utilizado o Matcher. Um padro criado chamando o mtodo de fbrica compile(), pois a classe no define um construtor. Static Pattern compile(String padro, int opes) Onde o parmetro padro a expresso regular que voc quer utilizar, e o parmetro opes define uma ou mais opes que afetam a correspondncia. A opo utilizada no projeto o Pattern. CASE_INSENSITIVE para ignorarmos a distino entre maisculas e minsculas. A transformao da string em um padro feita atravs do mtodo compile() que pode ser utilizado como correspondncia de padro pela classe Matcher. Ele retorna um objeto Pattern que contm o padro. Para criar o objeto Matcher utilizamos o objeto Pattern. Para isso, chamamos o mtodo de fbrica matcher() definido por Pattern. Matcher matcher (CharSequence str) O padro ser comparado com a sequncia de caracteres str, que chamada sequncia de entrada (input sequence). CharSequence uma interface e define um conjunto de caracteres somente de leitura. Uma das classes que implementa o CharSequence a classe String, portanto, voc pode receber uma string do matcher(). As operaes de correspondncia de padro sero feitas pelos mtodos definidos pelo Matcher. Os mtodos utilizados no projeto so find() e group(). Para determinar se uma subseqncia da sequncia de entrada corresponde ao padro utilizamos o mtodo find(). boolean find() Esse mtodo retorna true caso encontre uma subseqncia ou false caso no encontre. O mtodo pode ser chamado repetidamente, permitindo localizar todas as subseqncias 89

correspondentes. Cada chamada do find() inicia onde a anterior parou. Utilizamos o group () para obter uma string contendo uma seqncia correspondente. A forma utilizada no projeto : String group ( int qual) A seqncia (grupo de caracteres) especificado pelo parmetro qual, o primeiro grupo 1. A string correspondente retornada.

4.4.12 Sintaxe das expresses regulares

Segundo HOLMES (2003), Uma expresso regular composta de caracteres normais, classes de caractere (conjunto de caracteres), curingas e quantificadores. Um caractere normal correspondido tal como . Portanto, se um padro consistir em xy, a nica seqncia de entrada que correspondera a ele ser xy. Caracteres como nova linha e tabulaes so especificados utilizando as seqncias de escape padro, que iniciam com uma barra (/). Por exemplo, uma nova linha especificada por \n. Na linguagem de expresses regulares, um caractere normal tambm chamado de literal. Uma classe de caracteres um conjunto de caracteres. Uma classe de caracteres especificada colocando os caracteres na classe entre colchetes. Por exemplo, a classe [wxyz] corresponde a w,x,y ou z. Para especificar um conjunto invertido, preceda os caracteres com um circunflexo (^). Por exemplo, [^wxyz] localiza qualquer caractere exceto w,x,y ou z. Por exemplo, para especificar uma classe de caractere que identificar os dgitos de 1 a 9, utilize [1-9]. O curinga o ponto (.) e corresponde a qualquer caractere. Portanto, um padro que consiste em . Localiza essas (e outras) seqncias de entrada: A,a,x e assim por diante. Um quantificador determina quantas vezes uma expresso correspondida. Os quantificadores so mostrados aqui: + - identifica um ou mais 90

* - identifica zero ou mais ? identifica zero ou um O mtodo retrieveLinks() Para obter links de uma pgina utilizamos a API de expresso regular: Pattern p = Pattern.compile("<a\\s+href\\s*=\\s*\"?(.*?)[\"|>]", Pattern.CASE_INSENSITIVE); Matcher m = p.matcher(pageContents); A expresso regular pode ser dividida em partes: <a Procura os caracteres <a \\s Procura um ou mais caracteres de espao em branco Href Procura os caracteres href \\s* - Procura zero ou mais caracteres de espao em branco \? Procura zero ou um caractere de aspa (.*?) Procura zero ou mais de qualquer caractere at que a prxima parte do padro seja encontrada, e coloca os resultados em um grupo. [\|>] Procura o caractere de aspa ou caractere maior que (>). Verifique que a opo passada o Pattern. CASE_INSENSITIVE para o compilador de padres para indicar que o padro deve ignorar a diferena entre maisculas e minsculas ao procurar correspondncias. A seguir, criamos uma lista para armazenar os links encontrados, e comeamos ento a procura dos links: ArrayList linkList = new ArrayList(); while (m.find()) { String link = m.group(1).trim(); Cada link encontrado iterando por m at que o mtodo m.find() retorne false e saia do loop while. Utilizamos ento o mtodo group() 91 definido pelo Matcher para que cada

correspondencia(link) encontrada seja recuperada. O mtodo group() recebe 1 como parmetro para que o primeiro grupo das sequncias correspondentes seja retornado. Para remover os espaos em branco da correspondncia utilizamos o mtodo trim(). Para filtrar os links desnecessrios utilizamos os cdigos a seguir, pois nem todos os links so passiveis de varredura: if (link.length() < 1) { continue; } if (link.charAt(0) == '#') { continue; } if (link.indexOf("mailto:") != -1) { continue; } if (link.toLowerCase().indexOf("javascript") != -1) { continue; } Os links vazios so pulados verificando se o tamanho da string menor que 1, depois links que so ancoras em uma pgina so pulados caso a string encontre o primeiro caractere como #. As ancoras permitem criar links para sees dentro de uma pagina. Como ancoras no so links para novas paginas, elas so puladas. Os links que so especificados para correio eletrnico tambm so pulados, pois no apontam para paginas Web e no podem ser varridos. E finalmente, links de javascript so pulados. O javascript uma linguagem de criao de scripts que podem ser adicionadas a paginas Web para adicionar funcionalidades interativas nas paginas porem no podem ser varridas por um crawler. A seguir vemos alguns formatos que os links podem assumir diferentes dos tradicionais, segundo HOLMES (2003): http://osborne.com/books/ArtofJava /books/ArtofJava Books/Artofjava 92

Um URL completamente qualificado o primeiro link, nele encontramos o protocolo utilizado, seguido do host do URL, e logo em seguida as sees do site. O segundo exemplo omite a parte do host da URL, verificamos que a segunda url possui o caractere / como caractere inicial que indica que essa URL absoluta, ou seja, Um url que inicia na raiz de um Web Site. O terceiro link o mesmo link que o primeiro omitindo a parte do host da url, porm sem o caractere de barra / no comeo da url, que significa que essa url relativa. O termo relativo significa que o endereo URL est relacionado ao URL em que o link est localizado. if (link.indexOf("://") == -1) { if (link.charAt(0) == '/') { link = "http://" + pageUrl.getHost() + link; } else { String file = pageUrl.getFile(); if (file.indexOf('/') == -1) { link = "http://" + pageUrl.getHost() + "/" + link; } else { String path = file.substring(0, file.lastIndexOf('/') + 1); link = "http://" + pageUrl.getHost() + path + link; } } } O cdigo acima transforma as URLs que so absolutos e relativos em links completamente qualificados. A primeira verificao feita comparando se o link completamente qualificado, caso no encontre o termo :// que significa que um url completo, passamos para segunda verificao onde o termo procurado agora / no primeiro caractere da url, pois cai no segundo caso que analisamos e uma url absoluta. Caso verdadeiro, a url concatenada com o protocolo + host + url absoluto. Se a url no for considerada uma url absoluta, prosseguimos verificando se a url relativa, para isso, tomamos o nome de arquivo do URL da pgina e verificamos se ele possui uma barra /, pois significa que ele est em uma hierarquia de diretrios. Como exemplo, temos: 93

Dir1/dir2/file.html Nesse caso, temos o url na hierarquia de diretrios, para colocarmos essa url completamente qualificada temos que recuperar a parte do caminho ou diretrio do nome do arquivo. Ou podemos ter somente: File.html Nesse caso, Verificamos que o arquivo est na raiz do Web site, ento s precisamos concatenar o http://, o host da pgina e o / com o url que j possumos. No cdigo seguinte, iremos remover as ancoras de pgina e o www removido dos links que j foram transformados em links completamente qualificados. Tanto os links que so s ancoras, ou links que possuem ancoras so removidos, pois no precisam ser varridos por no levarem para pginas novas. O www removido para que se tenha um denominador comum, pois muitos sites possuem duas URLs apontando para o mesmo site, para evitar que o crawler percorra o mesmo Web site. int index = link.indexOf('#'); if (index != -1) { link = link.substring(0, index); } link = removeWwwFromUrl(link); Verificamos se o url vlido atravs do mtodo verifyUrl,caso o link for invlido a varredura continua com o prximo url: URL verifiedLink = verifyUrl(link); if (verifiedLink == null) { continue; } Se o link for vlido, o cdigo a seguir verifica se o url o mesmo que definido no url inicial da varredura ou se o url j foi varrido. Se positivo, o url pulado para o prximo a ser varrido. if (limitHost&&!pageUrl.getHost().toLowerCase().equals(verifiedLink.getHost().toLowerCase())) { 94

continue; } if (crawledList.contains(link)) { continue; } Depois de ter passado por todos os filtros, o link adicionado lista de links, e depois que o loop while termina e todos os links vlidos foram adicionados lista de links, a lista retornada. // Add link to list. linkList.add(link); } return (linkList); }

4.4.13 O mtodo searchStringMatches()

Utilizamos esse mtodo para verificar se a string de pesquisa est presente ou no na pgina que efetuamos download durante a varredura. O mtodo determina se a string de pesquisa localizada no contedo da pgina, e comea verificando se determinamos se a pesquisa diferencia maisculas de minsculas. Caso a pesquisa no diferencie, ou seja, uma pesquisa Case Insensitive, todo o contedo da pgina transformado em minsculo. Depois dividimos a string de pesquisa em termos individuais utilizando a api de expresses regulares do Java. Utilizamos o mtodo esttico compile() do objeto Pattern para compilar um padro de expresso regular e dividir a string de pesquisa em termos individuais. Para determinar que um ou mais caracteres em branco (espaos em branco, nova linha, tabulaes) devem ser correspondidos utilizamos o padro [\\s]+. O mtodo split() do objeto Pattern compilado chamado com a string de pesquisa, que cria um array de string contendo os termos individuais de pesquisa. Depois iteramos em cada termo individual para verificar se o termo procurado se encontra na pagina de pesquisa. Utilizamos para a pesquisa dentro da varivel searchContents o mtodo indexOf() definido por String. Um valor de retono de -1 indica que o termo da pesquisa no foi localizado, ento false retornado, sendo que todos os termos 95

devem ser localizados para que haja uma correspondncia. Caso a pesquisa no fizer distino entre maisculas e minsculas, o termo de pesquisa transformado em letras minsculas, para que coincida com o valor atribudo a varivel SearchContents definida no inicio do mtodo. Se o loop for for concludo, o mtodo searchStringMatches() concluir retornando true, que indica que todos os termos de pesquisa corresponderam. private boolean searchStringMatches(String pageContents, String searchString, boolean caseSensitive) { String searchContents = pageContents; if (!caseSensitive) { searchContents = pageContents.toLowerCase(); } Pattern p = Pattern.compile("[\\s]+"); String[] terms = p.split(searchString); for (int i = 0; i < terms.length; i++) { if (caseSensitive) { if (searchContents.indexOf(terms[i]) == -1) { return false; } } else { if (searchContents.indexOf(terms[i].toLowerCase()) == -1) { return false; } } } return true; }

4.4.14 O mtodo crawl()

96

Efetuamos efetivamente a varredura das pginas Web pelo mtodo crawl(). Podemos utilizar vrias tcnicas para efetuar a varredura de Web Sites, a recurso um mtodo bastante utilizado, porm pode consumir muitos recursos de processamento, ento utilizamos a tcnica da fila. Para armazenar a lista de links a serem varridos inicializamos a lista toCrawList, ento adicionamos o url inicial na lista para iniciar a varredura. Enquanto a flag crawling no for desativada ou a quantidade de links for maior que zero, o programa fica no loop. Se a contagem mxima de links for especifica, ou seja, maxUrls diferente de -1, verifica se a quantidade de links percorridos foi atingida. Se verdadeiro, o programa sai do loop. while (crawling && toCrawlList.size() > 0) { if (maxUrls != -1) { if (crawledList.size() == maxUrls) { break; } } A flag crawling desativada quando o usurio clica no boto de Stop da interface, setando a varivel crawling como false e na prxima vez em que a expresso do loop while for avaliada, o loop ser encerrado porque a flag crawling false. Dentro do loop, o programa comea removendo da lista o url da parte inferior da lista To Crawl, pois a lista funciona como uma fila FIFO (first in, first out). A fila implementada utilizando um objeto LinkedHashSet, sendo assim, no h realmente o mtodo de remoo da url, pois a funcionalidade de remoo simulada, e com a chamada toCrawList.iterator().next() recuperamos o primeiro valor da parte inferior da lista. A chamada toCrawList.remove() recebe como argumento o URL e o retira da parte inferior da lista. Depois de recuperado o prximo elemento da lista to Crawl, utilizamos o mtodo verifyUrl() para converter o objeto string url para um objeto URL. Verificamos se o URL tem permisso de varredura atravs do mtodo isRobotAllowed(). Se a permisso no for concedida, ento o programa continua para a prxima execuo do loop while. 97

A seo stats atualizada depois de efetuarmos a recuperao e verificao da URL de varredura. updateStats(url, crawledList.size(), toCrawlList.size(), maxUrls); O url ento adicionado lista de j percorridos para que se houver alguma referncia para essa url ela no deve ser percorrida novamente. crawledList.add(url); feito o download da pgina passando como parmetro o objeto verifiedUrl do tipo URL atravs do mtodo downloadPage que retorna uma string contendo todo o contedo das pgina solicitada. String pageContents = downloadPage(verifiedUrl);

O cdigo a seguir executado se o download da pgina for bem-sucedido:

if (pageContents != null && pageContents.length() > 0) { ArrayList links = retrieveLinks(verifiedUrl, pageContents, crawledList, limitHost); toCrawlList.addAll(links); if (searchStringMatches(pageContents, searchString, caseSensitive)) { addMatch(url); } } updateStats(url, crawledList.size(), toCrawlList.size(), maxUrls); }

Caso a string pageContents tiver um contedo vlido, os links da pgina so recuperados atravs do mtodo retrieveLinks(), cada um dos links dessa pgina ento adicionado a lista To 98

Crawl. Em seguida, o mtodo searchStringMatches() verifica se a pgina contm a string procurada. Se a string for localizada, ento a pgina ser registrada na tabela de correspondncias atravs do mtodo addMatch(). Finalmente, atualizado os rtulos e estatsticas atravs do mtodo updateStats().

4.4.14 O mtodo Ordena()

Para efetuarmos a ordenao da lista de links encontrados utilizamos o mtodo Ordena(), recebendo como parmetro a palavra-chave e a palavra acessria. Alm da ordenao, o mtodo tambm atualiza o status da ordenao utilizando o progressbar. Cada link que est em uma linha na tabela de correspondncias percorrido e o contedo do link retornado utilizando o objeto conteudohtml da classe ConteudoHtml().O contedo atribuido uma variavel local strConteudo. Para verificar se o contedo da pgina de cada link possui os ndices ipp e ipo, utilizamos o mtodo getIndOco() e getIndPos() da classe busca, que recebe na primeira instncia recebe a palavra-chave e o contedo do HTML e na segunda chamada classe busca recebe a palavra acessria e o contedo HTML. Depois de retornado os ndices Ipp, Ipo, Iso, Isp. Somente se o Ipp e Ipo for maior que zero, que calculamos o ndice fuzzy atravs da classe fuzzy. Aps o clculo, utilizamos a Lista LinkRank para armazenar cada url com seu respectivo ndice. Depois de percorrido todos os links e calculado seus ndices, a tabela de correspondncias limpa e a ordenao da lista ListRank feita atravs do mtodo sort do Collections. Depois da lista ordenada cada link adicionado na tabela de correspondncias da maior relevncia para a menor relevncia.

public void ordena(String searchString, String acessoriaString) throws IOException { String strConteudo; double Ipp, Ipo, Isp, Iso, Ind; busca bsc; 99

fuzzy logfuzzy; ArrayList ListRank = new ArrayList(); int i; System.out.println("Comea aqui a ordenao"); progressBar.setMaximum(table.getRowCount()); for (i = 0; i < table.getRowCount() && ordenando; i++) { Conteudohtml conteudohtml = new Conteudohtml(); strConteudo = conteudohtml.getUrlContentsAsText((String) table.getValueAt(i, 0)); bsc = new busca(searchString.toString(), strConteudo, 1); Ipo = bsc.getIndOco(); Ipp = bsc.getIndPos(); bsc = new busca(acessoriaString.toString(), strConteudo, 1); Iso = bsc.getIndOco(); Isp = bsc.getIndPos(); //Se o ipp for maior que 0 para no entrar no rank se for 0 if (Ipp > 0 && Isp > 0) { logfuzzy = new fuzzy(Ipp, Ipo, Isp, Iso); Ind = logfuzzy.getInd(); ListRank.add(new RankLinks((String) table.getValueAt(i, 0), Ind)); } progressBar.setValue(i); } //Limpa a tabela com a lista de url's table.setModel(new DefaultTableModel(new Object[][]{}, new String[]{"URL"}) { @Override 100

public boolean isCellEditable(int row, int column) { return false; } }); //ordena a lista de url's Collections.sort(ListRank, new Comparator() { public int compare(Object o1, Object o2) { RankLinks p1 = (RankLinks) o1; RankLinks p2 = (RankLinks) o2; return p1.getIndice() < p2.getIndice() ? -1 : (p1.getIndice() > p2.getIndice() ? +1 : 0); } }); Collections.reverse(ListRank); //Recoloca na tabela a lista de url's ordenada for (int j = 0; j < ListRank.size(); j++) { RankLinks objrank = (RankLinks) ListRank.get(j); addMatch(objrank.getLink()); System.out.println(j + ") " + objrank.getLink() + " - Indice: " + objrank.getIndice()); } progressBar.setValue(i); System.out.println("Termina aqui a ordenao"); }

101

CAPTULO 5 CONCLUSES

Esta monografia apresentou o funcionamento da ferramenta crawler e a aplicao da Lgica Fuzzy para classificao da relevncia dos contedos pesquisados. Descrevemos o ambiente da internet composta por tecnologias heterogneas e tcnicas para extrao de conhecimento na Web. O sistema foi desenvolvido a partir de um crawler j existente que foi adaptado para o funcionamento em dois sites especficos: o site do g1 e o site da Folha. Como os dados desses sites no so estticos, precisamos identificar nos sites as urls que efetuam o post para retornar os dados dinamicamente. Para o funcionamento da Lgica Fuzzy, consideramos dois parmetros de entrada, que a quantidade de vezes que a palavra-chave e acessria foram encontradas na pgina e a posio das palavras no texto. Com os testes efetuados, os resultados obtidos foram satisfatrios, o sistema capaz de localizar pginas que contenham o contedo desejado, e que possvel criar sistemas utilizando tcnicas de minerao de textos nas pginas Web, mesmo que essas pginas no estejam indexadas pelos motores de busca, ou seja, podemos efetuar pesquisas de contedo em qualquer site da Web adaptando com as particularidades de cada site. A ferramenta mostrou que possvel varrer mais de um site, porm muito complexo criar uma ferramenta que efetue a varredura em todos os sites, pois cada um possui uma estrutura especfica e por enquanto no existe um padro fixo para todos os sites. A ferramenta mostrou tambm que podemos efetuar a pesquisa em sites que as informaes so construdas dinamicamente. Em relao relevncia dos contedos, verificamos que os parmetros utilizados, que so a quantidade de palavras e a posio mdia das palavras, foram teis, porm insuficientes, devido a uma quantidade enorme de variveis relevantes a se considerar na classificao de texto. Por outro lado, verificamos que podemos criar ferramentas de pesquisa para automatizar tarefas e minimizar o esforo da busca de informaes. Com isso, podemos analisar documentos identificando informaes como preos em sites, contedos dos sites de notcias, ou seja, podemos monitorar o ambiente da internet criando rotinas que rodem automaticamente para ter a informao na hora certa que permitem identificar alteraes no ambiente e tomar decises importantes para qualquer negcio. Logo, conclumos que o presente trabalho atingiu seus objetivos. Para trabalhos futuros, podemos otimizar o funcionamento do crawler, utilizando threads 102

adicionais e colocar cada thread para varrer um site. Podemos tambm utilizar outros mtodos de classificao de textos utilizando ontologias ou aplicar a ferramenta para outros sites especficos. Algumas tcnicas podem ser encontradas em BASTOS (2006), onde descrita cada tcnica de classificao de documentos. REFERNCIAS BIBLIOGRFICAS

ARAUJO,

J.M,

2007, Processo

de

Descoberta

de

Conhecimento

em

Dados

No-

Estruturados:Estudo de Caso para a Inteligncia Competitiva, Dissertao apresentada ao Programa de Ps-Graduao Strictu Informao da Senso em Gesto do Conhecimento e da Tecnologia da Catlica de Braslia,disponvel em Universidade

<http://www.bdtd.ucb.br/tede/tde_busca/arquivo.php?codArquivo=762>, acessado em 18/08/2010. BASTOS, V.M.,2006, AMBIENTE DE DESCOBERTA DE CONHECIMENTO NA WEB PARA A LNGUA PORTUGUESA, TESE SUBMETIDA AO CORPO DOCENTE DA COORDENAO DOS PROGRAMAS DE PS-GRADUAO DE ENGENHARIA DA UNIVERSIDADE FEDERAL DO RIO DE JANEIRO COMO PARTE DOS REQUISITOS NECESSRIOS PARA A OBTENO DO GRAU DE DOUTOR EM CINCIAS EM ENGENHARIA CIVIL, disponvel em <http://wwwp.coc.ufrj.br/teses/doutorado/inter/2006/Teses/BASTOS_VM_06_t_D_int.pdf>, acessado em 18/08/2010. BERGMAN, M.K.,2000, The Deep Web:Surfacing Hidden Value,disponvel em

<http://www.brightplanet.com/images/uploads/12676518751-DeepWebWhitePaper_20091015.pdf>, acessado em 18/08/2010. BERNARDO FILHO, O., PEDROSA, ALOYSIO C. P., LEO, JORGE L. S.,2001, Uma ferramenta para verificao de sistemas distribudos com lgica nebulosa: Implementao e experincias, Artigo do Departamento de Engenharia de Sistemas e Computao / FEN-UERJ. CAZELLA, S.C,2001, Minerao de dados na WEB e agentes, Trabalho Individual II T.I. PPGC UFRGS, disponvel em 103

<http://www.inf.unisinos.br/~CAZELLA/papers/TI2.pdf>, acessado em 18/08/2010. HOLMES, J e SCHILDT,H., 2003,A arte do Java, Traduo de Edson Furmankiewcz. Rio de Janeiro: Elsevier Editora Ltda. JARGAS,A. MARINHO, Conhecendo as Expresses Regulares,disponvel em

http://aurelio.net/er/apostila-conhecendo-regex.pdf a acessado 23/09/2010. NETO, O. M., 2007, Entendendo e Dominando Java. 2 edio. So Paulo : Digerati Books. OLIVEIRA JR., H.A., 1999, Lgica Difusa : Aspectos Prticos e Aplicaes. Rio de Janeiro : Ed. Intercincia,. 192p. SANDRI, S.; CORREA, 1999, C. Lgica Nebulosa. Anais da V Escola de Redes Neurais. So Jos dos Campos, , pp 073-090. RAMSAGAR, R. Java Primer. Disponivel em: <http://tecnoesis.wordpress.com/2009/08/28/javaprimer>. Acesso em: 10 ago. 2010 RAPELLO, C. N., 2009, Testes de Sistemas de Informaes Geogrficas com Lgica Nebulosa, Monografia de Concluso do Curso de Mestrado em Engenharia da Computao. rea de concentrao: Geomtica / Universidade do Estado do Rio de Janeiro. RESENDE, S. OLIVEIRA, 2005, Sistemas inteligentes : fundamentos e aplicaes. Barueri, SP : Manole. VIEGAS, A.C. de S., 2006, Introduo ao cdigo HTML 4, Traduo da recomendao HTML 4.01 Specification do W3C, cuja verso original poder ser encontrada em:http://www.w3.org/TR/html401/, disponvel em: http://desenaVIEGAS.com/intro.html#h-2.2.1, acessado em 18/08/2010.

104

VIZEU, DANIEL MAGALHES L., FERNANDES, PABLO DE BARROS, 2005, Sistema de Inferncia Nebuloso On Line, Monografia de Concluso do Curso de Cincias da Computao / Centro Universitrio da Cidade do Rio de Janeiro. ZADEH, L.A. , 1965,Fuzzy Sets, Information and Control. No.8, pp 338-353. DOCSTOC, NetBeans, disponvel em: <http://www.docstoc.com/docs/9033622/Java-Netbeans>. Acesso em: 10ago. 2010

105

APNDICE A

Neste apndice, ser apresentado o manual do usurio, objetivando o uso da ferramenta para qualquer usurio.

Figura 35: Tela do software A interface para o usurio uma simples tela onde pode entrar com os valores de pesquisa. uma interface simples e fcil de ser utilizada. O primeiro campo que visualizamos no topo do formulrio o N Mximo de URLs para Rastejar, onde definimos os valores mximos de URLs que podem ser 106

varridas. Os valores aceitos so: 50, 100 ou 1000, mas lembre-se que quanto mais links para varrer mais tempo durar a pesquisa. Podemos tambm marcar a opo Limitar rastejamento para os sites da URL inicial, ou seja, a varredura ser feita somente para os sites principais definidos no sistema, no varrendo outros sites. No campo Palavra Chave, colocamos a palavra principal que estamos procurando e, no campo Palavra acessria, colocamos a palavra que tem alguma relao semntica com a palavra principal. Selecione a opo Case Sensitive, caso queira que a pesquisa diferencie maiscula de minsculas. No campo Setando arquivo de log, podemos definir um arquivo de log que ser gravado com o nome de arquivo definido. O diretrio padro o diretrio que a aplicao est sendo executada, porm podemos definir outros caminhos, informando no campo Setando arquivo de log. Aps ter inserido todos os valores de pesquisa, clique no boto Busca. Voc notar que os controles de pesquisa e o boto ordena ficaram desativados durante a pesquisa, e o nico boto que poder ser clicado o boto de Parar. Clicar no boto Parar far o crawler parar a varredura aps concluir a varredura da url que est senda varrida. A tela a seguir, mostra o crawler durante a execuo, note que as estatsticas de varredura vo sendo atualizadas. Verifique que a url atual que est sendo varrida exibida no rtulo rastejando. O sistema tambm mostra a quantidade de URLs que foram varridas. E as URLs a serem percorridas. A tela principal tambm exibe o numero de buscas de URLs localizadas, a barra de progresso indicando a porcentagem de links que foram percorridos e na tabela de correspondncias temos todos os links que foram encontrados.

107

. Figura 36: Tela do software ao executar a busca.

Na tela a seguir temos a concluso da varredura, verifique que os controles de pesquisa agora esto todos habilitados podendo efetuar outras pesquisas ou refazer novamente a pesquisa anterior. No rtulo Rastejando exibida a mensagem de concluso da varredura com o texto Executado. A quantidade de URLs que foram varridas 50, pois limitamos nossa varredura ao mximo de 50 URLs. No total foram encontrados 1207 links, porm nem todos foram varridos por causa da limitao que impomos. O total de links que contm a string procurada foi de 40. Agora podemos ordenar essa lista a partir do boto Ordena, que classifica a relevncia dos links utilizando Lgica Fuzzy.

108

Figura 37: Tela do software ao completar busca

Ao clicar no boto Ordena, verifique que os controles foram todos desabilitados inclusive o boto de Busca. O boto de Ordena se transformou no boto de Parar caso o usurio queira parar a ordenao. Ao final da Ordenao, os links sero ordenados pela ordem de relevncia e os controles sero novamente habilitados.

109

Figura 38: Tela do software executando a ordenao

110

APNDICE B

Neste Apndice, ser apresentado a seo de testes realizados onde testificaremos a funcionalidade deste software, objetivo de trabalho deste projeto final. importante salientar que todos os resultados estaro dentro de dois veculos de comunicao principais: O g1, com sua URL www.g1.com.br, onde nela se encontram notcias referentes ao veculo Globo.com, jornal O Globo, e outros veculos da editora Globo. A folha online, com sua URL www.folhaonline.com.br, onde nela se encontram principalmente notcias referentes ao jornal Folha de So Paulo. Para executarmos a pesquisa precisamos primeiramente do software rodando, como na tela abaixo:

111

Figura 39: Tela do software

Agora, basta colocar as palavras chave e palavras acessrias, para iniciarmos os testes. Os testes demonstrados a seguir, seguem na configurao default, ou seja: N mximo de URLs para rastejar = 50; Limitar o rastejamento para sites da URL inicial = Desativado; Case Sensitive = Desativado. Teste Nmero 1: Palavra-Chave = Bateria Palavra-Acessria = Msica Resultado da busca = 12 ocorrncias : 1http://busca2.globo.com/Busca/globo/? query=Bateria+Musica&ordenacao=&offset=1&xargs=&formato=formatoconteudo:texto&r equisitor=globo&aba=texto&filtro=&on=true&formatos=2630,2569,15,44,2,0,0,0,0,0,0 2http://search.folha.com.br/search?q=Bateria%20Musica 3http://g1.globo.com/pop-arte/noticia/2010/08/new-model-army-anuncia-shows-em-saopaulo.html 4http://oglobo.globo.com/blogs/overdubbing/posts/2010/08/09/casa-da-musica-emportugal-tecnologia-musical-para-todos-314668.asp 5http://oglobo.globo.com/blogs/jamari/posts/2010/08/09/pato-fu-fala-serio-em-musicade-brinquedo-314750.asp 6http://oglobo.globo.com/blogs/overdubbing/posts/2010/08/18/ouca-overdrive-do112

mestre-da-guitarra-joe-satriani-317018.asp 7http://g1.globo.com/concursos-e-emprego/noticia/2010/08/prefeitura-de-guarulhos-spabre-concurso-para-professor-de-musica.html 8http://oglobo.globo.com/megazine/mat/2010/08/10/dez-dos-melhores-momentos-dofestival-lollapalooza-que-aconteceu-no-ultimo-fim-de-semana-nos-eua-arcade-fire-saiconsagrado-917363332.asp 9http://oglobo.globo.com/ciencia/mat/2010/08/09/menino-com-traqueia-ultrafina-temalta-apos-transplante-pioneiro-que-combinou-celulas-tronco-do-proprio-garoto-paradiminuir-rejeicao-917350314.asp 10http://ego.globo.com/Gente/Noticias/0,,MUL1592405-9798,00OUCA+AQUI+A+PRIMEIRA+MUSICA+DE+TRABALHO+DE+RENATA+SANTOS+B ABOU.html 11http://oglobo.globo.com/blogs/madrilenha/posts/2010/08/14/carnaval-em-agosto316221.asp 12http://oglobo.globo.com/rio/ancelmo/rafaela/posts/2010/08/16/curtas-de-primeira316528.asp Resultado da ordenao = 11 ocorrncias : 1http://g1.globo.com/concursos-e-emprego/noticia/2010/08/prefeitura-de-guarulhos-spabre-concurso-para-professor-de-musica.html - ndice gerado pelo SIF = 34,6016 2http://ego.globo.com/Gente/Noticias/0,,MUL1592405-9798,00OUCA+AQUI+A+PRIMEIRA+MUSICA+DE+TRABALHO+DE+RENATA+SANTOS+B ABOU.html - ndice gerado pelo SIF = 31,9883 113

3http://busca2.globo.com/Busca/globo/? query=Bateria+Musica&ordenacao=&offset=1&xargs=&formato=formatoconteudo:texto&r equisitor=globo&aba=texto&filtro=&on=true&formatos=2630,2569,15,44,2,0,0,0,0,0,0 ndice gerado pelo SIF = 30,9770 4http://search.folha.com.br/search?q=Bateria%20Musica - ndice gerado pelo SIF = 30,0405 5http://g1.globo.com/pop-arte/noticia/2010/08/new-model-army-anuncia-shows-em-saopaulo.html - ndice gerado pelo SIF = 29,8875 6http://oglobo.globo.com/ciencia/mat/2010/08/09/menino-com-traqueia-ultrafina-temalta-apos-transplante-pioneiro-que-combinou-celulas-tronco-do-proprio-garoto-paradiminuir-rejeicao-917350314.asp - ndice gerado pelo SIF = 29,5923 7http://oglobo.globo.com/blogs/jamari/posts/2010/08/09/pato-fu-fala-serio-em-musicade-brinquedo-314750.asp - ndice gerado pelo SIF = 26,9275 8http://oglobo.globo.com/blogs/overdubbing/posts/2010/08/09/casa-da-musica-emportugal-tecnologia-musical-para-todos-314668.asp - ndice gerado pelo SIF = 23,8315 9http://oglobo.globo.com/blogs/overdubbing/posts/2010/08/18/ouca-overdrive-domestre-da-guitarra-joe-satriani-317018.asp - ndice gerado pelo SIF = 23,5302 10http://oglobo.globo.com/blogs/madrilenha/posts/2010/08/14/carnaval-em-agosto316221.asp - ndice gerado pelo SIF = 23,2819 11http://oglobo.globo.com/megazine/mat/2010/08/10/dez-dos-melhores-momentos-dofestival-lollapalooza-que-aconteceu-no-ultimo-fim-de-semana-nos-eua-arcade-fire-saiconsagrado-917363332.asp - ndice gerado pelo SIF = 22,9321 114 -

12http://oglobo.globo.com/rio/ancelmo/rafaela/posts/2010/08/16/curtas-de-primeira316528.asp - ndice gerado pelo SIF = 22,8868

Teste Nmero 2: Palavra-Chave = Bateria Palavra-Acessria = Automveis Resultado da busca = 12 ocorrncias : 1http://busca2.globo.com/Busca/globo/? query=Bateria+Automovel&ordenacao=&offset=1&xargs=&formato=formatoconteudo:text o&requisitor=globo&aba=texto&filtro=&on=true&formatos=2630,2569,15,44,2,0,0,0,0,0,0 2http://search.folha.com.br/search?q=Bateria%20Automovel 3http://g1.globo.com/jornaldaglobo/0,,MUL1555637-16021,00SALAO+DE+AUTOMOVEL+DE+NOVA+YORK+APOSTA+EM+CARROS+HIBRIDOS .html 4http://g1.globo.com/Noticias/Carros/0,,MUL1080572-9658,00SALAO+DO+AUTOMOVEL+DE+NY+APOSTA+NO+CARRO+ELETRICO.html 5http://g1.globo.com/Noticias/Carros/0,,MUL844819-9658,00SALAO+DO+AUTOMOVEL+CONTA+A+HISTORIA+DO+CARRO+NO+BRASIL.html 6http://oglobo.globo.com/economia/carroetc/mat/2010/08/03/mitsubishi-miev-o-unicocarro-eletrico-hoje-feito-por-um-grande-fabricante-917310408.asp

115

7http://g1.globo.com/Noticias/Carros/0,,MUL1420580-9658,00TIRE+DUVIDAS+SOBRE+OS+CUIDADOS+BASICOS+COM+O+AUTOMOVEL.html 8http://g1.globo.com/Noticias/Carros/0,,MUL1061667-9658,00SAIBA+O+QUE+FAZER+QUANDO+A+BATERIA+DO+CARRO+ARRIAR.html 9http://oglobo.globo.com/economia/mat/2009/12/11/alcool-volta-puxar-custo-doautomovel-em-novembro-915159251.asp 10http://g1.globo.com/Noticias/Economia_Negocios/0,,MUL1412320-9356,00ALCOOL+VOLTA+A+PUXAR+CUSTO+DO+AUTOMOVEL+EM+NOVEMBRO.html 11http://oglobo.globo.com/mundo/mat/2010/07/22/mecanico-leva-susto-ao-encontrarpiton-em-carro-apos-ouvir-chiado-no-motor-917211428.asp 12http://g1.globo.com/jornalhoje/0,,MUL844752-16022,00SALAO+DO+AUTOMOVEL+CONTA+A+HISTORIA+DO+CARRO+NO+BRASIL.html

Resultado da ordenao = 10 ocorrncias : 1http://oglobo.globo.com/mundo/mat/2010/07/22/mecanico-leva-susto-ao-encontrarpiton-em-carro-apos-ouvir-chiado-no-motor-917211428.asp 33,2479 2http://oglobo.globo.com/economia/carroetc/mat/2010/08/03/mitsubishi-miev-o-unicocarro-eletrico-hoje-feito-por-um-grande-fabricante-917310408.asp - ndice gerado pelo SIF = 31,9329 3http://g1.globo.com/Noticias/Economia_Negocios/0,,MUL1412320-9356,00116 - ndice gerado pelo SIF =

ALCOOL+VOLTA+A+PUXAR+CUSTO+DO+AUTOMOVEL+EM+NOVEMBRO.html ndice gerado pelo SIF = 31,6602 4http://g1.globo.com/Noticias/Carros/0,,MUL1420580-9658,00TIRE+DUVIDAS+SOBRE+OS+CUIDADOS+BASICOS+COM+O+AUTOMOVEL.html - ndice gerado pelo SIF = 31,5270 5http://oglobo.globo.com/economia/mat/2009/12/11/alcool-volta-puxar-custo-doautomovel-em-novembro-915159251.asp - ndice gerado pelo SIF = 31,5002 6http://g1.globo.com/Noticias/Carros/0,,MUL1061667-9658,00SAIBA+O+QUE+FAZER+QUANDO+A+BATERIA+DO+CARRO+ARRIAR.html ndice gerado pelo SIF = 31,4345 7http://g1.globo.com/Noticias/Carros/0,,MUL1080572-9658,00SALAO+DO+AUTOMOVEL+DE+NY+APOSTA+NO+CARRO+ELETRICO.html ndice gerado pelo SIF = 30,3480 8http://g1.globo.com/jornalhoje/0,,MUL844752-16022,00SALAO+DO+AUTOMOVEL+CONTA+A+HISTORIA+DO+CARRO+NO+BRASIL.html - ndice gerado pelo SIF = 27,7774 9http://g1.globo.com/jornaldaglobo/0,,MUL1555637-16021,00SALAO+DE+AUTOMOVEL+DE+NOVA+YORK+APOSTA+EM+CARROS+HIBRIDOS .html - ndice gerado pelo SIF = 27,0002 10http://g1.globo.com/Noticias/Carros/0,,MUL844819-9658,00SALAO+DO+AUTOMOVEL+CONTA+A+HISTORIA+DO+CARRO+NO+BRASIL.html - ndice gerado pelo SIF = 26,9232 Observa-se na lista ordenada dos resultados, que h um ndice, este ndice o resultado 117 -

obtido pela inferncia Fuzzy no projeto, e s possvel ver no modo texto, devido ao fato de ser mostrado atravs de um System.out.println. A segunda observao, que no teste nmero 2 houve na busca 12 ocorrncias e na ordenao apenas 10 ocorrncias. Isto se deve ao fato de que na busca, o sistema leva e considerao apenas a palavra-chave, enquanto que na ordenao, o sistema leva em conta tanto a palavra-chave quanto a palavra acessria.

118

You might also like