“RetriBlog: Um Framework Centrado na Arquitetura para
Criação de Blog Crawlers”
Por
Rafael Ferreira Leite de Mello
Dissertação de Mestrado
Universidade Federal de Pernambuco
[email protected]
www.cin.ufpe.br/~posgraduacao
RECIFE, Dezembro/2011
Universidade Federal de Pernambuco
Centro de Informática
Pós-graduação em Ciência da Computação
Rafael Ferreira Leite de Mello
“RetriBlog: Um Framework Centrado na Arquitetura
para Criação de Blog Crawlers”
Trabalho apresentado ao Programa de Pós-graduação em
Ciência da Computação do Centro de Informática da Universidade Federal de Pernambuco como requisito parcial para
obtenção do grau de Mestre em Ciência da Computação.
Orientador: Frederico Luiz Gonçalves de Freitas
Co-Orientador: Patrick Henrique da Silva Brito
RECIFE, Dezembro/2011
Agradecimentos
Gostaria de agradecer e dedicar essa dissertação à minha família que sempre incentivou os
meus estudos mesmo com a distância. Aos professores Fred Freitas e Patrick Brito, que
foram bons orientadores mesmo estando longe em alguns momentos. À Rinaldo Lima
que colaborou muito com orientação, pesquisa e escrita de artigos. À Dimas e Hilário
que participaram de discussões e implementações. Por fim, a todos os meus Amigos que
me ajudam a buscar o verdadeiro Sonho.
iii
Resumo
Com o grande crescimento da Web, foram criados inúmeros mecanismos para interação
entre os usuários. Tal fenômeno ficou conhecido como Web 2.0, onde o conhecimento
é gerado através da interação dos usuários, fazendo uso da inteligência coletiva. Sob
uma perspectiva da Web 2.0, diversas ferramentas colaborativas se tornaram populares,
dentre elas podemos destacar: os blogs. Atualmente, há mais de 133 milhões de blogs
e a cada dia são criados centenas deles. Além disto, a atividade nos blogs dobra a cada
duzentos dias, sendo este fenômeno social conhecido como Blogosfera. A partir do
conhecimento gerado na Blogosfera, as potencialidades de aplicações e decisões que
podem ser tomadas através destas informações tornam-se inúmeras. Entretanto, torna-se
impraticável utilizar as informações disponíveis na Blogosfera de forma manual. Com
isso, mostra-se fundamental utilizar abordagens computacionais para auxiliar nessa tarefa.
Uma primeira tarefa a ser realizada é encontrar blogs relevantes em meio a essa
grande quantidade de blogs. Para lidar com esse problema a área de recuperação de
informação(RI) se destaca em relação às demais, pois a mesma se preocupa em identificar
textos relevantes para uma determinada busca dentro de uma grande coleção de textos. É
importante destacar que para facilitar o acesso aos documentos, existe necessidade de
indexar e armazenar os textos dos blogs. Tal mecanismo é realizado por uma entidade de
software conhecido como web crawlers. Especificamente no contexto de blogs, os web
crawlers são chamados de blog crawlers.
Diante desse cenário, este trabalho propõe um framework centrado na arquitetura
para construção de blog crawlers. Por um lado, utilizar um framework centrado na
arquitetura provê principalmente os seguintes aspectos: i) criação de uma aplicação
genérica e facilmente configurável; ii) alto grau de reuso dos componentes; iii) facilidade
na evolução. O blog crawler criado possui as seguintes características: i) extrai o conteúdo
principal do blog, eliminando propagandas e menus. Isto é feito utilizando algoritmos de
extração de conteúdo disponibilizados no sistema; ii) o sistema dispõe de algoritmos de
pré-processamento para melhorar a precisão e cobertura; iii) serviços auxiliares também
são disponibilizados, como por exemplo serviço para recomendação de tag.
Para validar a proposta foram criados três estudos de caso. Além disto, os principais
algoritmos disponibilizados foram testados e avaliados. Por fim, é apresentado uma
análise qualitativa, mostrando as vantagens de se usar a engenharia de software, e
quantitativa, para validar o uso de inteligência artificial. Os resultados obtidos mostram a
eficiência dos principais algoritmos propostos.
iv
Palavras-chave: Recuperação de informação; Rastreadores de Blogs; Arcabouço
v
Abstract
With the huge growth of the World Wide Web, several mechanisms for user interaction
were created. This phenomenon became known as Web 2.0, in which knowledge is
generated through user interaction, making use of the collective intelligence. From the
perspective of the Web 2.0, many collaboration tools have become popular. In this M.Sc.
dissertation, the importance of blogs is highlight. Currently, there are over 133 million
blogs and hundreds of them are created every day. Moreover, the activity in blogs doubles
every two hundred days; such phenomenon is known as the Blogosphere. From the
knowledge generated in the blogosphere, the potential applications and decisions can be
taken through this information become numerous. However, it is impracticable to use
the information available in the Blogosphere manually. Therewith, it is crucial to use
computational approaches to assist in this task.
The first task is to find relevant blogs in blogosphere. In order to deal with this
problem the information retrieval (IR) area stands forward in relation to others, because it
is concerned with identifing relevant text to a specific query in a large collections of texts.
To facilitate the access to documents, it is necessary to index and store the text of blogs.
This mechanism is performed by a software entity known as web crawlers. Specifically
in the context of blogs, web crawlers are called blog crawlers.
In this context, this M.Sc. dissertation proposes an architecture-centered framework
for building blog crawlers. This work uses aspects from software engineering and artificial
intelligence to solve the afore mentioned problem. On the one hand, an architecturecentered framework provides the following aspects: i) creation of a generic and easily
configurable application, ii) high degree of components reuse, and iii) ease of system
evolution. The blog crawler created has the following characteristics: i) extracts the main
content of the blog, eliminating advertisements and menus. This is done using content
extraction algorithms available in the system, ii) the system has pre-processing algorithms
to improve precision and recall, iii) Auxiliary services are also available, such as tag
recommendation service.
Three case studies were created in order to validate the proposal. The main algorithms available were tested and evaluated. Finally, a qualitative assessment is presented,
showing the advantages of using software engineering, and quantitative, to validate the
use of artificial intelligence. The results show the efficiency of the proposed algorithms.
Keywords: Information Retrieval; Blogs Crawlers; Framework
vi
Sumário
Lista de Figuras
viii
Lista de Tabelas
ix
1
Introdução
1.1 Objetivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.2 Organização do texto . . . . . . . . . . . . . . . . . . . . . . . . . . .
1
4
5
2
Embasamento Teórico
2.1 Visão Geral da Blogosfera . . . . . . . . . . . . . .
2.1.1 Quem são os blogueiros? . . . . . . . . . . .
2.1.2 Quais os motivos para escrever um blog? . .
2.2 Recuperação de Informação . . . . . . . . . . . . .
2.3 Web Crawler . . . . . . . . . . . . . . . . . . . . .
2.3.1 Fluxo de atividades . . . . . . . . . . . . . .
2.3.2 Arquitetura . . . . . . . . . . . . . . . . . .
2.3.3 Crawlers sociais . . . . . . . . . . . . . . .
2.4 Classificação . . . . . . . . . . . . . . . . . . . . .
2.5 Projeto de Software com Reuso . . . . . . . . . . . .
2.5.1 Framework . . . . . . . . . . . . . . . . . .
Framework versus Bibliotecas de Classes . .
Framework versus Padrões de Projeto . . . .
Modelo de Características . . . . . . . . . .
2.5.2 Desenvolvimento Baseado em Componentes
Metodologia COSMOS* . . . . . . . . . . .
2.5.3 Arquitetura de Software . . . . . . . . . . .
2.5.4 Desenvolvimento Centrado na Arquitetura . .
3
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
RetriBlog: Um Framework Centrado na Arquitetura para Criação de Blog
Crawlers
3.1 Visão Geral do Sistema . . . . . . . . . . . . . . . . . . . . . . . . . .
3.2 Projeto Arquitetural . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.3 Especificação . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.4 Serviços Gerais . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6
6
7
8
9
11
12
13
13
14
16
17
21
21
21
22
23
25
27
28
28
30
33
34
vii
3.5
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
36
36
37
38
39
40
42
42
44
45
45
45
46
46
46
46
46
Estudos de Caso
4.1 Estudo de Caso 1: Sistema Baseados em Agentes para Recuperar Blogs
da Tecnhorati . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.1.1 Configuração dos Agentes . . . . . . . . . . . . . . . . . . . .
4.1.2 Configuração do Framework . . . . . . . . . . . . . . . . . . .
4.1.3 Execução da Aplicação . . . . . . . . . . . . . . . . . . . . . .
4.2 Estudo de Caso 2: Sistema de Recomendação de Blogs . . . . . . . . .
4.2.1 Configuração do Framework . . . . . . . . . . . . . . . . . . .
4.2.2 Criação do Sistema de Recomendação . . . . . . . . . . . . . .
4.2.3 Execução da aplicação . . . . . . . . . . . . . . . . . . . . . .
4.3 Estudo de Caso 3: Rastreador de Notícias para Clipagem . . . . . . . .
4.3.1 Configuração do Arcabouço . . . . . . . . . . . . . . . . . . .
4.4 Discussão Sobre os Estudos de Caso . . . . . . . . . . . . . . . . . . .
47
47
47
48
51
52
52
55
56
58
59
61
Experimentos e Resultados Preliminares
5.1 Avaliação: Extração de Conteúdo . . . . . . . . . . . . . . . . . . . . .
5.2 Avaliação: Classificação . . . . . . . . . . . . . . . . . . . . . . . . .
5.3 Avaliação: Recomendação de Tags . . . . . . . . . . . . . . . . . . . .
63
63
66
68
3.6
3.7
3.8
3.9
3.10
3.11
3.12
3.13
3.14
3.15
4
5
Serviços de Aplicação . . . . . . . . . . . . .
3.5.1 Coletor de URL . . . . . . . . . . . .
3.5.2 Extração de Conteúdo . . . . . . . .
3.5.3 Pré-Processamento . . . . . . . . . .
3.5.4 Classificação . . . . . . . . . . . . .
3.5.5 Recomendação de tags . . . . . . . .
3.5.6 Indexação . . . . . . . . . . . . . . .
Ferramentas e Persistência . . . . . . . . . .
Implementação . . . . . . . . . . . . . . . .
Como Criar uma Aplicação com o RetriBlog .
1º Passo . . . . . . . . . . . . . . . . . . . .
2º Passo . . . . . . . . . . . . . . . . . . . .
3º Passo . . . . . . . . . . . . . . . . . . . .
4º Passo . . . . . . . . . . . . . . . . . . . .
5º Passo . . . . . . . . . . . . . . . . . . . .
6º Passo . . . . . . . . . . . . . . . . . . . .
7º Passo . . . . . . . . . . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
viii
5.4
6
7
Avaliação: COSMOS* . . . . . . . . . . . . . . . . . . . . . . . . . .
Trabalhos Relacionados
6.1 COSMOS* . . . . . . . . . . . . . . . . . .
6.2 Serviços de Recomendação de Tags . . . . .
6.3 Serviços de Classificação . . . . . . . . . . .
6.4 Sistema para Recuperar Informações de Blogs
72
.
.
.
.
75
75
77
78
79
Conclusão
7.1 Trabalhos Futuros . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7.2 Palavras Finais . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7.3 Publicações relacionadas ao RetriBlog . . . . . . . . . . . . . . . . . .
83
83
84
84
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
ix
Lista de Figuras
2.1
2.2
2.3
2.4
Assuntos blogados(Adaptado de (Technorati, 2009)) . . . . . . . . . . .
Fluxo de um Processo Básico de RI . . . . . . . . . . . . . . . . . . .
Fluxo básico de um crawler (Adaptado de (Pant et al., 2004)) . . . . . .
Arquitetura básica de um crawler (Adaptado de (Shkapenyuk and Suel,
2002)) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Modelo de Características (Adaptado de (Ana Elisa Lobo and Rubira,
2007)) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Exemplo de Componente COSMOS* (Gayard et al., 2008) . . . . . . .
Exemplo configuração arquitetural em UML ( Adaptada de (Sommerville,
2001)) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
9
9
12
3.1
3.2
3.3
3.4
3.5
3.6
3.7
3.8
Visão Geral do Framework . . . . . . . . . . . . . . . . . .
Visão Geral da Arquitetura do RetriBlog . . . . . . . . . . .
Modelo de Características de RetriBlog . . . . . . . . . . .
Arquitetura dos Compoentes do Framework . . . . . . . . .
Arquitetura dos Compoentes do Framework - Detalahada . .
Fluxo Básico do Crawler . . . . . . . . . . . . . . . . . . .
Página relacionada da Technorati relacionada a tag educação
Exemplo de Componente - Similaridade . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
29
30
31
34
35
36
37
45
4.1
4.2
4.3
4.4
4.5
4.6
4.7
4.8
4.9
4.10
Arquitetura dos Agentes . . . . . . . . . . . .
Diagrama de Componentes - Estudo de Caso 1 .
Tela do Jade . . . . . . . . . . . . . . . . . . .
Diagrama de Componentes - Estudo de Caso 2 .
Diagrama de Atividades . . . . . . . . . . . . .
Postagem do Professor . . . . . . . . . . . . .
Postagem dos Alunos . . . . . . . . . . . . . .
Gráfico das Interações no Fórum . . . . . . . .
Semelhança entre Blog e Site de Notícias . . .
Diagrama de Componentes - Estudo de Caso 3 .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
48
49
51
53
56
57
57
57
58
59
5.1
Resultado da Classificação: CE = Extração de Conteúdo; P = PréProcessamento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Influência da Extração de Conteúdo e do Pré-Processamento no Algoritmo de Naive Bayes . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.5
2.6
2.7
5.2
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
13
22
24
25
67
67
x
5.3
Resultado Similaridade . . . . . . . . . . . . . . . . . . . . . . . . . .
70
xi
Lista de Tabelas
5.1
5.2
5.3
5.4
5.5
5.6
5.7
5.8
Avaliação - Extração de Conteúdo . . . . . . . . . . . . . . . . .
Distribuição das Categorias . . . . . . . . . . . . . . . . . . . .
Tempo para Execução da Classificação . . . . . . . . . . . . . .
Distribuição das Tags no Dataset . . . . . . . . . . . . . . . . . .
Regras Geradas pelo Serviço de Recomendação por Similaridade
Regras Geradas pelo Serviço de Recomendação por Dicionário .
Regras Geradas pelo Serviço de Recomendação por Classificação
Regras Geradas pelo Serviço de Recomendação por Agrupamento
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
65
66
68
69
70
70
71
71
6.1
6.2
Comparação entre tecnologias de componentes . . . . . . . . . . . . .
Comparação dos Trabalhos Relacionados e o RetriBlog . . . . . . . . .
76
82
xii
1
Introdução
A Web 2.0 (O’Reilly, 2005) está mudando a maneira como os usuários interagem com
a informação. Ela permite que eles se tornem uma parte ativa da Web através de novas
ferramentas que permitem a criação e gerenciamento de conteúdo de forma colaborativa.
Alguns exemplos de ferramentas da Web 2.0 são wikis, fóruns, blogs, twitter. Entre essas
a importância dos blogs devem ser enfatizados.
“Um blogueiro necessita apenas de um computador, acesso à Internet e uma opinião (Rosenbloom, 2004)” e “Blogs tornaram-se tão ubíquos que o termo é sinônimo
de ‘site pessoal’ (Blood, 2004)” são duas frases retiradas do journal especial da ACM1
chamado Blogosphere2 . Elas claramente apresentam o principal motivo pelo qual o blog
é largamente adotado: a simplicidade.
Além disso, de acordo com um relatório realizado pela Technorati 3 em 2008 (Technorati, 2008), já havia mais de 133 milhões de blogs indexados somente por essa empresa.
Este mesmo relatório mostrou que a atividade nos blogs dobra a cada duzentos dias e
novecentos mil postagens são escritas diariamente.
Outras empresas como a Blog Pulse4 e Blog Scope5 também tem estatísticas interessantes. A primeira de mais de 160 milhões de blogs indexados e mais de sessenta mil são
criados todos os dias. Já a segunda indexa aproximadamente 53 milhões de blogs e mais
de um trilhão de postagens.
Devido ao grande volume de dados gerados nos blogs, torna-se impraticável utilizar
as informações disponíveis na Blogosfera de forma manual. Assim, é fundamental a
1 Association
for Computing Machinery-http://www.acm.org/
in: http://portal.acm.org/toc.cfm?id=1035134&type=issue&coll=GUIDE&dl=GUIDE
&CFID=97672162&CFTOKEN=83186061
3 http://technorati.com/
4 http://www.blogpulse.com/
5 http://www.blogscope.net/
2 Avaliable
1
utilização de abordagens computacionais para auxiliar nessa tarefa. Essas informações
podem ser: preferências do usuário, quais assuntos estão sendo tratados na blogosfera,
textos interessantes para determinados domínios (Xiong and Wang, 2008). Com isso elas
podem ser usadas por empresas para determinar se um produto dela está sendo bem aceito
na blogosfera (Geun Chol Moon, 2010). Outro exemplo seria usar blogs educacionais
para ajudar em ambientes de ensino (Qiao et al., 2009; Yang, 2008). Por esta razão,
vários estudos para lidar com o problema de automatização estão sendo desenvolvidos.
Técnicas como processamento de linguagem natural (Abney, 1991), recuperação de
informação (Manning et al., 2008) e extração de informação (Gaizauskas and Wilks,
1998) são algumas abordagens que procuram obter informações interessantes de textos
de forma automática.
Com relação a obtenção de documentos, a área de recuperação de informação (RI)
se destaca em relação às demais (Hotho et al., 2005), mesma se preocupa em identificar
textos relevantes para uma determinada busca, dentro de uma grande coleção de textos6 .
É importante destacar que para facilitar o acesso aos documentos, existe necessidade de
indexar e armazenar os textos dos blogs. Tal mecanismo é realizado por uma entidade de
software conhecido como Web Crawler (Arasu et al., 2001). Especificamente no contexto
de blogs, são chamados de Blog Crawler.
Entretanto, para criação de um blog crawler deve-se levar em consideração vários aspectos, como: i) idioma do blog; ii) engenho de busca7 ; iii) técnicas de pré-processamento
e indexação que serão aplicadas aos textos do blog; iv) empresa estruturadora8 , entre
outros.
Devido à variabilidade e quantidade dos blogs é necessário construir uma abordagem
genérica para lidar com essas questões. Para tratar esse problema uma abordagem que
já vem sendo utilizado em outros trabalhos é a criação de um framework (Johnson and
Foote, 1988). Duas obras lidam com estes problemas (Chau et al., 2009; Ferreira et al.,
2010b). No entanto, estes dois frameworks não seguem alguns princípios de engenharia
de software, como por exemplo a rastreabilidade explícita entre arquitetura de software e
implementação, que facilita, por exemplo, a evolução do framework.
Para isso, uma abordagem centrada na arquitetura é uma solução. Desenvolver um
sistema centrado na arquitetura (Garlan and Shaw, 1994) tem inúmeras vantagens, por
exemplo:
6 Existem
vários algoritmos que recuperam e organizam dados como: PageRank (Brin and Page, 1998),
Anchor Text (Brin and Page, 1998), Kleinberg’s HITS (Kleinberg, 1999), entre outras.
7 Technorati, Icerocket, entre outros
8 Facebook, Blogger, entre outros
2
• Controle de complexidade, como o sistema é documentado a cada etapa e a arquitetura é bem definida a complexidade diminui, abordagem top-down;
• O desenvolvedor não precisa se preocupar com detalhes do código, mas apenas
com a arquitetura;
• facilita a evolução e instanciação do sistema, utilizando essa abordagem o desenvolvedor só precisa definir uma configuração arquitetural para instanciar o sistema, e
para acrescentar um componente ele não precisa saber detalhes da implementação
de outros.
Esta abordagem vem preencher a lacuna deixada pelos sistemas citados acima. Com
ela a rastreabilidade entre arquitetura e código é bem definida.
Além deste problema, outros problemas básicos como extrair o conteúdo principal
dos blogs e recomendar tags para as postagens também são um desafio para conseguir
informações interessantes dos blogs. Para resolver o primeiro problema é necessário criar
algoritmos que possam detectar o conteúdo principal de uma página HTML qualquer
sem nenhuma informação prévia.
Já o segundo lida, principalmente, com o problema de alinhamento de tags. O mesmo
blog pode ser marcado com tags diferentes devido a diferenças na cultura, conhecimento
e experiências dos usuários (Subramanya and Liu, 2008). Ainda, de acordo com (Golder
and Huberman, 2006), três tipos de problemas podem ocorrer: i) sinonímia: quando
existem múltiplas palavras com o mesmo significado; ii) polissemia: a mesma palavra
pode se referir a conceitos diferentes; iii) variação de nível básico da tag: variação
da granularidade da tag. Um exemplo deste último tipo de problema surge quando um
blogueiro posta sobre o seu animal de estimação; ele pode atribuir tags gerais, como
"animal"ou "animal doméstico"ou aqueles específicos, como "cachorro"e "gato".
Por um lado, para lidar com o primeiro problema, tem sido implementado algoritmos
que lidam com problema de extração de conteúdo, são eles: Boilerplate (Kohlschütter
et al., 2010), Document Slope Curve (DSC) (Pinto et al., 2002) e Text-to-Tag Ratio (TTR)
(Weninger and Hsu, 2008), bem como a heurística Link Quota Filter (LQF) (Gottron,
2007) que estão entre os algoritmos mais eficientes para extração de conteúdo. Além
disso, os algoritmos citados têm propriedades muito desejadas no contexto da pesquisa,
incluindo a independência em relação a estrutura dos blogs. Isto também nos permite
aplicá-los a outros tipos de páginas HTML (por exemplo, notícias), independência da
idioma, e rápido tempo de execução.
3
1.1. OBJETIVOS
Por outro lado, para recomendar tags, este trabalho propõe quatro serviços de sugestão
de tags. Esses serviços são classificados em abordagens baseados em tags e baseados em
postagem. Estes serviços lidam com esse problemas de maneira diferente, permitindo
assim aos usuários escolher o tipo apropriado de serviço de acordo com suas necessidades.
Por exemplo, se o usuário tiver um corpus com pouco ruído, ele pode usar um serviço
baseados na postagem para alcançar melhores resultados. Por outro lado, se ele precisa
de uma implementação rápida, os serviços baseados em tags são mais apropriados.
Neste contexto, este trabalho propõe um framework chamado RetriBlog para criar
blog crawlers usando uma abordagem centrada na arquitetura e seguindo o modelo de
implementação COSMOS*(Gayard et al., 2008). Este framework lida com os problemas
mencionados acima e com questões relacionadas com a engenharia de software, tais
como uma melhor evolução e facilidade para instanciar o framework em uma aplicação
de software.
1.1
Objetivos
O principal objetivo deste trabalho é propor um framework centrado na arquitetura
para construção de blog crawlers. Este framework visa disponibilizar serviços de préprocessamento, indexação, extração de conteúdo, entre outros. Desta forma, o trabalho
lida tanto com aspectos mais gerais como facilitar a criação de um blog crawler como
com problemas específicos como alinhamento de tags. As contribuições do trabalho
podem ser divididas em duas grandes áreas da computação: Inteligência Artificial e
Engenharia de Software.
Por um lado, em relação a área de Inteligência Artificial, as contribuições são as
seguintes:
• Construção de mecanismos para recuperar e indexar textos de blogs e informações
como título do texto e preferências do usuário (blog crawlers);
• Implementação de algoritmos para extração de conteúdo em páginas HTML;
• Criação de serviços de recomendação de tags para blogs;
• Estudo e avaliação sobre a influência da utilização de algoritmos de extração de
conteúdo e pré-processamento no desempenho de classificação de páginas HTML.
Por outro lado, as contribuições na área de Engenharia de Software são:
4
1.2. ORGANIZAÇÃO DO TEXTO
• Utilizar uma abordagem centrada na arquitetura para criação do framework;
• Utilização de componentes seguindo o modelo COSMOS*;
• Criação de estudos de caso para avaliar as possíveis vantagens do uso das abordagens centrada na arquitetura e COSMOS*.
1.2
Organização do texto
Esta dissertação está dividida em sete capítulos. O Capítulo 1 introduz a problemática e os
objetivos do trabalho proposto. No Capítulo 2 são apresentados os conceitos relacionados
ao tema deste trabalho. A teoria básica acerca de blogs, recuperação de informação, web
crawlers, algoritmos de classificação, projeto de software centrado na arquitetura e uma
breve explicação sobre alguns diagramas que serão utilizados para explicar o framework
proposto e sobre o COMSOS*.
O Capítulo 3 mostra como o RetriBlog foi criado descrevendo em detalhes cada
um dos seus serviços e funcionalidades. Neste capítulo também é mostrado como o
framework foi implementado, para isso são usados vários tipos de diagramas.
Depois no Capítulo 4, 3 estudos de caso são detalhados para mostrar toda a flexibilidade do framework. Nele também são mostrados trechos de código para evidenciar a
facilidade de instanciação do framework. No Capítulo 5 mostra os experimentos realizado
com os algoritmos de extração de conteúdo, recomendação de tag e classificação. Por
fim o capítulo faz uma avaliação do uso do COSMOS*.
No Capítulo 6, são apresentados trabalhos relacionados ao framework proposto, à
utilização do COSMOS*, e aos algoritmos de extração de conteúdo, recomendação de tag
e classificação. Na conclusão do capítulo uma tabela mostra as principais diferenças do
trabalho com os principais sistema encontrados. Por fim, no Capítulo 7, são apresentadas
as considerações finais deste trabalho, alguns trabalhos futuros são definidos e é mostrado
uma lista de publicações relativas ao RetriBlog.
5
2
Embasamento Teórico
O objetivo deste capítulo é apresentar ao embasamento teórico referente ao foco deste
trabalho, fazendo uma pequena introdução sobre conceitos correlacionados. O capítulo
divide-se em duas partes, na primeira são levantados aspectos tecnológicos envolvidos
com o trabalho, já a segunda trata de questões relacionadas a engenharia de software. Na
Seção 2.1 serão discutidas algumas motivações para utilizar os blogs e o que está acontecendo na blogosfera. Na seção seguinte, serão apresentados conceitos sobre recuperação
de informação que serão utilizados na proposta do trabalho. Na Seção 2.3 serão discutidos
aspectos relacionados aos web crawlers, suas definições e características. A seção 2.4
mostra uma visão geral sobre classificação supervisionada e os algoritmos usados no
RetriBlog. A última seção trata de definições ligadas à engenharia de software. Nela são
abordadas características relacionadas a projetos de software com reuso, com enfoque
em framework 2.5.1, desenvolvimento baseado em componentes 2.5.2, arquitetura de
software 2.5.3 e desenvolvimento centrado na arquitetura 2.5.4.
2.1
Visão Geral da Blogosfera
Blogosfera é o nome dado a toda a comunidade de blogs na Internet, é parte da infraestrutura pela qual idéias são desenvolvidas e transmitidas. Os blogs são, essencialmente,
apenas o texto publicado dos pensamentos de um autor, enquanto a blogosfera é um
fenômeno social.
Para usar um blog é necessário apenas um computador, acesso a Internet e uma
opinião (Rosenbloom, 2004). Essa frase mostra bem algumas das principais motivações
de se usar blogs, a facilidade e velocidade que o usuário, chamado de blogueiro (do inglês
Blogger), tem de participar desse fenômeno. Além disso, é importante frisar que os blogs
foram uma das primeiras mídias que começaram a mudar o paradigma de comunicação.
6
2.1. VISÃO GERAL DA BLOGOSFERA
Antes era comum encontrar meios de comunicação em uma só via, por exemplo o jornal.
Os textos eram publicados nos jornais e os leitores quase sempre não podiam dar opiniões.
Até mesmo na Internet, os sites eram feitos apenas para se apresentar um conteúdo e não
para receber os comentários sobre eles. Com os blogs isso começa a mudar. A facilidade
para postar opiniões é tão grande quanto a para receber comentários.
O blog (uma contração da expressão "Web log") é um site cuja estrutura permite
a atualização rápida a partir de acréscimos dos chamados artigos, ou postagens. Estes
são, em geral, organizados de forma cronológica inversa, tendo como foco a temática
proposta do blog, podendo ser escritos por um número variável de pessoas, de acordo
com a política do blog (Blood, 2004). Dessa forma, os blogs se tornaram ferramentas tão
ubíquas que são tratados como sites pessoais.
Em 2008, uma pesquisa da Technorati, empresa indexadora de blogs chegou a conclusões interessantes sobre o tamanho da blogosfera. Todos os estudos comprovam que
os blogs são um fenômeno global que atingiu a Web. Nessa pesquisa podemos perceber
fatos relevantes como a grande quantidade de postagens que são escritas diariamente,
novecentos mil, e existem mais de 133 milhões de blogs indexados pela Technorati entre
os anos de 2002 e 2008. De acordo com a mesma estimativa a atividade nos blogs
dobra a cada duzentos dias. Além disto, outras empresas como a Blog Pulse1 e Blog
Scope2 também tem estatísticas interessantes. A primeira possui mais de 160 milhões de
blogs indexados e mais de sessenta mil são criados todos os dias. Já a segunda indexa
aproximadamente 53 milhões de blogs e mais de um trilhão de postagens.
Duas perguntas devem ser feitas sobre os blogs: i) Quem são os blogueiros? e ii)
Quais os motivos para escrever um blog? Elas serão respondidas nas subseções a seguir.
2.1.1
Quem são os blogueiros?
A palavra blogueiros se refere às pessoas que escrevem em blogs. Segundo pesquisa de
(Technorati, 2008), os blogueiros em geral, fazem parte de um grupo altamente educado
e rico. Quase metade de todos os blogueiros examinados possuem um diploma de pósgraduação, e a maioria tem uma renda familiar de US $ 75,000 ou superior por ano. Além
destes dados, outras características interessantes são:
• Dois terços são do sexo masculino;
• 60% tem idade entre 18-44;
1 http://www.blogpulse.com/
2 http://www.blogscope.net/
7
2.1. VISÃO GERAL DA BLOGOSFERA
• A maioria são mais ricos e educados do que a população em geral;
• 75% têm diploma universitário;
• 40% têm pós-graduação;
• profissionais independentes que são blogueiros possuem alta renda familiar. Cerca
de metade tem uma renda familiar anual de 75,000 dólares e um terço superara o
nível de 100,000 dólares.
Algumas destas características indicam que as pessoas que estão utilizando os blogs
são qualificadas, com isso os textos publicados fornecem informações interessantes.
2.1.2
Quais os motivos para escrever um blog?
Troca de experiência de auto-expressão continuam a ser as principais motivações para
blogueiros, e 70% dos inquiridos dizem que a satisfação pessoal é uma maneira de medir
o sucesso de seu blog (Technorati, 2009). Entre os blogs profissionais, no entanto, a
principal métrica de sucesso é o número de visitantes únicos. Blogueiros comuns tendem
a escrever sobre reflexões e opiniões pessoais, enquanto os profissionais tendem a ser
mais atuais.
A ascensão do blogueiro profissional continua, 70% dos funcionários em tempo
parcial e trabalhadores autônomos estão postando mais do que nunca, enquanto os
blogueiros comuns são um pouco menos. O principal motivo para diminuir a atividade dos
blogueiros foi o aumento do trabalho e dos compromissos familiares (64%). Blogueiros
descrevem significativos impactos positivos em suas vidas pessoais, mas os blogueiros
mais experientes têm de carreira e os impactos positivos do negócio. 70% dizem que
eles são mais conhecidos em sua indústria por causa de seu blog. A diversidade da
blogosfera, Figura 2.1, refletem na questão do assunto da postagem - mesmo tendo 23
opções, incluindo a maioria dos grandes campos de instrução, 30% dos inquiridos dizem
que seu assunto principal é "Outro".
Diante do que foi exposto mostra-se necessário abordagens computacionais para
encontrar blogs relevantes em meio à essa grande quantidade de blogs. Uma possibilidade
para isso é utilizar recuperação de informação.
8
2.2. RECUPERAÇÃO DE INFORMAÇÃO
Figura 2.1 Assuntos blogados(Adaptado de (Technorati, 2009))
2.2
Recuperação de Informação
Recuperação de informação (RI) (Manning et al., 2008) pode ser definida como a procura
de textos interessantes para uma determinada busca dentro de uma grande coleção de
textos. Durante muito tempo essa área foi pouco explorada pela comunidade científica,
contudo após a popularização da Web, grandes empresas, como a Google e a Yahoo
surgiram e vários investimentos nessa área foram feitos.
As áreas de pesquisa na recuperação da informação envolvem modelagem, classificação e categorização da informação, arquitetura de sistemas, filtragem, linguagens
de consulta, entre outros. RI pode ser usado para: pesquisa na Web, recuperação de
informações pessoais e pesquisas em empresas, instituições ou na web sobre um domínio
específico (Baeza-Yates and Ribeiro-Neto, 1999). A Figura 2.2, mostra um fluxo de um
processo básico de recuperação de informação que foi tratado ao longo desta seção.
Figura 2.2 Fluxo de um Processo Básico de RI
O objetivo da recuperação da informação, nestas aplicações, é representar eficientemente a coleção de documentos que o usuário pretende interagir. Uma estrutura de dados
9
2.2. RECUPERAÇÃO DE INFORMAÇÃO
muito utilizada para representar tal coleção é a indexação invertida (Manning et al., 2008;
Hatcher and Gospodnetic, 2004). A idéia do índice invertido é construir uma tabela de
referência onde cada termo ocorrido no documento é usado como um item para a lista de
documentos que cada termo ocorre. Ele funciona como um índice remissivo de um livro,
ou seja, guarda as páginas que contém as palavras e não o contrário. Então na busca ao
invés de procurar página por página até encontrar a palavra, ele vai direto para as páginas
em que a palavra ocorre. Além disso, outro fator importante que deve ser armazenado é a
freqüência de um termo em determinado documento. Quando concluído o processo, o
índice invertido recebe o nome de dicionário.
Existem várias técnicas para se implementar os índices invertidos, por exemplo a
árvore B+ (Tenenbaum, 1995). Este tipo de árvore representa a ordenação de dados de
uma maneira que permita uma inserção e remoção eficiente de elementos. Desta forma
ela torna o processo de índice invertido eficiente.
Contudo, um problema é facilmente identificado neste processo: existem palavras
que têm pouco poder representativo no documento, por exemplo os artigos no português,
e outras palavras podem conter a semântica semelhante em um determinado contexto,
como as palavras no masculino e no feminino, no plural e no singular. Para resolver
esses problemas, antes de indexar, os documentos devem ser submetidos a um préprocessamento. Existem várias técnicas que procuram processar o texto antes de indexálos, entre elas estão (Hotho et al., 2005):
• Análise léxica: divide o documento em tokens e verifica palavra por palavra, trata
a retirada de símbolos não pertencentes à linguagem trabalhada, por exemplo
retirar código HTML (HyperText Markup Language) do texto, caracteres inválidos,
espaços em branco, entre outros;
• Filtragem: retira palavras do dicionário e dos documentos. A idéia desse método é
retirar palavras que contém pouco valor de informação (stop words). Por exemplo,
no português os artigos (a, o, um, uma...) possuem pouco valor para o texto, além
disso palavras que aparecem muito na coleção de documentos também poder ser
consideradas stop words pois não irão acrescentar valor significativo para as buscas;
• Lemmatization: métodos que tentam mapear os verbos para formas primitivas e
nomes para o singular. Contudo esta técnica ainda apresenta algumas dificuldades,
pois ela mantém no texto a palavra e cria uma estrutura, normalmente usam tags,
que contém as formas reduzidas, ou seja, ela não retira do texto a palavra original,
10
2.3. WEB CRAWLER
apenas marca aquela palavra com uma tag que vai conter uma palavra reduzida
relacionada a original.
• Stemming: mapeia a forma básica das palavras, como tirar o plural ou reduzir o
verbo obtendo o radical. Por exemplo no inglês os verbos são transformados para a
forma primitiva, traveling e traveled são transformados em travel. Um exemplo
em português é menino e menina que são transformados em menin;
• Remoção de spam: técnicas para encontrar e retirar do conjunto de documentos
textos que possuem pouco valor para a pesquisa ou domínio utilizado pelo usuário.
Depois do pré-processamento e criação do dicionário, utilizando o processo de índice
invertido, é necessário criar mecanismos de buscas e consultas, como por exemplo o
modelo booleano ou o modelo estatístico (Manning et al., 2008). Com este mecanismo o
usuário poderá recuperar qualquer documento que já esteja no dicionário através de uma
consulta.
Ferramentas como o Bow (McCallum, 1996) e Lemur (Lemur, 2009) possuem diversas funcionalidades de recuperação de informação, contudo o Lucene (Lucene, 2001) é a
ferramenta mais conhecida e completa que disponibiliza funcionalidades de recuperação
de informação em diversos idiomas.
Porém antes de realizar esses serviços com os blogs é necessário obter eles da Internet.
Para isso são usados web crawlers.
2.3
Web Crawler
Os sistemas de busca vem se tornando cada dia mais indispensáveis para obter informação
relevante da grande quantidade de dados que a Web disponibiliza. Os motores de
busca armazenam imensas coleções de páginas com ajuda dos web crawlers, que são
responsáveis por percorrer a Web através de links e colher dados que normalmente são
indexados para que o usuário possa executar consultas eficientemente (Arasu et al., 2001).
Segundo Gautam Pan (Pant et al., 2004) web crawler é um programa de computador
que explora a estrutura de grafo da Web para mover uma página para outra. Como já foi
dito, a maior motivação para idealizar os web crawlers foi recuperar as páginas da Web e
adicionar elas ou a representação delas em um repositório local para facilitar a busca do
usuário. Na sua forma mais simples um crawler parte de uma página e a partir daí utiliza
links externos para atingir as outras páginas.
11
2.3. WEB CRAWLER
Por detrás desta simples descrição, encontra-se uma série de questões relacionadas
com as conexões de rede, análise de páginas HTML, entre outros.
Se a Web fosse uma coleção estática de páginas, logo chegaria o momento em que
os crawlers não seriam mais necessários, visto que todas as páginas já estariam ligadas
a um repositório. Contudo, a Web é uma entidade dinâmica que evolui com taxas e
velocidades diferentes. Por isso existe a necessidade de continuar usando os crawlers.
Eles normalmente são os responsáveis por deixar o banco de dados de sistemas de busca
sempre atualizado.
A seguir, serão descritos detalhes sobre o fluxo atividades e arquitetura básica de um
web crawler.
2.3.1
Fluxo de atividades
A Figura 2.3 mostra o fluxo básico de atividades de um crawler, que é detalhado a seguir.
Figura 2.3 Fluxo básico de um crawler (Adaptado de (Pant et al., 2004))
• Inicializa fronteira com URLS: O frontier é a lista de coisas a fazer do crawler e
contém uma lista de URIs que ainda não foram visitadas. Para esta etapa pode ser
12
2.3. WEB CRAWLER
implementado, por exemplo, um esquema de escalonamento Fist In Fist Out(FIFO)
(Tanenbaum, 2007) para ordenar as URIs que serão acessadas;
• Checa finalização e Pega URL da fronteira: Verifica se a fronteira está vazia,
caso não esteja retorna a próxima URI a ser analisada;
• Recupera página: Obtém a página, normalmente através de uma requisição feita
por meio de um cliente HTTP. Trata erros de conexão e determina algumas características das páginas, como a última atualização;
• Processa página: Faz uma análise sintática na página para extrair informações
úteis e possivelmente guiar o próximo passo do crawler, além disso, procura
também eliminar informações pouco expressivas ou inúteis;
• Adiciona URLS a fronteira: Adiciona URIs, obtidas no passo anterior, à fronteira.
2.3.2
Arquitetura
A figura 2.4 apresenta os componentes básicos de uma arquitetura de um crawler.
Figura 2.4 Arquitetura básica de um crawler (Adaptado de (Shkapenyuk and Suel, 2002))
Nesta arquitetura existem dois componentes fundamentais que são os módulos de
aplicação e de sistema. O crawler de sistema tem a responsabilidade de ir até a Web e
obter as páginas. Por outro lado, o de aplicação é responsável por passar a lista de páginas
que devem ser baixadas e fazer as devidas operações com os dados obtidos pelo crawler
de sistema.
2.3.3
Crawlers sociais
Cada dia é maior a utilização de ferramentas sociais como: wikis, fóruns, blogs, ferramentas de relacionamento, entre outros. Estas ferramentas possuem informações que podem
13
2.4. CLASSIFICAÇÃO
ser valiosas se bem utilizadas, por exemplo, uma ferramenta de relacionamento descreve
algumas características dos usuários que podem ser usadas para traçar o perfil dele e criar
mecanismos de individualização de serviços.
Contudo, para isso é necessário mecanismos para obter informações dessas ferramentas. Aí que entra os crawlers sociais (Ying Ding and Yan, 2008), eles são similares
aos crawlers descritos anteriormente, mas possuem uma diferença fundamental, eles
são projetados para colher informações específicas das ferramentas e não a sua página
completa. Dentro desse contexto encontramos os blog crawlers, que são usados para
conseguir informações dos blogs (Agarwal et al., 2009).
Para lidar com todos os pontos de variabilidade encontrados nos blogs (idioma,
técnicas de pré-processamento que se deseja usar, empresa estruturadora, entre outros) se
faz necessário utilizar técnicas de engenharia de software para projetar o crawler.
2.4
Classificação
O objetivo de Classificação de Texto consiste em categorizar um conjunto de documentos,
com base no seu conteúdo, em um número fixo de categorias pré-definidas. Cada
documento pode ser atribuído a uma, várias ou nenhuma categoria (Sebastiani and
Delle Ricerche, 2002). Classificação supervisionada de texto é uma abordagem em que
um conjunto de documentos são previamente etiquetados em categorias já definidas; um
classificador (algoritmo de aprendizagem de máquina) é treinado sobre este conjunto
de documentos previamente rotulados; finalmente, o classificador treinado é capaz de
atribuir classes para novos documentos.
O algoritmo Naive Bayes é um classificador probabilístico, baseado no teorema de
Bayes (Mitchell, 1997). Ele assume que todos os atributos dos dados de treinamento
são independentes, ignorando possíveis dependências (Islam et al., 2007). Basicamente,
funciona da seguinte forma: primeiro, em uma fase de aprendizado, ele gera uma lista
de palavras com suas freqüências a partir do corpus de entrada. Cada palavra nesta
lista gerada é rotulada com a classe a que pertence, resultando em uma espécie de
"dicionário"para cada classe. Então, a partir deste dicionário de classes, é construída uma
árvore cujas folhas são classes e nós intermediários indicam probabilidades calculadas
de acordo com o teorema de Bayes. Finalmente, quando um novo texto é apresentado
ao classificador, ele percorre a árvore gerada até encontrar uma folha que indica a classe
que mais combinam com as palavras no texto de entrada. O classificador Naive Bayes
apresentou bom desempenho para a classificação de texto em muitos trabalhos de pesquisa
14
2.4. CLASSIFICAÇÃO
(Islam et al., 2007), (Roy et al., 2004; Aris Kosmopoulos and Androutsopoulos, 2008)).
No algoritmo KNN (Li Baoli and Qin, 2003) o classificador encontra k (em geral k é
um inteiro pequeno positivo) vizinhos mais próximos entre os documentos de treinamento
e a nova entrada, atribuindo a categoria da maioria dos vizinhos a este último. O algoritmo
funciona da seguinte forma: primeiro, é gerado uma lista de palavras com suas freqüências
a partir do corpus, com estes dados, um vetor é gerado para cada documento. Então, esses
vetores são colocados em um plano cartesiano criado pelo algoritmo. Finalmente, quando
um novo documento é apresentado ao classificador, que gera um vetor que representa
este novo documento e a distância é calculada para todos todos os vetores do plano. A
classe com mais votos ao longo dos k vizinhos mais próximos será a classe escolhida
para o documento de entrada. Muitas obras sobre o algoritmo KNN e suas variações têm
relatado que ele consegue um bom desempenho (Li Baoli and Qin, 2003, 2002; Yang and
Liu, 1999).
O algoritmo baseado TF/IDF (Salton and Buckley, 1988) é baseado nos pesos
de frequência do termo(TF do inglês Term-Frequency) e frequência inversa do documento(IDF do inglês Inverse Document Frequency). Esses pesos consistem em uma
medida estatística usada para avaliar o quão importante é uma palavra em um documento
dentro de uma coleção de documentos(corpus). Ele gera um vetor de freqüência para cada
classe com base no corpus. Este vetor contém termos e as freqüências em que ocorrem
em determinada classe. Então, o IDF do documento de entrada é calculado e um vetor
que representa ele é criado. Finalmente, a similaridade, usando cosseno (Markines et al.,
2009), entre este e os vetores que representam as classes são calculados. A classe que
tem mais semelhança com o documento de entrada é atribuída a ele.
Em outras palavras, dado um termo w, e uma página p, o seu TF-IDF é dado pela
equação abaixo:
T F − IDFw,p = T Fw,pxIDFw(3.1)
Temos que TFw,p e IDFw são:
15
2.5. PROJETO DE SOFTWARE COM REUSO
f reqnciaw
(3.2)
f reqnciaM
N
IDFw = log (3.3)
nw
T Fw,p =
Onde:
• M é o termo de maior freqüência na página p.
• N é o número total de documentos na coleção e n o número de documentos onde o
termo w ocorre.
É importante frisar que esse algoritmo por si só não faz a classificação. É necessário
o passo final de verificação de similaridade para a classificação ser realizada.
2.5
Projeto de Software com Reuso
O processo de projeto, na maioria das disciplinas de engenharia, tem como base o reuso
de componentes. No desenvolvimento do software cada vez mais é necessária uma
abordagem parecida, o software é considerado um ativo e o reuso dele é essencial para
aumentar o retorno de seus custos de desenvolvimento. Requisitos como menor custo de
produção e manutenção do software, maior rapidez na entrega e aumento da qualidade,
só podem ser atendidos pelo reuso generalizado e sistemático do software (Sommerville,
2004).
A engenharia de software baseado no reuso é uma abordagem para desenvolvimento
que tenta maximizar o reuso do software já existente. As unidades de software reutilizadas
podem ser, por exemplo (Sommerville, 2004):
• Reuso de sistemas de aplicações: Todo sistema de aplicação pode ser reutilizado
pela sua incorporação, sem mudanças, em outros sistemas ou pelo desenvolvimento
de famílias de aplicações;
• Reuso de componente: Os componentes de uma aplicação, que variam em tamanho incluindo desde subsistemas até objetos isolados, podem ser reutilizados;
• Reuso de funções: Os componentes de software que implementam uma única
função, como uma função matemática, podem ser reutilizados.
16
2.5. PROJETO DE SOFTWARE COM REUSO
As principais vantagens de utilizar sistemas baseados em reuso são apresentadas a
seguir (Sommerville, 2004):
• Maior confiabilidade: Componentes reutilizados normalmente são experimentados e testados em diferentes ambientes;
• Redução de riscos do processo: Recorrendo a um componente já existente, serão
menores as incertezas sobre os custos relacionados ao reuso desse componente do
que sobre custos de desenvolvimento;
• Uso efetivo de especialistas: Especialistas podem fazer componentes reusáveis
que englobem seus conhecimentos;
• Conformidade com os padrões: Alguns padrões podem ser implementados com
um conjunto de componentes-padrão;
• Desenvolvimento acelerado: O reuso de componentes acelera a produção, porque
o tempo de desenvolvimento e o de validação devem ser reduzidos.
Por outro lado também existem alguns problemas relacionados a esse tipo de desenvolvimento (Sommerville, 2004):
• Aumento nos custos de manutenção: Se o código fonte de um componente não
estiver disponível, então o custo de manutenção pode aumentar, uma vez que os
elementos reutilizados no sistema podem se tornar crescentemente incompatíveis
com as mudanças do sistema;
• Síndrome do "não-foi-inventado-aqui": Alguns engenheiros de software preferem reescrever componentes, pois acreditam que podem fazer melhor que o
componente reutilizável;
• Manutenção de uma biblioteca de componentes: Implementar uma biblioteca
de componentes e assegurar que os desenvolvedores de software utilizem essa
biblioteca pode ser dispendioso;
• Encontrar e adaptar componentes reutilizáveis: Os engenheiros de software
precisam ter uma razoável certeza de poder encontrar um componente, antes de
incluírem a rotina de busca de componentes como parte de seu processo normal de
desenvolvimento.
17
2.5. PROJETO DE SOFTWARE COM REUSO
Dentro do projeto de software com reuso algumas abordagens, muitas vezes complementares, são muito utilizadas. As próximas seções abordam os seguintes temas:
Arcabouço, desenvolvimento usando componentes, arquitetura de software e desenvolvimento centrado na arquitetura.
2.5.1
Framework
Existem várias definições de framework, sendo que as mais famosas são as de Ralph E.
Johnson (Johnson and Foote, 1988; Johnson, 1997), que dizem: i) Um framework é um
conjunto de classes que incluem um projeto abstrato para soluções de uma família de
problemas relacionados; ii) Um framework é um conjunto de objetos que colaboram para
realizar um conjunto de responsabilidades para um domínio de aplicação, um esqueleto
de uma aplicação que pode ser customizada pelo desenvolvedor.
Destas definições podemos listar algumas características de um framework:
• Reusa o projeto de software e não apenas o código;
• Não é uma aplicação, e sim, um arcabouço para construir aplicações num domínio
específico;
• É um framework voltado para um determinado domínio;
• Resolve problemas de uma mesma natureza;
• São aplicações incompletas.
Além das características citadas a partir das definições acima, outras devem ser
ressaltadas, são elas (Sauvé, 2000; Fayad et al., 1999):
• Reusabilidade: Este é o propósito final do framework, mas para ser reusável antes
tem que ser usável, por isso ele tem que ser bem documentado e fácil de usar;
• Extensibilidade: Deve conter funcionalidade abstrata (sem implementação) que
deve ser completada. Desta forma, inúmeras aplicações podem ser instanciadas
com base no mesmo framework;
• Completude: Precisa endereçar o domínio do problema pretendido;
• Inversão de controle: A inversão do controle é uma característica fundamental na
arquitetura de um framework. Ela permite determinar que conjunto de métodos
18
2.5. PROJETO DE SOFTWARE COM REUSO
de uma aplicação específica deve ser chamado pelo framework. Quem define o
controle de fluxo é o framework.
Os framework podem ser classificados de várias maneiras, por exemplo, em relação a
onde ele é usado (Sauvé, 2000):
• Framework de suporte: Provê serviços de nível de sistema operacional, como
acesso a arquivos ou computação distribuída;
• Framework de aplicação: São também conhecidos como framework horizontais.
Esses fornecem funcionalidades que são aplicadas a uma variedade de problemas.
São utilizados em mais de um domínio. Por exemplo um framework para construção
de interface GUI;
• Framework de domínio: São também conhecidos como framework verticais. Esses fornecem funcionalidades que são aplicadas num domínio específico. Por
exemplo, framework para construir aplicações de controle de manufatura.
Eles também podem ser classificados em relação à técnica de extensão (Fayad et al.,
1999):
• Framework caixa branca: Estão fortemente ligado às características das linguagens, para realizar a customização utilizam-se de herança. Requer um bom entendimento do framework para criar uma aplicação;
• Framework caixa preta: São instanciados a partir de algum tipo de configuração,
como XML por exemplo. Esses frameworks confiam principalmente em composição (classes ou componentes) e delegação para realizar customização. Não requer
entendimento de detalhes internos para produzir uma aplicação;
• Framework caixa cinza: São framework projetados para evitar as desvantagens
apresentadas por framework caixa branca e caixa preta, permitindo certo grau de
flexibilidade e extensibilidade sem expor informações internas desnecessárias.
Para projetar um framework é necessário estar atento a algumas propriedades, como
(Clements and Northrop, 2001):
• Núcleo do framework: Conjunto de classes que juntas colaboram para implementar
uma arquitetura de família de sistemas;
19
2.5. PROJETO DE SOFTWARE COM REUSO
• Pontos de extensão: Admite pontos de extensão, normalmente, na forma de classes
abstratas ou interfaces;
• Controle de Fluxo da Aplicação: O fluxo é definido pelas classes que estão no
núcleo, e elas são responsáveis por invocar as classes que estendem os pontos de
extensão;
• Hot Spots: São as partes flexíveis de um framework, estes pontos são passíveis de
extensão. Hot spots são invocados pelo framework, ou seja, classes (implementadas
pelo programador da aplicação) recebem mensagens de uma classe do framework
(frozen spot). Isso geralmente é implementado através de herança e de métodos
abstratos;
• Frozen Spots: Partes fixas de um framework, fornece os serviços já implementados
do framework. Normalmente realizam chamadas indiretas aos hot spots.
Algumas vantagens de utilizar os framework são (Sauvé, 2000; Sommerville, 2004):
1. Menos código para projetar e escrever;
2. Redução de custos e do tempo de desenvolvimento;
3. Código mais confiável e robusto;
4. Manutenção reduzida e evolução facilitada;
5. Melhor consistência e compatibilidade entre aplicações;
6. Estabilização do código (menos defeitos) devido ao uso em várias aplicações.
Por outro lado também podemos citar algumas desvantagens de se trabalhar com
framework (Sauvé, 2000; Sommerville, 2004):
• Requer mais esforço para construir;
• Benefícios são realizados em longo prazo;
• Precisa modificar o processo de desenvolvimento e criar novos incentivos;
• Requer documentação, manutenção e suporte.
20
2.5. PROJETO DE SOFTWARE COM REUSO
A documentação do framework é um dos fatores que podem definir o sucesso dele. Ela
precisa se adaptar a diferentes públicos, para isso deve ter diferentes níveis de abstração.
Quatro tópicos não podem deixar de ser documentados (Markiewicz and Lucena, 2001):
• Propósito, que contém uma breve descrição do framework e o domínio do problema
para o qual foi desenvolvido;
• Como usar o framework, garante a reutilização do framework, descreve como
utiliza-lo;
• Propósito das aplicações, exemplos que ajudem a entender melhor o framework;
• Design, deve conter as classes, seus relacionamentos e colaborações.
Por fim, é importante distinguir framework de outras abordagens de reuso, como
bibliotecas de classes e padrões de projeto, e mostrar o que é modelo de framework,
diagrama muito usado para descrever variabilidades, por isso muito importante para a
criação de um framework.
Framework versus Bibliotecas de Classes
Uma biblioteca de classes possui características como: cada classe é única e independente
das outras, os clientes chamam funções e não existe controle de fluxo. Por outro lado o
framework possui: classes com dependências/colaborações estão embutidas, os clientes
chamam funções da "aplicação"e existe controle de fluxo de execução.
Framework versus Padrões de Projeto
A diferença entre framework e padrão de projeto é: i) Padrões de projeto são mais
abstratos do que frameworks. Um framework inclui código, um padrão de projeto não;
ii) Padrões de projeto são elementos arquiteturais menores do que frameworks. Um
framework típico contém vários padrões de projeto mas o contrário nunca ocorre; iii)
Padrões de projeto são menos especializados do que frameworks. Arcabouços sempre
têm um domínio de aplicação particular enquanto padrões de projeto não ditam uma
arquitetura de aplicação particular.
21
2.5. PROJETO DE SOFTWARE COM REUSO
Modelo de Características
Uma feature é uma propriedade do sistema que é relevante para o usuário e é usado para
capturar semelhanças e variabilidades entre os sistemas (Czarnecki et al., 2005). Modelagem de feature é a atividade de identificar semelhanças e variabilidades dos produtos
de uma linha de produtos, ou aplicações em frameworks, em termos de características
e organizá-los em um modelo. Um diagrama de feature representa uma decomposição
hierárquica de recursos, normalmente incluindo dois tipos de relacionamentos: agregação
e generalização. O relacionamento de agregação é usado se um recurso pode ser decomposto em um conjunto de sub-funções, e a relação de generalização é usada quando um
recurso pode ser especializado em outras mais específicas com informações adicionais
(Lee and Kang, 2004).
Os relacionamentos básicos entre as características podem ser de três tipos:
• Mandatário: Para existir uma instância da feature é obrigatório que exista uma
instância da outra;
• Alternativo: Para existir uma instância da feature pode existir, no máximo, uma
instância de um conjunto de características, podendo exitir nenhuma também;
• Opcional: Pode existir ou não uma instância da feature dependente, e caso exista,
pode ser mais que uma.
Figura 2.5 Modelo de Características (Adaptado de (Ana Elisa Lobo and Rubira, 2007))
Por exemplo, na Figura 2.5 (Ana Elisa Lobo and Rubira, 2007), para existir uma
instância de Sistema, necessariamente precisam existir instâncias de Identificador do
usuário e Balanço associadas a ela (relacionamento mandatário). Por outro lado para
existir o Identificador do usuário é necessário que seja escolhido apenas um dos sub-tipos
Touch Screen e Leitor de Cartão (relacionamento alternativo). Por fim, para existir uma
22
2.5. PROJETO DE SOFTWARE COM REUSO
instância de Balanço é necessário ter uma de Monitor (relacionamento mandatário) e
pode ter ou não uma instância de Impressora (relacionamento opcional).
2.5.2
Desenvolvimento Baseado em Componentes
A grande utilização de Desenvolvimento Baseado em Componentes(DBC) está sendo
motivada principalmente pelas pressões sofridas na indústria de software por prazos mais
curtos e produtos de maior qualidade. No DBC, uma aplicação é construída a partir
da composição de componentes de software que já foram previamente especificados,
construídos e testados, o que proporciona um ganho de produtividade e qualidade no
software produzido.
Esse aumento da produtividade é decorrente da reutilização de componentes existentes
na construção de novos sistemas. Já o aumento da qualidade é uma conseqüência do fato
dos componentes utilizados já terem sido empregados e testados em outros contextos.
Porém, ale a pena ressaltar que apesar desses testes prévios serem benéficos, a reutilização
de componentes não dispensa a execução dos testes no novo contexto onde o componente
está sendo reutilizado.
Apesar da popularização atual do DBC, não existe um consenso geral sobre a definição
de um componente de software, que é a unidade básica de desenvolvimento do DBC.
Porém, um aspecto muito importante é sempre ressaltado na literatura: um componente
deve encapsular dentro de si seu projeto e implementação, além de oferecer interfaces
bem definidas para o meio externo. O baixo acoplamento decorrente dessa política
proporciona muitas flexibilidades, tais como: i) facilidade de montagem de um sistema
a partir de componentes COTS3 ; e ii) facilidade de substituição de componentes que
implementam interfaces equivalentes.
Uma definição de componentes, adotada na maioria dos trabalhos publicados atualmente, foi proposta em 1998 (Szyperski, 1998). Segundo Szyperski, um componente de
software é uma unidade de composição com interfaces especificadas através de contratos
e dependências de contexto explícitas. Sendo assim, além de explicitar as interfaces com
os serviços oferecidos (interfaces providas), um componente de software deve declarar
explicitamente as dependências necessárias para o seu funcionamento, através de suas
(interfaces requeridas).
Além dessa distinção clara entre interfaces providas e requeridas, os componentes
seguem três princípios fundamentais, que são comuns à tecnologia de objetos (Chessman
and Daniels, 2000):
3 do
inglês Common-Off-The-Shelf
23
2.5. PROJETO DE SOFTWARE COM REUSO
1. Unificação de dados e funções: Um componente deve encapsular o seu estado
(dados relevantes) e a implementação das suas operações oferecidas, que acessam
esses dados. Essa ligação estreita entre os dados e as operações ajudam a aumentar
a coesão do sistema;
2. Encapsulamento: Os clientes que utilizam um componente devem depender
somente da sua especificação, nunca da sua implementação. Essa separação de
interesse4 reduz o acoplamento entre os módulos do sistema, além de melhorar a
sua manutenção;
3. Identidade: Independentemente dos valores dos seus atributos de estado, cada
componente possui um identificador único que o difere dos demais.
Existem várias tecnologias para se implementar componentes, entre as mais famosas
estão: CORBA do OMG (Object Management Group), COM/COM+ da Microsoft e
Entreprise JavaBeans (EJB) da Sun. Contudo, todas elas seguem um modelo dependente
de plataforma. Por essa razão decidimos utilizar o COSMOS* no trabalho apresentado. A
próxima seção vai apresentar as motivações da metodologia COSMOS*, suas vantagens
e implementação.
Metodologia COSMOS*
O modelo COSMOS* (Gayard et al., 2008) usa recursos de linguagem de programação e
padrões de projeto amplamente conhecidos para representar arquiteturas de software explicitamente no código do programa. Este modelo define a especificação e implementação
de componentes, conectores, configurações arquitetônicas e componentes compostos.
Ele é dividido em um modelo de especificação, pelo qual um componente expõe
as suas especificações; um modelo de implementação, que orienta a implementação
interna de um componente, um modelo de conector, que especifica a conexão entre
os componentes através de conectores, e um modelo de composição, pelo qual novos
componentes ou sistemas inteiros são construídos utilizando componentes existentes.
Portanto, os principais objetivos do modelo COSMOS* são: fornecer um acompanhamento a partir da arquitetura de software até código do programa e facilitar na manutenção
do software. Este modelo reduz o acoplamento entre os módulos da arquitetura e ainda
oferece reutilização de software. Embora COSMOS* tenha quatro sub-modelos (especificação, implementação conector, e composição), este trabalho utiliza apenas dois que são
4 do
inglês separation of concerns
24
2.5. PROJETO DE SOFTWARE COM REUSO
o modelo de especificação e modelo de implementação, pois os conectores são classes
simples. É importante citar todos os componentes do framework foram implementados
usando COSMOS*.
A figura 2.6 mostra um exemplo de um componente especificado com o COSMOS*.
Nesta figura podemos identificar as principais propriedades de um componente especificado com o COSMOS*. Elas são:
Figura 2.6 Exemplo de Componente COSMOS* (Gayard et al., 2008)
• A interface provida (IA na figura) é a única parte do componente que o usuário
tem acesso direto. Dessa forma para utilizar o componente ele não precisa saber de
detalhes da implementação;
• A interface requerida (IB na figura) representa a restrição do componente. Para ele
funcionar adequadamente o usuário tem que passar uma classe que implemente
essa interface;
• A classe Facade1 implementa a interface provida e funciona como o padrão de
projeto facade. Em outras palavras, essa classe é responsável por delegar as funções
da interface provida para as classes que realmente implementam elas;
• A classe componenteFactory implementa o padrão de projeto Factory Method. Em
outras palavras, É responsável por instanciar as classes internas do componente;
25
2.5. PROJETO DE SOFTWARE COM REUSO
• A classA neste exemplo é a classe que implementa os serviços do componente.
Como mostra a figura ela depende diretamente da interface requerida;
• Por fim, temos a classe manager, que é responsável por gerenciar todo acesso ao
componente.
Todos os serviços criados no framework proposto nesse trabalho usar a especificação
COSMOS*. Em outras palavras, eles são componentes e a implementação deles é muito
parecida com a figura 2.6.
2.5.3
Arquitetura de Software
A arquitetura de software, através de um alto nível de abstração, define o sistema em
termos de seus componentes arquiteturais, que representam unidades abstratas do
sistema; a interação entre essas entidades, que são materializadas explicitamente através
dos conectores; e os atributos e funcionalidades de cada um (Sommerville, 2001), um
exemplo disto é apresentado na Figura 2.7.
Figura 2.7 Exemplo configuração arquitetural em UML ( Adaptada de (Sommerville, 2001))
Esta figura tem a interface provida chamada IA_Provided, e a interface requerida
chamada IA_Required. O conector conn é o mediador das atividades entre os componentes. A maneira que os componentes e conectores são ligados entre si é definido pela
configuração da arquitetura.
Por conhecerem o fluxo interativo entre os componentes do sistema, é possível nos
conectores, estabelecer protocolos de comunicação e coordenar a execução dos serviços
que envolvam mais de um componente do sistema.
Essa visão estrutural do sistema em um alto nível de abstração proporciona benefícios
importantes, que são imprescindíveis para o desenvolvimento de sistemas de software
complexos. Os principais benefícios são: i) a organização do sistema como uma composição de componentes lógicos; ii) a antecipação da definição das estruturas de controle
globais; iii) a definição da forma de comunicação e composição dos elementos do projeto;
e iv) o auxílio na definição das funcionalidade de cada componente projetado. Além
disso, uma propriedade arquitetural representa uma decisão de projeto relacionada a
algum requisito não-funcional do sistema, que quantifica determinados aspectos do seu
26
2.5. PROJETO DE SOFTWARE COM REUSO
comportamento, como confiabilidade, reusabilidade e modificabilidade (Bass et al., 2003;
Sommerville, 2001).
A presença de uma determinada propriedade arquitetural pode ser obtida através da
utilização de estilos arquiteturais que possam garantir a preservação dessa propriedade
durante o desenvolvimento do sistema (Shaw and Garlan, 1996; Monroe et al., 1997).
Um estilo arquitetural caracteriza uma família de sistemas que são relacionados pelo
compartilhamento de suas propriedades estruturais e semânticas. Esses estilos definem
inclusive restrições de comunicação entre os componentes do sistema. A maneira como
os componentes de um sistema ficam dispostos é conhecida como configuração.
As propriedades arquiteturais são derivadas dos requisitos do sistema e influenciam,
direcionam e restringem todas as fases do seu ciclo de vida. Sendo assim, a arquitetura de
software é um artefato essencial no processo de desenvolvimento de softwares modernos,
sendo útil em todas as suas fases (Chen et al., 2002).
A importância da arquitetura fica ainda mais clara no contexto do desenvolvimento
baseados em componentes. Isso acontece, uma vez que na composição de sistemas, os
componentes precisam interagir entre si para oferecer as funcionalidades desejadas.
Além disso, devido à diferença de abstração entre a arquitetura e a implementação de um sistema, um processo de desenvolvimento baseado em componentes deve
apresentar uma distinção clara entre os conceitos de componente arquitetural, que é
abstrato e não é necessariamente instanciável; e componente de implementação, que
representa a materialização de uma especificação em alguma tecnologia específica e deve
necessariamente ser instanciável.
2.5.4
Desenvolvimento Centrado na Arquitetura
A arquitetura de software é um artefato essencial no ciclo de vida do software e deve
auxiliar todas as suas fases (Chen et al., 2002). A principal motivação para isso é que a
abstração oferecida pela arquitetura de software possibilita uma análise estrutural em alto
nível e um melhor entendimento do sistema.
Um processo de desenvolvimento centrado na arquitetura, além de usufruir dessa
abstração arquitetural em todas as fases do desenvolvimento, deve fornecer meios de
especificar a arquitetura do sistema, obedecendo as restrições impostas pelos seus requisitos não-funcionais (You-Sheng and Yu-Yun, 2003). Além disso, enquanto os processos
tradicionais consideram a composição do sistema como sendo uma atividade de implementação (Chessman and Daniels, 2000), nos processos centrados na arquitetura, a
composição dos componentes deve ser considerada em diferentes fases do desenvol-
27
2.5. PROJETO DE SOFTWARE COM REUSO
vimento. Em outras palavras, a composição deve ser pensada nos diversos níveis de
abstração (modelo abstrato, especificação detalhada e implementação) (Chen et al., 2002).
As principais vantagens decorrentes da adoção de um processo de desenvolvimento
centrado na arquitetura são: i) facilidade de se especificar propriedades não-funcionais
no sistema; ii) reutilização em um nível maior de granularidade; iii) redução do tempo
de desenvolvimento; iv) representação estrutural explícita; v) compreensão facilitada do
sistema; e vi) facilidade de manutenção.
Motivadas principalmente pela reutilização de software em larga escala, é cada vez
maior o número de empresas que utilizam alguma técnica de desenvolvimento centrado
na arquitetura (Koskimies, 2001).
28
3
RetriBlog: Um Framework Centrado na
Arquitetura para Criação de Blog
Crawlers
O RetriBlog é um framework centrado na arquitetura para criação de blog crawlers, em
que o usuário pode rapidamente especificar os requisitos de sua aplicação. Além disto,
o sistema oferece serviços para resolver problemas específicos encontrados em várias
aplicações web, por exemplo, extração de conteúdo e recomendação de tag. Este capítulo
descreve como os objetivos, descritos no Capítulo 1, foram satisfeitos pelo RetriBlog,
explicando a sua arquitetura, componentes e ferramentas utilizadas, além de detalhes
sobre o projeto de arquitetura, código e implementação.
O framework proposto aqui está publicado em vários artigos. A idéia inicial do
RetriBlog está publicado em nos artigos Arcabouço para criação de Blog Crawlers
Baseados em Contexto Ferreira et al. (2010a) e A Framework for Developing ContextBased Blog Crawlers Ferreira et al. (2010b). A arquitetura do sistema está publicada nos
artigos: An Architecture-Based Framework for Developing Blog Crawlers Ferreira et al.
(2012a) e Creating a Blog Recommendation System Through a Framework for Building
Blog Crawlers Ferreira et al. (2011b). Por fim o artigo RetriBlog: A Framework for
Creating Blog Crawlers Ferreira et al. (2012b) mostra o sistema como está descrito aqui.
3.1
Visão Geral do Sistema
O principal objetivo do RetriBlog é criar sistema que facilite a instanciação de blog
crawlers. Para isso, ele foi implementado de forma que o desenvolvedor precisa modificar
pequenos trechos de código para criar uma aplicação. É importante frisar que não é
29
3.1. VISÃO GERAL DO SISTEMA
necessário conhecer todo o código para criar uma aplicação, deve-se conhecer apenas
algumas interfaces de alto nível caracterizando assim um framework caixa cinza. O
RetriBlog pode também ser classificado como híbrido entre framework de domínio e
de aplicação. É de domínio porque facilita a instanciação de blog crawlers, para isso
conter controle de fluxo interno de um crawler. Por outro lado, o framework também
pode ser considerado de aplicação, pois ele disponibiliza serviços que podem ser usados
em qualquer contexto, não apenas para criar o crawler. A Figura 3.1 mostra uma visão
geral do framework e a seguir cada módulo é brevemente discutido.
Figura 3.1 Visão Geral do Framework
• Módulo de Especificação: Este módulo está diretamente ligado à instanciação do
framework. A fim de criar uma aplicação, o desenvolvedor deve definir especificações necessárias ao futuro blog crawler;
• Módulo de Serviços de Aplicação: Principais serviços que são usados no RetriBlog. Tais como: pré-processamento, classificação, indexação, entre outros. Os
hot spots do framework estão nesse módulo;
• Módulo de Serviços Gerais: Este módulo implementa serviços básicos que são
usados no crawler. Tais como: manipulação de strings, requisição HTTP, detecção
de idioma, entre outros. Estes serviços são frozen spots do framework;
• Módulo de Ferramentas: Este módulo contém um conjunto de ferramentas que
são usadas para realizar os serviços dos outros módulos. Tais como: Lucene,
Lingpipe, SimMetrics, entre outras.
• Módulo de Persistência: É responsável pelo armazenamento do framework em
banco de dados. Atualmente suporta o bando MySQL.
30
3.2. PROJETO ARQUITETURAL
A Figura 3.2 mostra como cada módulo acima se localiza na arquitetura do RetriBlog
baseada na arquitetura padrão de web crawlers descrita na seção 2.3.2.
Figura 3.2 Visão Geral da Arquitetura do RetriBlog
3.2
Projeto Arquitetural
Antes de explicar a arquitetura do framework é importante destacar algumas decisões de
projeto que foram tomadas e suas conseqüências.
• Framework: Foi escolhido criar um framework porque o problema tratado neste
trabalho possui muitos pontos de variabilidade;
• Framework caixa cinza: A vantagem de desenvolver um framework deste tipo é
que o usuário não precisa conhecer todos os detalhes do código para criar uma
aplicação (como no caso de caixa branca) e ao mesmo tempo não fica "preso"ao
que já está definido (como no caso de caixa preta);
• Desenvolvimento centrado na arquitetura: Utilizar esta abordagem para criar o
framework deixa cada componente bem modularizado dessa forma facilita, por
exemplo, a instanciação e evolução do sistema. Além disto, é bem mais simples de
entender o código com os artefatos da arquitetura;
• Desenvolvimento baseado em componentes(DBC): Utilizar DBC traz principalmente duas vantagens: i) aumento da produtividade, é decorrente da reutilização de
componentes existentes na construção de novos sistemas; ii) aumento da qualidade,
em conseqüência do fato dos componentes utilizados já terem sido empregados e
testados em outros contextos;
31
3.2. PROJETO ARQUITETURAL
• COSMOS*: A principal vantagem de se utilizar o COSMOS* no contexto desse
trabalho é que a especificação dele é toda definida utilizando este padrão. Desta
forma qualquer desenvolvedor que conhece o COSMOS* facilmente entende o código do RetriBLog. No COSMOS* o conceito de interfaces requeridas e conectores
são explicitamente representados.
Como o RetriBlog possui variações internas que podem ser personalizadas, a Figura 3.3 apresenta o modelo de features contendo possíveis decisões envolvendo essa
configuração.
Figura 3.3 Modelo de Características de RetriBlog
Alguns pontos desse diagrama devem ser ressaltados:
• Os atributos Extração de Conteúdo, Indexação e Coletor de URL são mandatários;
• Os atributos Classificação e Recomendação de tags são opcionais, podem ser
instanciados quantos forem necessários;
• Os sub-tipos de todos os atributos, com exceção do Pré-Processamento, são alternativos. Em outras palavras, o desenvolvedor precisa escolher um deles para cada
atributo principal;
• O atributo Pré-Processamento tem três sub-tipos mandatários e outros quatro
opcionais.
32
3.2. PROJETO ARQUITETURAL
O modelo de features pode definir o modelo de decisões. Esse modelo apresenta
possíveis instanciações e configurações do framework no contexto de diferentes cenários.
Uma breve descrição de cada hot spot é apresentada a seguir:
• Coletor de URL: executa uma pesquisa e retorna uma lista links de blogs correspondentes a uma determinada tag. Atualmente estãdo disponíveis para pesquisas
nas engenhos de busca: Technorati 1 e Icerocket 2 .
• Extração de Conteúdo: Este serviço extrai o conteúdo textual relevante do blog.
Quatro serviços já estão implementados:
– Summary Strategy(Ferreira et al. (2010b)), usa o resumo do blog para extrair
o conteúdo;
– Document Slope Curve (DSC)(Pinto et al. (2002)), procura de blocos de texto
com base na quantidade de tags no texto;
– Text-to-Tag Ratio (TTR)(Weninger and Hsu (2008)), ele usa a razão da quantidade de caracteres que não são tag pelo número de tags HTML por linha de
texto para extrair o conteúdo;
– Boilerplate Detection(Kohlschütter et al. (2010)), é um algoritmo baseado
em árvore de decisão para analisar o texto.
• Pré-Processamento: remove informações consideradas irrelevantes para a analise
do blog. A versão atual do framework disponibiliza sete tipos de pré-processamento:
Clean HTML, White Space Remover, Lowercase, English Filtering, English Stemming, Portuguese Filtering, Portuguese Stemming. Eles serão melhor explicados
na Seção 3.5.3.
• Classificação: fornece serviços de texto classificação baseada em técnicas estatísticas. Três serviços estão já implementados:
– Naive Bayes: Fornece um classificador Naive Bayes(Mitchell (1997)), com
tokens como features;
– K-nearest-neighbor (KNN): implementa o classificador k-nearest-neighbor
usando a distância euclidiana para medir a distância entre os vizinhos;
1 http://technorati.com
2 http://www.icerocket.com
33
3.2. PROJETO ARQUITETURAL
– TF-IDF: Oferece um serviço para a formação de classificadores descritivos
com base no term-frequency (TF) e inverse document frequency (IDF).
• Recomendação de tags: Recomenda tags para blogs. Quatro tipos de recomendação foram definidos:
– Por Similaridade, usa distância de Levenshtein Miller et al. (2009) para
encontrar palavras similares;
– Dicionário, usa sinônimos do WordNet para realizar a recomendação;
– Cluster, realiza a recomendação usando a técnica de agrupamento KNN;
– Classificação, realiza a recomendação usando um classificador naive bayes.
• Indexação: O serviço indexa textos para o processo de busca. Existe um serviço
implementado, ele usa a ferramenta Lucene 3 .
A Figura 3.4 mostra a arquitetura dos componentes do framework. Ela segue um
estilo de arquitetura heterogêneo baseado em componentes independentes e camadas. As
quatro camadas de alto nível foram definidas como: (i) Aplicação, contém o processo
geral criado com o framework (processo de crawler), (ii) Sistema, contém os principais
componentes do framework (kernel do sistema), (iii) Negócio, controla a persistência do
framework, e (iv) Infra, representa a conexão com o banco.
A Figura 3.5 mostra como os componentes interagem entre si de forma mais detalhada.
Nela é apresentado os componentes derivados da arquitetura básica usando o modelo de
features.
É importante destacar que alguns componentes internos da camada Sistema foram
omitidos para não deixar a figura muito grande. Por exemplo, embora o componente
Preprocessing seja representado como um único componente, que representa apenas um
componente fachada que se propaga a solicitação para outros componentes (omitidos)
que realmente implementam as estratégias de pré-processamento como apresentados na
Figura 3.3, como CleanHTML e LowerCase. O mesmo ocorre com outros componentes
na Figura 3.5.
As próximas seções vão detalhar cada uma dos módulos da arquitetura assim como
os seus componentes.
3 http://lucene.apache.org
34
3.3. ESPECIFICAÇÃO
Figura 3.4 Arquitetura dos Compoentes do Framework
3.3
Especificação
Para criar uma aplicação com o RetriBlog é necessário criar uma classe de especificação, seguindo o modelo COSMOS*. Esta classe deve conter: i) Os algoritmos de
coletar url, extração de conteúdo e indexação escolhidos; ii) Possíveis algoritmos de
pré-processamento; e o idioma da aplicação. Exemplos e mais detalhes sobre como criar
uma aplicação serão apresentados no Capítulo 4.
3.4
Serviços Gerais
Este módulo disponibiliza serviços básicos que serão utilizados pela maioria dos crawlers
a serem criados. A princípio este conjunto de classes são frozen spots. Em outras
palavras, esse módulo não possui pontos de variabilidade. Novos componentes podem
ser adicionados a ele, mas normalmente estes componentes são isolados dos outros. Os
35
3.4. SERVIÇOS GERAIS
Figura 3.5 Arquitetura dos Compoentes do Framework - Detalahada
serviços disponibilizados por este módulo são:
• Manipulação de arquivos: Este serviço fornece operações básicas com arquivos.
Algumas das operações são: salvar, carregar e alterar arquivo, descobrir o nome de
todos os arquivos de um diretório;
• Manipulação de página HTML: Este serviço disponibiliza acesso as páginas
HTML. Operações como requisição de página e salvar página em um arquivo
fazem parte desse componente;
• Manipulação de String: Serviço que disponibiliza operação como: contar a
quantidade de palavras de uma string, verificar se existe uma determinada palavra na
string, contar uma determinada palavra na string, pegar o texto entre duas substrings,
verificar a similaridade de duas strings (usando distância de Levenshtein);
36
3.5. SERVIÇOS DE APLICAÇÃO
• Manipulação de XML: Oferece operações básicas com arquivos XML, como por
exemplo, carregar um arquivo XML.
• Identificação de idioma: Este serviço disponibiliza uma operação de identificação
de idiomas. Ele tem como entrada um texto e a saída é o idioma desse texto.
• Operações com WordNet: Disponibiliza uma operação que retorna todos os
sinônimos de uma palavra que o WordNet Miller (1995) oferece. Como entrada ele
recebe uma palavra e como saída retorna uma lista de sinônimos.
Os serviços desse módulo não são usados diretamente pelo crawler. Os serviços de
aplicação que usam essas funcionalidades, ou seja, o usuário que vai criar uma aplicação
com o RetriBlog não precisa se preocupar com esses serviços, o uso deles é transparente
ao usuário.
3.5
Serviços de Aplicação
É neste módulo que os principais serviços do framework se encontram. Estes serviços
foram implementados de forma que pudessem ser facilmente re-usáveis (mais detalhes
na Seção 3.7) desta forma eles podem ser usados tanto para criar crawlers quanto para
criar aplicações específicas como recomendação de tags.
Figura 3.6 Fluxo Básico do Crawler
Como já foi dito os serviços desse módulo são os hot spots do framework, ou seja,
são a parte variável do sistema. Desta forma eles precisam ser bem descritos para que o
usuário possa escolher os mais adequados para a sua aplicação.
37
3.5. SERVIÇOS DE APLICAÇÃO
Para ilustrar o funcionamento do processo de crawler a Figura 3.6 mostra o fluxo
dele. Nele fica claro que existem serviços obrigatórios e opcionais no crawler.
As próximas seções vão explicar, em detalhes, cada um dos componentes disponibilizados neste módulo seguindo o fluxo apresentado.
3.5.1
Coletor de URL
Este serviço é o responsável pela primeira etapa do crawler, descobrir os links dos blogs
que serão analisados no resto do processo. Em resumo ele funciona assim: i) acessa
um engenho de busca de blogs (previamente escolhida pelo usuário); ii) entra na página
relacionada à uma determinada tag (Figura 3.7); iii) extrai os links dos blogs que estão
nesta página; iv) retorna a lista links dos blogs correspondentes a essa tag.
Figura 3.7 Página relacionada da Technorati relacionada a tag educação
Atualmente o RetriBlog disponibiliza para pesquisas as soluções: Technorati 4 e
Icerocket 5 . Além disto, outros 3 jornais eletrônicos também possuem este serviço: NE10
(Jornal do Comércio), FolhaPE, Diário de Pernambuco6 .
4 http://technorati.com
5 http://www.icerocket.com
6 http://ne10.uol.com.br/;
http://www.folhape.com.br/; http://www.diariodepernambuco.com.br/
38
3.5. SERVIÇOS DE APLICAÇÃO
Após coletar os links o RetriBlog parte para a etapa de extração do conteúdo principal
da página.
3.5.2
Extração de Conteúdo
O processo de Extração de Conteúdo (CE - do inglês Content Extraction) tenta detectar
e extrair conteúdo textual relevante dos blogs, ignorando menus de navegação, banners
anúncios e informações estruturais apresentadas sobre eles. Para atingir isso, o RetriBlog
implementa quatro algoritmos de CE: i) Document Slope Curve (DSC); ii) Text-to-Tag
Ratio (TTR); iii) Boilerplate Detection(BD); iv) Summary Strategy(SS). Além disto,
foi implementado uma heurística para remoção de links das páginas, Link Quota Filter
(LQF), que ajuda a melhorar os resultados desses algoritmos. Todos estes algoritmos
fazem uso de razões e proporções para detectar o conteúdo principal do documento, por
isso são independente de idiomas.
O DSC, como mostrado por (Pinto et al. (2002)), trata a página web como uma
seqüência de tokens. Estes tokens podem ser tags html ou texto. Quando há uma seção da
página com um baixo número de tags HTML, o algoritmo considera ela como conteúdo
textual relevante. Menus e informações estruturais, supostamente, contém um elevado
número de tags e uma pequena quantidade de texto, por isso eles são ignoradas pelo
algoritmo.
O algoritmo de TTR, conforme apresentado pelos autores em (Weninger and Hsu
(2008)), considera a relação entre a contagem de caracteres que não são tags HTML com
a contagem dos que são tags HTML por linha. Quando há uma linha com uma relação de
TTR alta, ou seja, há um grande número de caracteres de texto e apenas algumas tags em
uma única linha, o algoritmo considera a linha a ser conteúdo. Caso contrário, a linha é
ignorado pelo algoritmo.
Os outros dois algoritmos implementados são o BD (Kohlschütter et al. (2010)) e o
SS (Ferreira et al. (2010b)). O primeiro usa recursos de texto e informação estrutural
para detectar o conteúdo de um website. No segundo, o link e o resumo do texto do blog
são usados para recuperar o texto relevante.
Além disto, O LQF foi implementado como um complemento para reduzir o número
de listas de links, anúncios e informações estruturais antes de usar os outros algoritmos(Gottron (2007)).
É importante frisar que os algoritmos são baseados em medidas, recursos de texto e
informações estruturais. Eles não dependem do idioma do blog e não necessitam de qualquer corpus de treinamento. Além disso, eles são muito eficientes para o processamento
39
3.5. SERVIÇOS DE APLICAÇÃO
de grandes conjuntos de dados.
É importante ressaltar que de todos esses algoritmos citados apenas o Boilerplate
Detection já avia uma implementação em java. Então todos os outros algoritmos foram
implementados para o trabalho apresentado. Com o texto principal extraido o próximo
passo é eliminação de caracteres inválidos e processamento linguístico.
3.5.3
Pré-Processamento
Um problema identificado no processo de recuperação de informação em texto é que
existem palavras que têm pouco poder representativo no documento. Por exemplo, os
artigos no português, e outras palavras podem ter uma semântica similar, como as palavras
no masculino e no feminino, no plural e no singular. Para resolver esses problemas, antes
de indexar, os documentos devem ser submetidos a um pré-processamento. Existem
várias técnicas que procuram processar o texto antes de indexá-los, alguns exemplos delas
foram apresentados na seção 2.2.
O RetriBlog disponibiliza serviços que trabalha com análises léxicas, filtragem e
stemming. Para remover caracteres que não fazem parte da linguagem existem três
serviços, são eles:
• Clean HTML, este serviço remove todas as tags HTML do texto;
• White Space Remover, remove espaços em branco desnecessários;
• Lowercase, deixa todas as letras do texto minúsculas.
Todos esses serviços foram implementados usando expressões regulares em java.
Além disto, foram criados serviços de filtragem, remoção de stop words, e stemming
para os idiomas inglês e português. Para implementar eles foi usado um pacote do
Lucene7 . Para melhorar o processamento desses serviços para o português o pacote foi
alterado e novas stop words foram adicionadas a ele.
Depois do processamento realizado nesse módulo o crawler passa por duas etapas
opcionais, classificação e recomendação de tags. A primeira serve para classificar os
blogs em uma categoria específica. Já a segunda serve principalmente para alinhar as
tags de diferentes blogs.
7 http://lucene.apache.org/java/docs/index.html
40
3.5. SERVIÇOS DE APLICAÇÃO
3.5.4
Classificação
O objetivo de Classificação de Texto consiste em categorizar um conjunto de documentos, com base no seu conteúdo, em um número fixo de categorias pré-definidas.
Cada documento pode ser atribuído a uma, várias ou nenhuma categoria(Sebastiani and
Delle Ricerche (2002)). Classificação supervisionada de texto é uma abordagem em que
um conjunto de documentos são previamente etiquetados em categorias já definidas; um
classificador (algoritmo de aprendizagem de máquina) é treinado sobre este conjunto de
documentos rotulados; finalmente, o classificador treinado é capaz de atribuir classes
para novos documentos.
A classificação de texto foi considerada uma tarefa importante no contexto do presente
trabalho, pois ela organiza as páginas recuperadas por nosso framework em grupos.
Como resultado, categorias comuns podem ser determinadas, oferecendo ao usuário uma
maneira fácil de acessar informações de acordo com seus interesse.
O RetriBlog implementa três algoritmos diferentes para classificação supervisionada texto: Naive Bayes(Mitchell (1997)), KNN (k-Nearest Neighbor)(Li Baoli and Qin
(2003)), e TF/IDF - Term-Frequency(TF) e Inverse Document Frequency(IDF)(Salton
and Buckley (1988)). Esses classificadores foram implementados usando LingPipe8 que
consiste em um kit de ferramentas para processamento de texto através de técnicas computacionais linguística. Ele oferece um grande número de abordagens para a classificação
de texto. Mais detalhes sobre essa ferramenta serão mostrados na Seção 3.6.
3.5.5
Recomendação de tags
Para facilitar a recuperação de informação em redes sociais, incluindo a blogosfera, foi
criado o recurso de tags sociais. Ele permite que os usuários marquem os seus posts com
categorias que os definam. Sistemas de busca podem então aproveitar essas tags para
fornecer melhores resultados de pesquisa. No entanto, o mesmo post pode ser marcado
de forma diferente devido, por exemplo, as diferenças culturais, do conhecimento e
experiência dos usuários (Subramanya and Liu (2008)). De acordo com (Golder and
Huberman (2006)), três tipos de problemas podem ocorrer: i) Sinônimos: quando existem
múltiplas palavras com o mesmo significado; ii) Polissemia: a mesma palavra pode se
referir a conceitos diferentes; iii) Variação do Nível Básico: a variação da granularidade
da tag. Por exemplo, quando um usuário posta sobre o seu animal de estimação, ele pode
atribuir tags gerais, como "animal"ou "animal doméstico"ou aqueles específicos, como
8 http://alias-i.com/lingpipe/
41
3.5. SERVIÇOS DE APLICAÇÃO
"cachorro"ou "gato".
Para tratar desses problemas o RetriBlog possui serviços de recomendação de tag
implementados. Estes serviços tentam resolver os problemas citados de forma diferente.
Com isso o usuário pode escolher o mais adequado para a sua aplicação. Por exemplo, se o
usuário tiver um corpus com pouco ruído, ele pode usar um serviço que é baseado no post
para alcançar melhores resultados. Por outro lado, se ele precisa de uma implementação
rápida, serviços baseados na tag são mais adequados. Estes serviços tentam alcançar boa
escalabilidade, eficiência e baixa dependência do corpus. Atualmente existem quatro
serviços de recomendação implementados, são eles: i) Similarity; ii) Dictionary; iii)
Classify; e iv) Cluster.
O serviço baseado em similaridade(Similarity) foca na ortografia das palavras.
Entre outras questões este serviço tenta lidar com a conjugação do verbo, palavras no
plural, diferença de gênero, e palavras com a mesma raiz. Ele é baseado na métrica de
Distância de Levenshtein (Miller et al. (2009)). Esta métrica de distância é dada pelo
número mínimo de operações necessárias para transformar uma string em outra, com
as operações permitidas editar sendo inserção, exclusão ou substituição de um único
caractere. Ela é amplamente utilizada para aplicações que necessitam para determinar
quão semelhantes são duas strings.
Nossa implementação deste serviço utiliza a SimMetrics9 que consiste em uma
biblioteca de código aberto extensível de algoritmos para calcular métricas string. Nosso
serviço de usa a distância Levenshtein para encontrar palavras que são potencialmente
similares e recomendando-as como tags relacionadas.
O serviço baseado em dicionário(Dictionary) foca no sinônimos das palavras. Este
serviço recomenda palavras com semântica similar. A definição de sinônimo é uma
palavra com o mesmo ou quase o mesmo significado que outra palavra ou outras palavras
em um idioma. Este método utiliza um dicionário de sinônimos (thesaurus), que é um
índice simples que liga uma palavra a seus sinônimos.
Desta forma, o nosso serviço baseado em dicionário fornece um dicionário de sinônimos para recomendar possíveis tags relacionadas. Ele usa o WordNet e a biblioteca JWI
(Java WordNet Interface) para implementá-lo. O WordNet (Fellbaum (1998)) consiste em
um grande banco de dados léxicos do Inglês em que os substantivos, verbos, adjetivos
e advérbios são agrupados em conjuntos de sinônimos cognitivos (synsets), cada um
expressando um conceito distinto. JWI10 é uma biblioteca Java para interface com banco
9 http://staffwww.dcs.shef.ac.uk/people/[email protected]/simmetrics.html
10 http://projects.csail.mit.edu/jwi/
42
3.5. SERVIÇOS DE APLICAÇÃO
de dados WordNet.
O serviço baseado em classificador(Classify) utiliza um classificador baseado em
lista de palavras. Ele usa as palavras dos posts e suas respectivas freqüências para gerar
um classificador Naive Bayes. Em resumo, este serviço cria um classificador e recomenda
possíveis tags relacionadas com o resultado categorização do novo post. Assim, quando
um post é classificado, sua tag está relacionado a esta categoria.
Por fim, o serviço baseado em agrupamento(Cluster) consiste em uma versão clássica do KNN (Tan (2006)). Assim como o serviço anterior, para realizar a recomendação
usando este serviço precisamos de um corpus previamente anotado para treinar o sistema.
Após o treinamento o documento é classificado pelo voto da maioria de seus vizinhos.
Para implementar esses dois últimos serviços foram usados os algoritmos do próprio
RetriBlog descritos na Seção 3.5.4.
Depois da recomendação temos a última etapa do crawler que é a indexação e depois
armazenamento dos dados.
3.5.6
Indexação
Para facilitar a busca por documentos relevantes numa grande coleção de documentos é
importante utilizar técnicas computacionais nesse processo. Uma técnica muito utilizada
é a criação de índices invertidos (Hatcher and Gospodnetic (2004)).
A idéia do índice invertido é construir uma tabela de referências onde cada termo
ocorrido no documento é usado como um item para a lista de documentos que cada termo
ocorre. Ele funciona como um índice remissivo de um livro, ou seja, guarda as páginas
que contém as palavras e não o contrário. Então na busca ao invés de procurar página por
página até encontrar a palavra, ele vai direto para a palavra que já contém as páginas em
que ela ocorre. Além disso, outra informação importante que deve ser armazenado é a
freqüência de um termo em determinado documento. Quando concluído o processo, o
índice invertido recebe o nome de dicionário.
O RetriBlog disponibiliza um serviço de indexação que utiliza a ferramenta Lucene.
Este serviço cria um dicionário que pode ser facilmente acessado para fazer consultas.
Uma das facilidades do Lucene é que não importa a origem dos dados, seu formato ou
mesmo a linguagem em que foi escrito, desde que esses dados possam ser convertidos
para texto. Isto significa que o Lucene pode ser utilizado para indexar e buscar dados
gravados em: arquivos, páginas web em servidores remotos, documentos gravados no
sistema de arquivos local, arquivos textos, documentos Microsoft Word, documentos
HTML, arquivos PDF, ou qualquer outro formato do qual possa ser extraído informação
43
3.6. FERRAMENTAS E PERSISTÊNCIA
textual. Desta forma todos os conteúdos textuais dos blogs são indexados por esse serviço.
3.6
Ferramentas e Persistência
O módulo de ferramentas contém todas as APIs e ferramentas utilizadas para criar os
serviços de aplicação e gerais, entre elas estão:
• Lucene e Lingpipe, para extração e recuperação de texto;
• Hibernate, que lidar com a persistência de dados;
• HttpClient, recuperação de página HTTP;
• Google Language Detection, para detectar o idioma de textos;
• Boilerpipe, para extração do conteúdo principal da página;
• SimMetrics, para comparar similaridade entre strings.
Este módulo torna transparente o uso de cada uma dessas ferramentas, proporcionando
um acesso fácil a elas o que diminui o tempo de aprendizagem do usuário para usar
cada uma dessas funcionalidades. Por exemplo, o usuário não precisa se aprofundar em
detalhes sobre a API do Lucene, a fim de construir uma aplicação que usa ela. Em vez
disso, ele poderia delegar as funções do Lucene do framework. Como no RetriBlog todas
essas ferramentas estão encapsuladas em componentes, o usuário só precisa escolher o
componente com a operação que ele deseja utiliza e instanciar ele.
O módulo de persistência é responsável pelo armazenamento dos dados. Atualmente
o RetriBlog suporta o banco MySQL. No sistema tem uma classe que representa o post,
com os seguintes atributos:
• Id: Identificador da instância, gerado automaticamente pelo banco;
• Title: Título da postagem;
• Author: Autor da postagem;
• Excerpt: Resumo da postagem;
• Created: A data da postagem;
• Permalink: Link da postagem;
44
3.7. IMPLEMENTAÇÃO
• HTMLText: Texto da postagem com HTML;
• CompleteText: Texto completo da postagem, sem HTML;
• AnalyzedText: Texto da postagem depois de passar por algum pré-processamento;
• Charset: Codificação da página;
• Category: Categoria da postagem;
• Company: Companhia que mantém o blog.
É importante notar que o texto da postagem é armazenado de três formas.
• HTMLText: Texto da postagem com HTML. Essa forma de armazenar é importante pois o HTML algumas vezes pode significar que uma palavra é importante
para o texto. Com isso uma futura etapa de extração se torna mais fácil.
• CompleteText: Texto completo da postagem, sem HTML. O texto sem HTML,
mas sem passar pelo processo de pré-processamento é importante pois em algumas
aplicações é necessário ter as palavras completas.
• AnalyzedText: Texto da postagem depois de passar por algum pré-processamento.
Esse tipo de armazenamento ajuda principalmente em sistemas de busca pois
diminui bastante o espaço a ser buscado.
Todo o acesso ao banco é realizado através do hibernate11 , um framework desenvolvido em java para persistência. O sistema disponibiliza operações como salvar e
carregar post como um serviço, igual aos descritos nas seções anteriores. Além disto, é
importante frisar que os dados também ficam armazenados em um índice, como descrito
na Seção 3.5.6. Então temos duas formas de armazenamento, o índice ajuda a busca dos
posts, já o banco de dados armazena mais informações sobre eles.
3.7
Implementação
A fim de atender requisitos de engenharia de software como reuso e facilidade de evolução,
e melhorar a rastreabilidade entre a arquitetura de software e código-fonte, o RetriBlog
segue uma implementação baseada em componentes e centrado na arquitetura.
11 http://www.hibernate.org/
45
3.7. IMPLEMENTAÇÃO
Os componentes foram criados com base no modelo de implementação COSMOS*.
O COSMOS* usa recursos de linguagem de programação, tais como interfaces, classes e
pacotes, e um conjunto de padrões de projeto para representar a arquitetura de software
explicitamente no código do programa. Além disso, as orientações definidas pelo modelo
COSMOS* também melhora a modularidade do sistema e da evolução interna dos
componentes de software.
Para ilustrar a implementação, a Figura 3.8 mostra o diagrama de classes do componente Similaridade, que implementa uma técnica de recomendação tag.
Figura 3.8 Exemplo de Componente - Similaridade
De acordo com o modelo COSMOS*, o usuário tem acesso apenas ao pacote spec
pacote e a classe SimilarityFactory. A interfaceiManager é definida pelo COSMOS*
e fornece as operações básicas do componente, por exemplo, as operações para obter
instâncias para as interfaces providas pelo componente getProvidedInterface e para a
ligar um objeto a uma interface requerida setRequiredInterface. A interface ISimilarity é
a interface provida, ela contém as operações do serviço de recomendação de tag.
Além disso, outras informações importantes são:
• O framework está todo implementado em Java e seguindo as especificações COSMOS*;
• Todos os componentes foram testados usando gUnit;
• O framework está disponível para download no site: https://sourceforge.net/projects/retriblog/;
46
3.8. COMO CRIAR UMA APLICAÇÃO COM O RETRIBLOG
• o RetriBlog segue a licença GNU General Public License (GPL)12 .
3.8
Como Criar uma Aplicação com o RetriBlog
Para criar uma aplicação usando o RetriBlog basta seguir os seguintes passos:
3.9
1º Passo
Fazer o download do RetriBLOG no link:
http://sourceforge.net/projects/retriblog/files/RetriBLOG.rar/download
3.10
2º Passo
Importar para o eclipse.
1. Abra o eclipse;
2. Clique em file->import->existing Project into Work space
3. Escolha o arquivo do RetriBLOG.
3.11
3º Passo
Crie um banco de dados (no momento só está disponibilizado a persistência em MySQL)
com qualquer nome.
3.12
4º Passo
No projeto, abra o arquivo hibernate.cfg.xml e faça as seguintes configurações:
1. No atributo <property name="hibernate.connection.url»
jdbc:mysql://localhost/NOMEDOBANCO?autoReconnect=true </property> substituir a palavra NOMEDOBANCO, pelo nome do banco;
2. Trocar o atributo update por create <property name="hibernate.hbm2ddl.auto»update</property>.
Obs: Depois de executar uma vez o create deve ser mudado de novo para update.
12 http://www.gnu.org/licenses/gpl.html
47
3.13. 5º PASSO
3.13
5º Passo
Criar uma classe crawler specification. Essa classe deve conter: O coletor de url do site
que se deseja fazer o crawler, o tipo de extração de conteúdo, o tipo de pré-processamento,
o tipo de persistência, o idioma da aplicação e quais tags se deseja extrair. Existem quatro
exemplos de crawler specification no pacote grow.retriblog.crawlerSpecification.
3.14
6º Passo
Abrir a classe crawler do pacote demos e mudar o TechnoratiSpecificationExample para
o crawler specification criado.
3.15
7º Passo
Executar essa classe.
48
4
Estudos de Caso
Este capítulo apresenta um conjunto de estudos de caso utilizando o RetriBlog. Os estudos
de caso enfatizam as vantagens do uso das abordagens de componentes e desenvolvimento
centrado na arquitetura. Eles servem para mostrar principalmente a flexibilidade e a
facilidade de reuso do framework.
4.1
Estudo de Caso 1: Sistema Baseados em Agentes
para Recuperar Blogs da Tecnhorati
Este sistema consiste de um blog crawler indexados pela Tecnhorati. Contudo, para
paralelizar o sistema, foi criada uma aplicação usando agentes. As próximas seções
descrevem a arquitetura dos agentes, a configuração do framework utilizada e a execução
da aplicação.
4.1.1
Configuração dos Agentes
A arquitetura proposta contém os agentes, módulo de configuração e módulo de persistência. A Figura 4.1 mostra os detalhes da arquitetura.
A aplicação contém dois tipos de agentes, agente gerenciador(AG) e agente de busca
(AB). Esses agentes foram criados usando o framework Jade (Bellifemine et al., 2007).
O AG gerencia os agentes do framework. Também é responsável por adicionar e
remover os ABs. Este agente fornece os seguintes comportamentos:
• Gestão - verifica informações contidas na camada configuração e atualiza os AB;
• Adição - ele cria novos agente no ambiente;
49
4.1. ESTUDO DE CASO 1: SISTEMA BASEADOS EM AGENTES PARA
RECUPERAR BLOGS DA TECNHORATI
• Remoção - ele remove os agentes do meio ambiente.
Figura 4.1 Arquitetura dos Agentes
Os ABs são responsáveis por fazer o buscar e armazenar os blogs. Em outras palavras,
ele utiliza os serviços do RetriBlog para recuperar informações de blogs e armazenar as
informações em um banco de dados, além de criar um índice invertido. Cada agente de
busca é criado para fazer o crawler de uma categoria. Por exemplo, se eu quiser fazer o
crawler das categorias de educação e esportes um agente de cada tipo é criado.
O módulo de configuração descreve as informações necessária para que o AG gerencie
os ABs. Para isso foi criado uma ontologia que descreve as informações necessárias para
que os ABs sejam criados. Dentre essas informações estão a empresa que se deseja fazer
o crawler (nesse estudo de caso escolhemos Technorati) e a categoria que o AB vai fazer
a busca.
Por fim, o módulo de persistência utiliza os serviços de indexação e acesso ao banco
MySQL disponibilizados pelo framework.
4.1.2
Configuração do Framework
A Figura 4.2 mostra a configuração dos componentes usados nesse estudo de caso.
Deste diagrama podemos observar os componentes que foram escolhidos para criar
essa aplicação, temos:
• Coletor de URLS: Technorati;
• Extração de conteúdo: Summary Strategy;
50
4.1. ESTUDO DE CASO 1: SISTEMA BASEADOS EM AGENTES PARA
RECUPERAR BLOGS DA TECNHORATI
Figura 4.2 Diagrama de Componentes - Estudo de Caso 1
• Pré-processamento: English Filtering;
• Indexação: Lucene Index.
Para carregar os componentes dessa configuração é necessário criar o código de
especificação 4.1.
Código 4.1 Classe de Especificação do Estudo de Caso 1
1
2
public class Case1Specification {
3
4
ITechnoratiUrlCollector
urlCollector ;
5
ISummaryStrategy
contentExtraction ;
6
IEnglishFiltering
preprocessing ;
7
ILuceneIndexing
index ;
8
String
language ;
9
10
IManager m a n a g e r U r l C o l l e c t o r ;
11
IManager m a n a g e r C o n t e n t E x t r a c t i o n ;
12
IManager m a n a g e r P r e p r o c e s s i n g ;
13
IManager managerIndex ;
14
15
public Case1Specification (){
16
17
managerUrlCollector = TechnoratiUrlCollectorFactory
18
. getManager ( ) ;
51
4.1. ESTUDO DE CASO 1: SISTEMA BASEADOS EM AGENTES PARA
RECUPERAR BLOGS DA TECNHORATI
19
managerContentExtraction = SummaryStrategyFactory
20
. getManager ( ) ;
21
managerPreprocessing = E n g l i s h F i l t e r i n g F a c t o r y . getManager ( ) ;
22
managerIndex = LuceneIndexingFactory . getManager ( ) ;
23
24
managerUrlCollector . setRequiredInterface ( " IHttpUtils " ,
25
H t t p U t i l s F a c t o r y . getManager ( ) . g e t P r o v i d e d I n t e r f a c e ( ) ) ;
26
27
managerContentExtraction . setRequiredInterface ( " IHttpUtils " ,
28
H t t p U t i l s F a c t o r y . getManager ( ) . g e t P r o v i d e d I n t e r f a c e ( ) ) ;
29
30
managerContentExtraction . setRequiredInterface
31
( " IWhiteSpaceRemover " , WhiteSpaceRemoverFactory . getManager ( )
32
. getProvidedInterface ( ) ) ;
33
34
managerContentExtraction . setRequiredInterface
35
( " IStringManipulation " , StringManipulationFactory
36
. getManager ( ) . g e t P r o v i d e d I n t e r f a c e ( ) ) ;
37
38
urlCollector = ( ITechnoratiUrlCollector )
39
managerUrlCollector . getProvidedInterface ( ) ;
40
41
c o n t e n t E x t r a c t i o n = ( ISummaryStrategy )
42
managerContentExtraction . getProvidedInterface ( ) ;
43
44
preprocessing = ( IEnglishFiltering )
45
managerPreprocessing . getProvidedInterface ( ) ;
46
47
index = ( ILuceneIndexing )
48
managerIndex . g e t P r o v i d e d I n t e r f a c e ( ) ;
49
50
l a n g u a g e = " en " ;
51 }
Este código segue o modelo COSMOS*, ou seja:
• Instância as interfaces e seus gerenciadores(Linhas 4-13);
• Configura as interfaces requeridas (Linhas 17-36);
52
4.1. ESTUDO DE CASO 1: SISTEMA BASEADOS EM AGENTES PARA
RECUPERAR BLOGS DA TECNHORATI
• Recebe as interfaces providas(Linhas 38-48).
Para executar o crawler é necessário criar o método main como mostrado abaixo.
Código 4.2 Método Principal
1
2
p u b l i c s t a t i c v o i d main {
3
C r a w l e r c r a w l e r = new C r a w l e r ( new C a s e 1 S p e c i f i c a t i o n ( ) ) ;
4
crawler . runCrawler ( ) ;
5 }
4.1.3
Execução da Aplicação
Como já foi dito esta aplicação faz o crawler de blogs da Technorati que estiverem no
idioma inglês. Para criar o arquivo de configuração, descrito na arquitetura de agentes, as
tags da Technorati foram obtidas através da página de tags mais usadas1 . O AG percebe
a mudança no arquivo de configuração e cria novos AB. Para cada nova categoria da
Technorati, é criado um novo agente de software.
A Figura 4.3 mostra uma tela com os agentes criados para algumas categorias. Do
lado esquerdo da figura temos, por exemplo, o Searcher_2010, Searcher_3d-tv, Searcher_3d, e assim por diante. Eles são agentes de busca das categorias 2010, 3d-tv e 3d
respectivamente.
Figura 4.3 Tela do Jade
A aplicação está publicada no artigo An Agent-Based Semantic Web Blog Crawler
(Ferreira et al., 2011a).
1 http://technorati.com/tag/
53
4.2. ESTUDO DE CASO 2: SISTEMA DE RECOMENDAÇÃO DE BLOGS
4.2
Estudo de Caso 2: Sistema de Recomendação de Blogs
Este estudo de caso cria uma aplicação que recomenda blogs para ajudar estudantes com
interações em fórum educacionais. Este sistema está sendo usado no ambiente MASSAYO
(Bittencourt et al., 2009). Este ambiente visa construir uma plataforma educacional com
base em tecnologias da Web Semântica, oferecendo as seguintes vantagens:
• Extensibilidade;
• Garantir a geração de conhecimento participativo;
• Possuir uma estrutura que leva em conta as características de cada usuário, tornando
o sistema adaptável a estes.
Diante deste contexto, as aplicações propostas neste estudo de caso lidam com os
aspectos citados acima na ferramenta fórum disponibilizada pelo MASSAYO. O estudo
de caso apresentado aqui é:
• Extensível porque o desenvolvedor tem permissão para criar novas aplicações,
alterando poucas linhas de código.
• Usa textos de blogosfera assegurar a criação de conhecimento universal e participativo.
• O sistema de recomendação mapeia cada aluno e recomenda blogs específicos para
cada um(adaptável).
Este estudo de caso vai ser dividido em três seções configuração do framework,
criação do sistema de recomendação, execução da aplicação.
4.2.1
Configuração do Framework
Esta aplicação recupera blogs da IceRocket relacionados a categorias especificas. O
sistema de recomendação que será detalhado na próxima seção utiliza as informações
adquiridas pelo crawler para recomendar blogs para os estudantes.
Assim como no estudo de caso anterior precisamos escolher os componentes para a
aplicação. A configuração do crawler ficou da seguinte maneira:
• Coletor de URLS: IceRocket;
54
4.2. ESTUDO DE CASO 2: SISTEMA DE RECOMENDAÇÃO DE BLOGS
• Extração de conteúdo: TTR;
• Pré-processamento: English Filtering;
• Indexação: Lucene Index.
A Figura 4.4 mostra o diagrama de componentes.
Figura 4.4 Diagrama de Componentes - Estudo de Caso 2
O código para carregar esses componentes é bastante parecido com o do estudo de
caso 1. Com o objetivo de ressaltar a facilidade de criação de aplicações com o RetriBlog
o Código 4.3 mostra a criação desta aplicação.
Código 4.3 Classe de Especificação do Estudo de Caso 2
1
2
public class Case2Specification {
3
4
IIceRocketUrlCollector
urlCollector ;
5
ITTR
contentExtraction ;
6
IEnglishFiltering
preprocessing ;
7
ILuceneIndexing
index ;
8
String
language ;
9
10
IManager m a n a g e r U r l C o l l e c t o r ;
11
IManager m a n a g e r C o n t e n t E x t r a c t i o n ;
12
IManager m a n a g e r P r e p r o c e s s i n g ;
13
IManager managerIndex ;
55
4.2. ESTUDO DE CASO 2: SISTEMA DE RECOMENDAÇÃO DE BLOGS
14
15
public Case2Specification (){
16
17
managerUrlCollector = IceRocketUrlCollectorFactory
18
. getManager ( ) ;
19
m a n a g e r C o n t e n t E x t r a c t i o n = TTR F a c t o r y . g e t M a n a g e r ( ) ;
20
managerPreprocessing = E n g l i s h F i l t e r i n g F a c t o r y . getManager ( ) ;
21
managerIndex = LuceneIndexingFactory . getManager ( ) ;
22
23
managerUrlCollector . setRequiredInterface ( " IHttpUtils " ,
24
H t t p U t i l s F a c t o r y . getManager ( ) . g e t P r o v i d e d I n t e r f a c e ( ) ) ;
25
26
managerContentExtraction . setRequiredInterface ( " IHttpUtils " ,
27
H t t p U t i l s F a c t o r y . getManager ( ) . g e t P r o v i d e d I n t e r f a c e ( ) ) ;
28
29
managerContentExtraction . setRequiredInterface
30
( " IWhiteSpaceRemover " , WhiteSpaceRemoverFactory . getManager ( )
31
. getProvidedInterface ( ) ) ;
32
33
managerContentExtraction . setRequiredInterface
34
( " IStringManipulation " , StringManipulationFactory
35
. getManager ( ) . g e t P r o v i d e d I n t e r f a c e ( ) ) ;
36
37
urlCollector = ( IIceRocketUrlCollector )
38
managerTagParser . g e t P r o v i d e d I n t e r f a c e ( ) ;
39
40
c o n t e n t E x t r a c t i o n = ( ITTR )
41
managerContentExtraction . getProvidedInterface ( ) ;
42
43
preprocessing = ( IEnglishFiltering )
44
managerPreprocessing . getProvidedInterface ( ) ;
45
46
index = ( ILuceneIndexing )
47
managerIndex . g e t P r o v i d e d I n t e r f a c e ( ) ;
48
49
l a n g u a g e = " en " ;
50 }
56
4.2. ESTUDO DE CASO 2: SISTEMA DE RECOMENDAÇÃO DE BLOGS
Esta especificação é similar ao do primeiro estudo de caso:
• Instância as interfaces e seus gerenciadores(Linhas 4-13);
• Configura as interfaces requeridas (Linhas 17-35);
• Recebe as interfaces providas(Linhas 37-47).
4.2.2
Criação do Sistema de Recomendação
Este sistema usa os componentes de classificação, usando redes bayseanas, e o English
filtering disponibilizados pelo framework. O objetivo deste estudo de caso é mostrar
a utilização dos componentes do RetriBlog para criar outros tipos de aplicação, dessa
forma reforçando o reuso destes componentes.
Como já foi dito esse sistema recomenda blogs para ajudar nas interações do fórum do
ambiente MASSAYO. Em suma, este sistema monitora a discussão entre os estudantes no
fórum e identifica possíveis duvidas dos estudantes. Depois disso, o sistema recomenda
um blog que pode ajudar a resolver a dúvida.
O sistema pode classificar os postagem do usuário como:
• Dúvida, dúvidas que o usuário posta no fórum;
• Explicação, respostas para dúvidas postadas no fórum;
• Comentário neutro, que não foram classificados nas classes anteriores.
O sistema recomenda blogs para postagens classificados como dúvida. A Figura 4.5
mostra o diagrama de atividades do sistema.
Abaixo as descrevem-se as fases do diagrama:
• Interação do Usuário: O usuário interage com o fórum, e cada postagem é enviado
para o sistema de recomendação;
• Classificação da Postagem: O sistema de recomendação classifica a postagem
(usando o componente do RetriBlog) como dúvida, explicação ou comentário
neutro;
• Eliminação de Stop Words: Usando o componente English Filtering, o sistema de
recomendação elimina todas as stop words do texto;
57
4.2. ESTUDO DE CASO 2: SISTEMA DE RECOMENDAÇÃO DE BLOGS
Figura 4.5 Diagrama de Atividades
• Detecção do assunto da Postagem: Para determinar o assunto da postagem, o sistema de recomendação usa as palavras chaves providas pelo ambiente MASSAYO.
Estas palavras são criadas quando o curso se inicia;
• Recomendação de Blog: O sistema testa a postagem. Se for uma dúvida, o sistema
sugere um blog para o usuário. Caso contrário, o sistema não faz nada.
4.2.3
Execução da aplicação
Para avaliar o sistema de recomendação foi usando o fórum do ambiente MASSAYO
e 12 estudantes da disciplina de engenharia de software. Depois de uma postagem do
professor os estudantes interagem no fórum. O objetivo do sistema é manter os estudantes
sempre ativos. Então para avaliar a recomendação usamos como parâmetro a quantidade
de estudantes que interagiram depois da recomendação.
A interação começa com o professor fazendo uma postagem(Figura 4.6). Depois
disso, seguem com as postagens dos alunos(Figura 4.7).
Após a interação do sistema, recomendando blogs para os estudantes com dúvidas, foi
percebida uma melhora na participação dos alunos no fórum e a qualidade das postagens
aumentou. O sistema não tem como garantir que todos os estudantes participem do fórum,
mas melhora a discussão gerada nesta ferramenta. A Figura 4.8 apresenta um gráfico que
mostra como as interações aumentaram depois da recomendação. A linha vermelha na
figura mostra o momento exato da recomendação e depois fica claro que as interações
aumentaram.
Este sistema foi inicialmente publicado em Creating a Blog Recommendation System
Through a Framework for Building Blog Crawlers (Ferreira et al., 2011b) e depois foi
58
4.2. ESTUDO DE CASO 2: SISTEMA DE RECOMENDAÇÃO DE BLOGS
Figura 4.6 Postagem do Professor
Figura 4.7 Postagem dos Alunos
Figura 4.8 Gráfico das Interações no Fórum
publicado com mais detalhes em Improving the Dynamic Interaction in Virtual Learning
Environments Through an Ontology-based Recommender System (Melo et al., 2011).
59
4.3. ESTUDO DE CASO 3: RASTREADOR DE NOTÍCIAS PARA CLIPAGEM
4.3
Estudo de Caso 3: Rastreador de Notícias para Clipagem
Do inglês clipping, o termo "clipagem"define o processo de selecionar notícias em meios
de informação, como jornais, revistas e sites, para resultar em um conjunto de recortes
sobre os assuntos de total interesse de quem os coleciona (Baeza-Yates and Ribeiro-Neto,
1999). Os profissionais do jornalismo, esse método é utilizado para vários objetivos
entre os quais selecionar notícias semelhantes a outra que ele possui, com o objetivo de
definir a veracidade desta notícia. O profissional da área busca a informação requerida em
diversos meios de comunicação. Se a busca retornar informações semelhantes à notícia
que ele possui, é comprovada que esta é verdadeira e ela é então publicada. Além disto,
com o conjunto de notícias similares, os jornalistas podem adquirir mais informações
sobre um determinado acontecimento.
Contudo, antes de realizar a clipagem é necessário obter as notícias. Com esse fim
foi criado um crawler para obter notícias na web. O objetivo deste estudo de caso é
mostrar que o RetriBlog também pode ser usado para criar crawlers de notícias facilmente.
Este fato acontece pela similaridade de como as notícias e os blogs são construídos, a
Figura 4.9 mostra essa semelhança.
Figura 4.9 Semelhança entre Blog e Site de Notícias
60
4.3. ESTUDO DE CASO 3: RASTREADOR DE NOTÍCIAS PARA CLIPAGEM
Este estudo de caso vai ser dividido em duas seções: i) Configuração do Framework;
ii) Execução da aplicação.
4.3.1
Configuração do Arcabouço
Esta aplicação recupera notícias de três sites de notícias de Pernambuco, são eles: FolhaPE, NE10, diário de Pernambuco2 . Como esse crawler coleta URLS de três sites
diferentes, foi criado um processo para cada um, ou seja, foram usados três componentes de coletor de URLS que foram criados especificamente para essa aplicação. Os
componentes escolhidos para a aplicação foram:
• Coletor de URLS: FolhaPE, NE10 e diário de Pernambuco;
• Extração de conteúdo: DSC;
• Pré-processamento: Portuguese Filtering;
• Indexação: Lucene Index.
A Figura 4.10 mostra o diagrama de componentes.
Figura 4.10 Diagrama de Componentes - Estudo de Caso 3
O código dessa aplicação seria similar aos códigos mostrados nos outros dois estudos
de caso. Contudo, ele apresenta uma diferença fundamental, são instanciados três
coletores de URLS. O Código 4.4 mostra a especificação.
2 http://www.folhape.com.br/,
www.ne10.uol.com.br,http://www.diariodepernambuco.com.br/
61
4.3. ESTUDO DE CASO 3: RASTREADOR DE NOTÍCIAS PARA CLIPAGEM
Código 4.4 Classe de Especificação do Estudo de Caso 3
1
2
public class Case3Specification {
3
4
IFolhaUrlCollector
urlCollector1 ;
5
INE10UrlCollector
urlCollector2 ;
6
IDiarioUrlCollector
urlCollector3 ;
7
IDSC
contentExtraction ;
8
IPortugueseFiltering
preprocessing ;
9
ILuceneIndexing
index ;
String
language ;
10
11
12
IManager m a n a g e r U r l C o l l e c t o r 1 ;
13
IManager m a n a g e r U r l C o l l e c t o r 2 ;
14
IManager m a n a g e r U r l C o l l e c t o r 3 ;
15
IManager m a n a g e r C o n t e n t E x t r a c t i o n ;
16
IManager m a n a g e r P r e p r o c e s s i n g ;
17
IManager managerIndex ;
18
19
public Case3Specification (){
20
21
managerUrlCollector1 = F o l h a U r l C o l l e c t o r F a c t o r y . getManager ( ) ;
22
managerUrlCollector2 = NE10UrlCollectorFactory . getManager ( ) ;
23
managerUrlCollector3 = D i a r i o U r l C o l l e c t o r . getManager ( ) ;
24
m a n a g e r C o n t e n t E x t r a c t i o n = DSCFactory . g e t M a n a g e r ( ) ;
25
managerPreprocessing = PortugueseFilteringFactory
26
. getManager ( ) ;
27
managerIndex = LuceneIndexingFactory . getManager ( ) ;
28
29
managerUrlCollector1 . setRequiredInterface ( " IHttpUtils " ,
30
H t t p U t i l s F a c t o r y . getManager ( ) . g e t P r o v i d e d I n t e r f a c e ( ) ) ;
31
32
managerUrlCollector2 . setRequiredInterface ( " IHttpUtils " ,
33
H t t p U t i l s F a c t o r y . getManager ( ) . g e t P r o v i d e d I n t e r f a c e ( ) ) ;
34
35
managerUrlCollector3 . setRequiredInterface ( " IHttpUtils " ,
36
H t t p U t i l s F a c t o r y . getManager ( ) . g e t P r o v i d e d I n t e r f a c e ( ) ) ;
37
62
4.4. DISCUSSÃO SOBRE OS ESTUDOS DE CASO
38
urlCollector1 = ( IFolhaUrlCollector )
39
managerTagParser . g e t P r o v i d e d I n t e r f a c e ( ) ;
40
41
urlCollector2 = ( INE10UrlCollector )
42
managerTagParser . g e t P r o v i d e d I n t e r f a c e ( ) ;
43
44
urlCollector3 = ( IDiarioUrlCollector )
45
managerTagParser . g e t P r o v i d e d I n t e r f a c e ( ) ;
46
47
c o n t e n t E x t r a c t i o n = ( ITTR )
48
managerContentExtraction . getProvidedInterface ( ) ;
49
50
preprocessing = ( IPortugueseFiltering )
51
managerPreprocessing . getProvidedInterface ( ) ;
52
53
index = ( ILuceneIndexing )
54
managerIndex . g e t P r o v i d e d I n t e r f a c e ( ) ;
55
56
language = " pt " ;
57 }
Esta especificação é similar à dos outros estudos de caso, a principal diferença é,
como já foi dito, instanciar três coletores de URLS. A explicação do código é:
• Instância as interfaces e seus gerenciadores(Linhas 4-17);
• Configura as interfaces requeridas (Linhas 21-36);
• Recebe as interfaces providas(Linhas 38-54).
4.4
Discussão Sobre os Estudos de Caso
Os estudos de caso tinham dois objetivos principais, mostrar a flexibilidade do sistema,
instanciando ele em vários contextos diferentes e mostrar a vantagem de usar uma abordagem baseada na arquitetura. Por essa razão foram utilizados o máximo de componentes
diferentes na implementação dos estudos de caso.
O primeiro ponto foi satisfeito visto que usamos serviços diferentes do framework em
vários contextos. Com blogs e notícias, diferentes algoritmos, aplicado a educação, entre
outros.
63
4.4. DISCUSSÃO SOBRE OS ESTUDOS DE CASO
O segundo ponto fica bem evidente nas explicações dos códigos das classes de
especificação. Em todos os caso a explicação era a mesma, mudando apenas as linhas de
código a que ela se referia. Isso mostra que apenas precisamos escolher os componentes
e criar a classe de configuração, que é basicamente a mesma sempre, para gerar uma
aplicação do o framework.
Outros pontos que ficam evidenciados nesses estudos de caso são:
• Que o sistema apresentado é um framework caixa cinza, visto que o usuário só
precisa saber das interfaces para instanciar o sistema, ele não precisa saber de
detalhes da implementação de cada classe;
• Que o framework é de domínio e aplicação, pois os seus serviços foram feitos para
lidar com o crawler de blogs (domínio), mas pode ser usado para outros fins como
crawler de notícias (aplicação).
64
5
Experimentos e Resultados Preliminares
Para avaliar os serviços do RetriBlog um conjunto de experimentos nos algoritmos
de extração de conteúdo, classificação(avaliação sobre a influência do desempenho
de classificação de páginas HTML usando algoritmos de extração de conteúdo e préprocessamento) e recomendação de tags foram realizados. Além disto, é apresentado
uma avaliação qualitativa sobre a utilização do COSMOS*. Esse capítulo descreve como
esses experimentos foram feitos, apresenta resultados sobre alguns algoritmos propostos
e discute algumas conclusões derivadas de cada deles. Esses algoritmos foram avaliados
usando as métricas de precisão, cobertura e f-measure. Os números obtidos mostram que
os algoritmos propostos alcançaram bons resultados.
5.1
Avaliação: Extração de Conteúdo
Os documentos tratados pelo sistema são blogs, ou seja, são páginas HTML das quais
o sistema deve recuperar o conteúdo principal e o título. Contudo, não foi encontrado
em nossa pesquisa bibliográfica, nenhum corpus anotado de blogs que atende as nossas
necessidades. Sendo assim, verificamos a similaridade entre textos de blogs com outros
tipos de páginas Web, e decidimos estender nossos experimentos em páginas de notícias
(news), pois estas possuem uma estrutura muito parecida com as de blog, como já foi dito
em um dos estudos de caso.
Para avaliar o desempenho do sistema proposto, foi utilizado o corpus de notícias
descrito em (Kohlschütter et al., 2010). Este corpus consiste de 621 páginas de notícias
coletadas manualmente de 408 sites diferentes, escolhidos aleatoriamente de um conjunto
de 254.000 notícias. Elas foram obtidas através do Google News search engine1 durante
1 http://news.google.com.br/
65
5.1. AVALIAÇÃO: EXTRAÇÃO DE CONTEÚDO
à primeiro semestre de 2008.
Na construção do corpus, estas páginas foram anotadas por 7 pessoas que marcaram
sequências de textos como sendo não-conteúdo, título, texto completo, texto suplementar
(texto que não pertence ao artigo, mas que é texto completo, tais como captions de
imagens, etc), comentários e conteúdos relacionados (links para outros artigos). Destas
anotações, foram utilizadas o título, o conteúdo e o texto suplementar para testar os
algoritmos de extração de conteúdo. Dessas a primeira se refere ao título, e as outras
duas, se referem ao texto principal da postagem.
Foram realizados experimentos com os algoritmos de extração de conteúdo SummaryStrategy (Ferreira et al., 2010b), BoilerPlate (Kohlschütter et al., 2010), Document
Slope Curve (DSC) (Pinto et al., 2002), Text-to-Tag Ratio (TTR) (Weninger and Hsu,
2008) e uma heurística baseada no algoritmo Link Quota Filter (LQF) (Gottron, 2007).
De acordo com (Gottron, 2007) as quatro abordagens mais utilizadas para avaliação
de algoritmos de extração de conteúdo são:
• Cadeia de Caracteres, que verifica cada letra do texto em ordem seqüencial como
aparece no texto;
• Seqüência de palavras, que analisa cada palavra também levando em conta a
ordem entre elas no texto;
• Conjunto de Palavras e Freqüência, que analisa quais palavras apareceram, e
em qual freqüência;
• Conjunto de Palavras, que analisa quais palavras apareceram, independente de
ordem ou freqüência.
Dentre os quatro métodos de avaliação citados acima, foi escolhido no trabalho o
Conjunto de Palavras, por sua simplicidade na implementação. Em princípio, o método
escolhido pode parecer muito simples ou menos exato que os demais; no entanto, como
mostra (Gottron, 2007), este método fornece resultados muito similares às outras três
abordagens. Além disso, para fins de indexação de documentos, por se tratar de uma das
principais aplicações dos algoritmos de extração de conteúdo aqui apresentados, é crucial
não deixar de considerar todas as palavras que serão usadas no processo de indexação.
Um ponto observado foi que por alguns algoritmos analisados serem baseados em
limiares proporcionais à quantidade de texto da página, eles podem cometer erros em
blogs com muitos comentários ou com comentários mais longos, pois o limiar para
extração será mais alto que o convencional.
66
5.1. AVALIAÇÃO: EXTRAÇÃO DE CONTEÚDO
Outro problema encontrado em todos os algoritmos avaliados é o fato de algumas
vezes não conseguirem extrair campos com pouco texto, que ficam separados do conteúdo
principal, como o título ou a data de publicação. Este problema pode ser contornado
com heurísticas simples baseadas em atributos desses campos, tal como sua posição.
Geralmente esses campos, apesar de separados do conteúdo principal, encontram-se
imediatamente antes ou depois do conteúdo principal.
A análise do sistema é fundamentada nas medidas clássicas usadas em sistemas de
recuperação de informação, isto é, Precisão(P), Cobertura(C) e F-measure(F1) (BaezaYates and Ribeiro-Neto, 1999). A precisão calcula quantas palavras capturadas são
relevantes para o documento(5.1), enquanto a cobertura indicou a relevância das palavras
na recuperação, considerando o conjunto total de palavras relevantes(5.2). A análise feita
apresentou os resultados em relação ao conteúdo principal do post. A Tabela 5.1 a seguir
expõe os resultados referentes a cada algoritmo utilizado nos experimentos.
P=
PalavrasCapturadas
(5.1)
TotalDePalavrasRecuperadas
C=
PalavrasCapturadas
(5.2)
PalavrasRelevantes
Tabela 5.1 Avaliação - Extração de Conteúdo
Algoritmo
SummaryStrategy
TTR
Boilerplate
DSC
DSC + LQF
Precisão
73,46
71,09
93,19
94,33
92,37
Cobertura
71,92
87,38
91,69
88,29
98,28
F-measure
72,68
78,40
92,43
91,21
95,23
Os melhores resultados foram alcançados pelo algoritmo DSC e Boilerplate. Contudo,
estes algoritmos utilizam o DOM das páginas HTML para encontrar o texto principal.
Com isso, eles são mais lentos do que os algoritmos TTR e SummaryStrategy, estes
utilizam apenas o texto da página para extrair o conteúdo. Desta forma, dependendo
dos requisitos da aplicação o usuário pode escolher um algoritmo que tenha precisão e
cobertura menores, porém que seja mais eficiente.
67
5.2. AVALIAÇÃO: CLASSIFICAÇÃO
5.2
Avaliação: Classificação
Para avaliar os algoritmos de classificação foi usado o mesmo corpus empregado na
avaliação dos algoritmos de extração de conteúdo. Contudo, esse corpus não possuía
as classes das notícias. Então, foram selecionados 270 notícias do corpus e elas foram
distribuídas em 4 categorias, como mostra a Tabela 5.2. Essas classes foram anotadas
manualmente para realizar o experimento.
Tabela 5.2 Distribuição das Categorias
Categoria
Esportes
Entretenimento
Tecnologia
Mundo
Frequência
70
70
60
70
Assim como no experimento anterior, foram adotadas as métricas clássicas de recuperação de informação(P, C e F1) para avaliar os algoritmos de classificação. Os testes
foram realizados usando a metodologia cross validation (Geisser, 1993).
Para cada algoritmo de classificação discutido no trabalho foram realizados testes
com o objetivo de analisar a influência dos algoritmos de extração de conteúdo e préprocessamento nos resultados da classificação. Para isso foram realizadas as seguintes
avaliações:
• Classificação da página sem nenhum pré-processamento;
• Classificação da página depois da extração do conteúdo;
• Classificação da página depois da extração de conteúdo e da remoção de stop
words.
O gráfico apresentado na Figura 5.1 mostra os resultados da classificação.
Considerando o gráfico acima percebemos que o algoritmo que alcançou melhor
F-measure (mais de 90%) no experimento foi o TF-IDF. Além disto, foi confirmado que
todos os algortimos de classificação obtiveram melhores resultados depois da realização
da extração de conteúdo e do pré-processamento. Por exemplo, a Figura 5.2 mostra que
o ganho de performance para o algoritmo de redes bayseanas foi de quase 30%. Isso
acontece porque a extração de conteúdo e o pré-processamento eliminam propagandas
e informações pouco usadas deixando apenas o conteúdo principal do blog para ser
classificado.
68
5.2. AVALIAÇÃO: CLASSIFICAÇÃO
Figura 5.1 Resultado da Classificação: CE = Extração de Conteúdo; P = Pré-Processamento
Figura 5.2 Influência da Extração de Conteúdo e do Pré-Processamento no Algoritmo de Naive
Bayes
69
5.3. AVALIAÇÃO: RECOMENDAÇÃO DE TAGS
Os algoritmos de classificação também foram avaliados segundo a sua eficiência. Em
outras palavras, foi medido qual o tempo médio que cada um deles leva para classificar
uma página. A Tabela 5.3 mostra o desempenho de cada algoritmo.
Tabela 5.3 Tempo para Execução da Classificação
Algoritmo
Redes Bayesiana
KNN
TF-IDF
Tempo
2,16
1,97
1,42
Apesar de o algoritmo TF-IDF ter alcançado melhores desempenhos tanto na performance quando na eficiência, ele é um algoritmo um pouco mais complicado de se
usar, enquanto os outros dois são mais simples. Diante destes resultados o usuário pode
escolher o melhor algoritmo para a sua aplicação.
Esses resultados foram publicados em Improving News Web Page Classification
Through Content Extraction (Ferreira et al., 2011c).
5.3
Avaliação: Recomendação de Tags
Para criar o corpus para o experimento dos algoritmos de recomendação de tags foi utilizado o crawler descrito na Seção 4.1. Foram coletados 623 posts da Technorati escritos
em inglês, e foram armazenados no banco MySQL do sistema. Para os experimentos
estamos interessados nos seguintes elementos: título, link da postagem, resumo, texto em
HTML, texto sem tags HTML, e tag. A Tabela 5.4 mostra a distribuição das tag para este
conjunto de dados.
Os resultados apresentados nesta seção mais uma vez vão ser expressos usando
precisão, cobertura, e F-measure. No nosso caso, a precisão mede quantas tags foram
corretamente recomendadas (Fórmula 5.3). Enquanto cobertura indica quantas tags foram
recomendadas, considerando o conjunto total de marcas relevantes no conjunto inteiro
(Fórmula 5.4). Os valores de precisão e cobertura foram obtidos por avaliação humana, ou
seja, as regras geradas pelos serviços foram analisados por quatro avaliadores humanos.
P=
TagsCorretamenteRecomendadas
(5.3)
TotalDeTagsRecomendadas
70
5.3. AVALIAÇÃO: RECOMENDAÇÃO DE TAGS
Tabela 5.4 Distribuição das Tags no Dataset
Tag
propaganda
anúncio
atletismo
livro
booking
livros
negócios
modelo de negócios
comunidade
cozinha
corrupção
didactics
drama
ebooks
economia
economia
educação
engenharia
entretenimento
fashion
fashionable
fashions
filme
futebol americano
C=
Freqüência
10
9
10
33
9
10
33
5
8
10
3
9
4
7
10
19
39
10
39
38
9
7
3
9
Tag
governo
hollywood
humor
jazz
aprendizagem
literatura
maneira
mp3
música
nba
notícias
nlf
Obama
oscars
pedagogia
fotografia
política
esportes
estilo
ensino
tecnologia
viagem
escrita
Freqüência
5
9
4
8
8
6
8
5
38
5
8
10
8
9
10
5
37
35
6
6
36
7
7
TotalDeTagsRecomendadas
(5.4)
TotalDeTagsRelevantes
O primeiro serviço de recomendação avaliado será o de similaridade. O gráfico
apresentado na Figura 5.3 apresenta o percentual de precisão, cobertura e F-measure
em termos de grau de similaridade. Conforme mencionado na Seção 3.5.5, grau de
similaridade é medido usando como métrica a Distância Levenshtein.
Os melhores resultados alcançados por este serviço é quando o grau de similaridade
está entre 65% e 70%. Também observou-se que regras com grau de similaridade inferior
a 55% são descartáveis, pois existem muito mais regras erradas do que certas quando
o grau de similaridade é esse. A Tabela 5.5 mostra alguns exemplos de regras obtidas
usando este tipo de serviço.
71
5.3. AVALIAÇÃO: RECOMENDAÇÃO DE TAGS
Figura 5.3 Resultado Similaridade
Tabela 5.5 Regras Geradas pelo Serviço de Recomendação por Similaridade
Regra
businesslike is similar to business
ebooks is similar to book
booking is similar to book
books is similar to book
economics is similar to economy
fashions is similar to fashion
Grau de Similaridade
0.66
0.66
0.57
0.80
0.66
0.87
Como mencionado antes o serviço de recomendação de tag baseado em dicionário
usa o WordNet (Miller, 1995). Foram considerado todos os sinônimos sugeridos pelo
WordNet como relevantes para a esta solução. Por esta razão, não temos este serviço
avaliado em termos de precisão e cobertura. A Tabela 5.6 mostra algumas regras obtidas
após a execução deste serviço.
Tabela 5.6 Regras Geradas pelo Serviço de Recomendação por Dicionário
Regra
amusement is synonymous of entertainment
teaching is synonymous of education
pedagogy is synonymous of education
didactics is synonymous of education
manner is synonymous of fashion
style is synonymous of fashion
athletics is synonymous of sport
engineering is synonymous of technology
O serviço baseado em classificação alcançou resultados encorajadores (precisão =
72
5.3. AVALIAÇÃO: RECOMENDAÇÃO DE TAGS
62.1%, cobertura = 65.4% and F-measure = 63.7%) comparados com outros trabalhos,
mais detalhes na Seção de trabalhos relacionados. Algumas regras geradas por este
serviço são mostradas na Tabela 5.7.
Tabela 5.7 Regras Geradas pelo Serviço de Recomendação por Classificação
Regra
athletics is related to sport
football is related to sport
didactics is related to education
pedagogy is related to education
government is related to politics
jazz is related to music
Obama is related to politics
economics is related to politics
Por fim, o serviço baseado em agrupamento alcançou resultados satisfatórios comparados com os trabalhos relacionados: precisão = 41.1%, recall = 50.4% and F-measure =
45.2%. Algumas regras geradas por este serviço são mostradas na Tabela 5.8.
Tabela 5.8 Regras Geradas pelo Serviço de Recomendação por Agrupamento
Regra
mp3 is related to entertainment
football is related to sport
nfl is related to entertainment
nba is related to entertainment
manner is related to business
government is related to business
news is related to fashion
travel is related to entertainment
Os melhores resultados foram alcançados pelo serviço de similaridade. Esses resultados preliminares sugerem que o trabalho é competitivo com os melhores resultados
outros sistemas(Seção 6.2). Por exemplo, a Autotag (Mishne, 2006) obteve F-measure de
quase 50%, enquanto para o serviço baseado em classificação proposto neste trabalho,
este valor foi de 63,7%(mais detalhes sobre isso será mostrado no capítulo 6).
Vale ressaltar que os valores de desempenho do serviço baseado em similaridade
foram obtidos quando o grau de similaridade foi entre 0,65 e 0,7, mas os resultados acima
de 0,55 são considerados aceitáveis quando comparados com trabalhos relacionados.
Em relação às abordagens baseadas em classificação e agrupamento, observamos que
as tags de educação e esportes tiveram melhor desempenho do que tag entretenimento,
73
5.4. AVALIAÇÃO: COSMOS*
por exemplo. Uma razão que poderia explicar este fato é o uso de estilos de linguagem
diferentes (formal, informal, coloquial, etc), adotada pelo blogs. Uma vez que os blogs
de educação e esportes têm mais ligações com organizações do que os de entretenimento.
Blogs de educação e esportes tendem a ser mais formais e estruturados. Conseqüentemente, os resultados da classificação foram melhores, pois os algoritmos lidam com
palavras mais "corretas". Por outro lado, mensagens de blog sobre entretenimento são
escritos principalmente pelo público em geral, e eles tendem a conter sentenças coloquiais
e linguagem de gírias que podem induzir o classificador ao erro. Finalmente, como já
mencionado, todos os sinônimos sugeridos pelo WordNet são considerados relevantes.
5.4
Avaliação: COSMOS*
Esta seção discute algumas vantagens e desvantagens de projetar um framework utilizando
uma abordagem centrada na arquitetura utilizando o COSMOS*. As principais vantagens
identificadas são:
• Baixo custo de instanciação: Como há uma definição clara da variabilidade do
framework o desenvolvedor de software é capaz de facilmente identificar os hot
spots e, em seguida, instância-lo de acordo com os requisitos da aplicação desejado.
Além disso, este framework oferece algumas implementações de possíveis exemplo
de classes concretas e serviços que realiza os principais hot spots. O desenvolvedor
de software também podem desenvolver outras variantes, se necessário;
• Compreensibilidade: A representação de alto nível proporcionado pela abordagem orientada a arquitetura adotada pelo framework permite que profissionais que
não são de programadores compreendam os detalhes da execução framework, e os
aspectos estruturais para estende-lo. A decomposição uniforme (Klein et al., 1999)
estratégia utilizada durante o projeto arquitetônico deixa essa característica ainda
mais explícita;
• Modularidade e Evolução: Uma vantagem de se adotar uma estratégia centralizada na arquitetura para o desenvolvimento do framework é a existência de módulos
bem definidos, que têm funções específicas e comunicar uns com os outros através
de interfaces explícitas. Além de reduzir o acoplamento entre os componentes do
sistema, ele permite que alterações sejam feitas localmente em módulos específicos.
Isso também facilita a adição e remoção de um novo componente;
74
5.4. AVALIAÇÃO: COSMOS*
• Gerenciamento: Uma vez que o framework proposto é composto por uma arquitetura híbrida (camadas e componentes independentes), isso fornece o paralelismo
no processo de desenvolvimento. Além disso, como já mencionado, os componentes são auto-suficientes, isto é, o desenvolvedor só precisa saber suas interfaces.
Portanto, o gerenciamento torna-se mais fácil;
• Monitoramento: Devido aos benefícios da programação modular, o tempo de
desenvolvimento deve ser encurtado porque grupos separados poderiam trabalhar
em cada componente com pouca necessidade de comunicação. Assim, é mais fácil
monitorar os componentes separados (subsistemas) do que todo o sistema;
• Reuso: Com base nas vantagens citadas anteriormente, por exemplo, baixo acoplamento e modularidade, cada componente é independente e auto-suficiente, desta
forma a reutilização é mais simples. Portanto, é possível fazer alterações em
um componente sem mudar os outros. Além disso, os componentes podem ser
facilmente utilizados separadamente em outros aplicativos, como o sistema de
recomendação.
Por outro lado, as desvantagens mais evidentes são:
• Evolução Interna: Para adicionar novas features ou novos pontos de variação
no framework o desenvolvedor precisa conhecer o modelo COSMOS* e entender
o código do sistema. Em outras palavras ele tem que ter uma curva maior de
aprendizagem sobre o sistema;
• Uso de conectores explícitos: Utilizar conectores explícitos aumenta a flexibilidade e melhora a evolução. Contudo, isto aumenta consideravelmente o número
de indireções o que pode prejudicar alguns requisitos de qualidade, tais como:
desempenho e consumo de memória. Porém, com esse tipo de sistema é mais fácil
implementar distribuição, uma possível solução para esse problema;
• Escalabilidade: Devido ao número de componentes para ser instanciados o sistema
exige muita memória o que pode prejudicar aplicações que trabalhem com muitos
dados. Porém, como já foi dito, a componentização também facilita a distribuição,
solução direta para esse problema;
• O framework não automatiza o processo de instanciação: Dessa forma precisa
que o usuário entenda uma parte do código, as interfaces. Contudo, por se tratar de
75
5.4. AVALIAÇÃO: COSMOS*
um framework caixa cinza a automatização da instanciação é um processo pouco
custoso de se criar.
76
6
Trabalhos Relacionados
Este Capítulo detalha os principais trabalhos relacionados à utilização do COSMOS*,
aos serviços de recomendação de tag e classificação e ao RetriBlog. Dessa forma, este
Capítulo foi dividido em quatro partes. A primeira apresentam trabalhos relacionados à
utilização do COSMOS*. Depois duas seções sobre trabalhos que apresentam serviços
de recomendação de tags e de classificação de páginas HTML. A quarta seção fala sobre
trabalhos relacionados ao RetriBlog como um todo. Por fim, na última seção, algumas
conclusões e comparações são apresentadas.
6.1
COSMOS*
Koala (van Ommering et al., 2000) é um modelo de componente que utiliza uma notação
gráfica para representar arquiteturas de sistemas embarcados. Esta descrição da arquitetura é baseada em uma linguagem de descrição de arquitetura chamada Darwin (Magee
and Kramer, 1996). Neste modelo, as interfaces são entidades de primeiro nível, que
pode ser providas ou requeridas por elementos arquiteturais.
Whitehead e seus colaboradores (Whitehead et al., 1995) identificaram diretrizes
para melhor especificar arquiteturas de software, tais como: i) maior granularidade
dos componentes da arquitetura, que pode ser obtida através do encapsulamento de
muitas classes de implementação, ii) facilidade para mudar componentes, que pode ser
obtida através do uso de interfaces providas e requeridas explícitas, e iii) facilidade para
implementar distribuição, que pode ser obtida através da integração do ambiente de
desenvolvimento com um repositório de componentes.
A referência a seguir (McDirmid et al., 2001) estende a linguagem Java com o conceito
de componentes de software, que podem ser compilados separadamente e ligados entre si.
Nesta abordagem, os componentes são chamados de unidades, que podem ser átomos,
77
6.2. SERVIÇOS DE RECOMENDAÇÃO DE TAGS
que são construídos usando classes Java, ou composto, que são construídos usando uma
linguagem específica definida como parte da solução. A principal diferença entre este
modelo e COSMOS* é que, enquanto McDirmid et al. define uma nova linguagem de
programação para a especificação de aplicações baseadas em componentes, o modelo
COSMOS* define diretrizes para o uso da linguagem Java para realizar a criação dos
compenentes de software em código.
ArchJava (Aldrich et al., 2002) também define uma extensão da linguagem Java que
permite a representação explícita de arquiteturas baseadas em componentes de software
(componentes, conectores e configuração) em nível de programação. A representação da
arquitetura, que é feito em uma linguagem específica, pode ser ainda transformada em
código fonte de Java.
Rosenblum e Natarajan (Rosenblum and Natarajan, 2000) estenderam o modelo
JavaBeans, a fim de permitir a representação explícita de componentes de software e
conectores compatíveis com o estilo arquitetural C2 (Taylor et al., 1995). Esta extensão
é suportada por um ambiente de desenvolvimento de software chamado Arabica. Diferentemente, o modelo COSMOS* não impõe a adoção de qualquer estilo específico de
arquitetura.
Como JavaBeans e COM, o COSMOS* também define padrões para representar
componentes de software. No entanto, diferentemente de tais modelos, componentes
COSMOS* pode encapsular várias classes de implementação. Além disso, o conceito de
interfaces requeridas e conectores não são explicitamente representadas no JavaBeans e
modelos COM.
A Tabela 6.1 apresenta uma comparação envolvendo as tecnologias de componente
acima e o modelo COSMOS*.
6.2
Serviços de Recomendação de Tags
Os trabalhos relacionados podem ser classificados em duas categorias: abordagens
baseadas em tags e baseadas em postagem. No primeiro, somente tags são usadas para
fazer sugestões de novas tags relevantes. No último, o sistema utiliza as tags e o texto da
postagem para recomendar novas tags.
Os autores em (Kim et al., 2009) propõem um sistema baseado em tags que usa
padrões de associação. Estes padrões são usados para relacionar uma tags com outras.
Sua abordagem também usa medidas de co-ocorrência de tags como parâmetro para
ajudar a sugerir tags relevantes.
78
6.2. SERVIÇOS DE RECOMENDAÇÃO DE TAGS
Tabela 6.1 Comparação entre tecnologias de componentes
Funcionalidade
JavaBeans
Separação explícita entre especificação
sim
e implementação
Representação explícita de interfaces
não
requeridas
Representação explícita de conectores
não
Baixo acoplamento entre os componennão
tes
Facilidade para a evolução
não
Independência de linguagem/tecnolonão
gia
Ferramenta para Suporte
sim
COM
sim
ArchJava
sim
COSMOS*
sim
não
sim
sim
não
não
sim
sim
sim
sim
não
não
não
não
sim
sim
sim
sim
sim
Em (Hassan-montero and solana A, 2006) os autores apresentam uma abordagem
baseada em tag que usa a relação de co-ocorrência(CO) como uma medida de similaridade. A medida de co-ocorrência relativa de duas tags A e B é dada pelo número de
postagens em que essas tags aparecem juntas, dividido pelo número de postagens que
contém qualquer uma delas (fórmula 6.1). Outro sistema baseado em tag é proposto em
(Sigurbjörnsson and van Zwol, 2008). Ele também usa a medida co-ocorrência.
CO =
TotalP ostAB
(6.1)
TotalP ostA + TotalP ostB
Onde:
• Total_PostAB: Total de postagens que contém as tags A e B juntas;
• Total_PostA: Total de postagens que contém a tag A;
• Total_PostB: Total de postagens que contém a tag B.
Em (Mishne, 2006), foi proposto o AutoTag, um sistema de recomendação de tag
baseado em postagem que usa a mesma estratégia de sistemas de recomendação comercial:
sugerindo produtos para um usuário com base nos produtos comprados por outros. O
AutoTag sugere tags para um blog com base em tags de postagens semelhantes. O
sistema encontra posts similares, usando técnicas de recuperação de informações que são
baseadas no conteúdo textual das postagens.
TagAssist (Sood et al., 2007) consiste de um outro sistema de recomendação baseado
em postagem. TagAssist é semelhante ao sistema AutoTag por também ser baseado
79
6.3. SERVIÇOS DE CLASSIFICAÇÃO
em sistemas de recomendação comercial. No entanto, mostrou um melhor desempenho
devido ao uso de técnicas de compressão tag, o que reduz as tags à sua forma de raiz.
SocialTagger (Subramanya and Liu, 2008) também usa estratégias semelhantes.
O sistema iTag (Hart et al., 2009) segue as mesmas idéias das outras abordagens baseadas em postagens. Ele melhora TagAssist com diferentes abordagens para a recuperação
de tag e usa dados de treinamento diferentes para fornecer melhores recomendações tag.
Neste trabalho foram implementados e avaliados quatro serviços diferentes de recomendação de tag, dois baseados em tags e dois baseados em postagem. Os serviços
de recomendação de tags foram integrados no RetriBlog com o objetivo de alcançar
melhores valores de eficiência, escalabilidade e baixa dependência do corpus. Com todas
estas opções à mão, o usuário pode escolher qual serviço melhor se adapta às suas necessidades. Esta é uma das principais contribuições desta parte do trabalho, considerando
a flexibilidade que ele fornece para o usuário. Além disso, estes serviços obtiveram
resultados encorajadores em termos de precisão e cobertura.
6.3
Serviços de Classificação
Os autores em (Hong Qu, 2006) propõem uma abordagem para classificação automática de blogs em quatro gêneros: diário pessoal, notícias, política e esportes, usando
representação de documento TF-IDF e classificação usando redes bayseanas. Em seus
experimentos, os autores utilizaram um corpus composto por 120 blogs, sendo 30 para
cada categoria, e o desempenho da classificação foi de cerca de 84%.
O BlogHarvest (Joshi, 2006) é um framework de pesquisa e mineração blog que
extrai interesses dos blogueiros, acha e recomenda blogs com temas similares, e fornece
a funcionalidade de pesquisa de blog. O BlogHarvest usa um classificador baseado
em redes bayseanas para identificar blogs com temas semelhantes. Uma limitação que
pode ser apontada neste trabalho é que ele tem crawlers diferentes para cada serviço de
indexação de blog (google, yahoo, etc.) Além disso, os autores não relataram qualquer
resultado experimental para a etapa de classificação.
(Hiep Phuc Luong and Wang, 2009) apresentou um framework para aprendizagem
de ontologias que permite a recuperação de documentos da Web usando um crawlers
focado em um domínio de biologia. Os autores utilizaram uma ontologia como entrada e,
para cada conceito na ontologia, o crawlers gera uma consulta que é submetido a duas
fontes de dados (motores de pesquisa e bibliotecas digitais). Um classificador SVM é
então empregado para identificar documentos específicos do domínio, e para executar
80
6.4. SISTEMA PARA RECUPERAR INFORMAÇÕES DE BLOGS
a mineração de texto para extrair informação útil em um processo de enriquecimento
de ontologias. Por outro lado, encontramos os seguintes problemas neste trabalho: a
necessidade de criar um crawler específico para cada motor de busca, e um conjunto de
dados pequenos (96 documentos, sendo 48 para cada categoria) foi usado na montagem
do experimento.
A abordagem apresentada nesse trabalho se diferencia das obras acima referidas,
principalmente porque:
• O framework proposto é independente de plataforma, ou seja, ele não tem que criar
um crawler separado para cada host de blog;
• Algoritmos de extração de conteúdo são capazes de identificar o conteúdo textual
relevante a partir de blogs independente do seu host. Além disso, foi demonstrado
que a fase de pré-processamento teve um grande impacto nos resultados de classificação, em que o nosso melhores resultados de classificação (precisão = 91,3% e
cobertura = 89,2%).
6.4
Sistema para Recuperar Informações de Blogs
Os principais sistemas que procurar trabalhar com blogs encontrados na literatura podem
serão divididos em dois blocos. O primeiro tem os sistemas Blogscope (Bansal and
Koudas, 2007), Blogranger (Fujimura et al., 2006) e BlogTrackers (Agarwal et al.,
2009), eles possuem serviços para obter informações dos blogs, porém não foram criados
pensando em variabilidades. O segundo blog são frameworks, assim como o RetriBlog.
Neste bloco temos os sistemas (Chau et al., 2009) e BlogHarvest (Joshi, 2006). A seguir
cada um desses sistemas são mais detalhados.
O Blogscope (Bansal and Koudas, 2007) é um sistema de análise de grandes volumes
de dados on-line, atualmente é aplicado à análise da Blogosfera. Ele indexa a Blogosfera
e extrai informações a fim de auxiliar a análise interativa e descoberta de informações. O
processo de crawler funciona da seguinte forma:
1. Recebe uma lista dos blogs atualizados na última hora 1 ;
2. Utiliza um classificador baseado na técnica de redes bayesianas para remover spans;
3. Armazena os dados em um banco de dados relacional e cria um index para ajudar
na busca.
1 informação
obtida do site site weblogs.com
81
6.4. SISTEMA PARA RECUPERAR INFORMAÇÕES DE BLOGS
Além disso a sistema oferece os serviços de detecção de tags, suporte on-line para
análise OLAP, interface de navegação nos blog, e extração de resumo.
O Blogranger (Fujimura et al., 2006) é uma ferramenta de busca de blogs baseada
em múltiplas interfaces. Ela oferece quatro interfaces diferentes, duas para pesquisa tag,
e outras para blogueiro e pesquisa reputação. As interfaces são facilmente alteradas, elas
funcionam como um filtro que classifica o resultado da pesquisa baseada na intenção
da pesquisa. Esta ferramenta apresenta um crawler relativamente simples, mas oferece
serviços de análises sentimento de blog, detecção de tag, e uma interface de busca que
são bastante interessantes.
O BlogTrackers (Agarwal et al., 2009) é uma aplicação Java que fornece uma
plataforma unificada para o usuário fazer crawler e analisar os dados dos blog. Ele
concede ao usuário, a liberdade de escolher os dados de interesse e ajuda na efetivamente
a analisá-los. O crawler funciona da seguinte forma: i) recupera links para blogs; ii)
Extraí o conteúdo principal usando expressão regular; iii) Armazena em um bando de
dados relacional e cria um índice. Além disto, ela fornece serviços como recomendação
tag, classificação e possui uma interface de visualização.
Em (Chau et al., 2009) é proposto um framework para mineração blog. Este framework é composto por um crawler de blogs, um analisador de blog, um analisador de
conteúdo do blog, um analisador de rede do blog, e um visualizador do blog. O processo
de crawler tem as seguintes etapas:
1. Se conecta a sites especializados2 para conseguir links de blogs;
2. Extrai informações dos blogs como nome de pessoas, nomes de produtos, informações de tempo;
3. Extrai tags dos postagens;
4. Armazena as informações obtidas nas etapas anteriores.
Além disto, possui um módulo de visualização para o usuário.
O BlogHarvest (Joshi, 2006), como já foi dito, é um framework para busca e mineração de blogs que extrai os interesses dos blogueiros e recomenda blogs com temas
similares. O processo do crawler funciona da seguinte maneira:
1. Recupera links de blogs de sites especializados3 ;
2 Por
3 por
exemplo technorati e google blogs
exemplo technorati
82
6.4. SISTEMA PARA RECUPERAR INFORMAÇÕES DE BLOGS
2. Para cada tipo de blog é criado uma regra (manualmente) que encontre o conteúdo
principal;
3. Identifica as tags do blog;
4. Utiliza serviços de análise de sentimento (para dizer se o post fala bem ou mal do
conteúdo da postagem) e agrupamento de usuários (para futuras recomendações);
5. Indexa os blogs.
Além disto, ele fornece uma interface que ajuda na navegação do usuário.
A principal diferença do RetriBlog para esses trabalhos é a utilização de técnicas de
engenharia de software na implementação do sistema. De todos os trabalhos apresentados
apenas o BlogHarvest apresenta de alguma forma um sistema que fornece para o usuário
pontos de variação. Todos os outros possuem os componentes bastante acoplados. Como
foi dito na seção 3.7 o RetriBlog possui vários pontos de variação e foi implementando
usando componentes o que acarreta nas vantagens descritas na seção 4.4.
Outra diferença fundamental é que nenhum dos trabalhos utiliza serviços de préprocessamento. Além disto, os serviços de extração do conteúdo apresentados são
baseados em expressão regular ou regras manualmente produzidas. Desta forma eles são
fortemente acoplados a apenas um tipo de blog, ou seja, para cada novo tipo de blog o
usuário deve criar uma nova regra de extração.
Os serviços em comum foram os de indexação, recomendação/detecção de tag e
classificação de blogs. Por outro lado, serviços de análise de sentimento, análise OLAP e
extração de resumo são serviços disponibilizados por estas ferramentas que o RetriBlog
não contempla.
Por fim, alguns dos trabalhos apresentados possuem interfaces enquanto o RetriBlog
não disponibiliza. Isso se deve ao fato de que o sistema proposto neste trabalho é voltado
para o desenvolvedor e não para o usuário final. Por isso o módulo de interface não fez
parte inicialmente do projeto. A Tabela 6.2 faz um resumo da comparação.
83
6.4. SISTEMA PARA RECUPERAR INFORMAÇÕES DE BLOGS
Tabela 6.2 Comparação dos Trabalhos Relacionados e o RetriBlog
Sistema
RetriBlog
Blogscope
Blogranger
BlogTrackers
(Chau et al., 2009)
BlogHarvest
Pontos de Variabilidade
sim
não
não
não
não
sim
Sistema
RetriBlog
Blogscope
Blogranger
BlogTrackers
(Chau et al., 2009)
BlogHarvest
Extração de Conteúdo
Automática
não
não
manual
manual
manual
Sistema
RetriBlog
Blogscope
Blogranger
BlogTrackers
(Chau et al., 2009)
BlogHarvest
análise OLAP
não
sim
não
não
não
não
Componentes
desacoplados
acoplados
acoplados
acoplados
acoplados
levemente acoplados
Análise de sentimento
não
não
sim
não
não
sim
extração de resumo
não
sim
não
não
não
não
Indexação
sim
sim
não
sim
não
sim
Recomendação de tag
sim
sim
sim
sim
sim
sim
Pré-processamento
sim
não
não
não
não
não
Classificação
sim
sim
sim
sim
não
sim
84
7
Conclusão
O trabalho apresentou o RetriBlog, um framework para criar blog crawlers usando uma
abordagem centrada na arquitetura e que segue o modelo de implementação COSMOS*.
As principais contribuições do trabalho foram: i) Construção de mecanismos para
recuperar informação na blogosfera (blog crawlers); ii) Implementação de algoritmos
para extração de conteúdo em páginas HTML; iii) Criação de serviços de recomendação
de tags para blogs; iv) Avaliação da influencia da utilização de algoritmos de extração
de conteúdo e pré-processamento no desempenho de classificação de páginas HTML;
v) Criação de um framework centrado na arquitetura; vi) Utilização de componentes
seguindo o modelo COSMOS*; vii) Criação de estudos de caso para avaliar as possíveis
vantagens de criar um software centrado na arquitetura e seguindo o modelo COSMOS*.
A adoção do desenvolvimento centrado na arquitetura possibilita um melhor controle
da complexidade do desenvolvimento e proporciona um consequente ganho na curva
de aprendizado. O uso de componentes de software, em especial o modelo COSMOS*,
proporciona uma melhor rastreabilidade entre arquitetura de software e código, o que
facilita a identificação de falhas e a identificação dos eventuais pontos de evolução do
software, o que representa uma potencial redução nos custos de manutenção.
Do ponto de vista funcional, o framework proposto se diferencia dos trabalhos relacionados pela presença de uma etapa de pré-processamento, que aumenta a qualidade
do resultado final através da limpeza dos dados antes da extração da informação propriamente dita e disponibiliza serviços de extração de conteúdo, recomendação de tag e
classificação.
7.1
Trabalhos Futuros
Como trabalhos futuros são sugeridas as seguintes extensões e melhoramentos:
85
7.2. PALAVRAS FINAIS
1. Utilização de um dataset maior para avaliar os algoritmos de extração de conteúdo,
recomendação de tags, classificação, assim como o sistema como um todo;
2. Calcular métricas como tempo de execução de cada algoritmos e custo computacional para ajudar os usuários a escolher adequadamente os algoritmos que melhor
atende os requisitos da aplicação dele;
3. Criação de novos estudos de caso em outros domínios como e-commerce e egovernment;
4. Criar uma aplicação voltada para o usuário final, utilizando uma interface simples
de ser usada;
5. Criar uma avaliação mais detalhada com relação a outras ferramentas da literatura;
6. Aplicação do sistema no projeto BlogSpread. Projeto em parceria com universidades da Alemanha que visa determinar a disseminação do meme na blogosfera;
7. Aplicação do sistema com funcionalidades em francês no sistema AGATHE. Este
sistema busca extrair informações de domínios específicos da Web. O RetriBlog
entraria para melhorar a parte de recuperação de informação do sistema.
7.2
Palavras Finais
Os blogs possuem informações que se bem utilizadas podem colaborar com várias
áreas como e-learning, e-commerce e e-government. Por esta razão, neste trabalho
foi desenvolvido o RetriBlog, um framework para criação de blog crawlers que possui
serviços para ajudar a extrair de forma automática informações úteis dos blogs. Depois de
realizar vários experimentos, os resultados preliminares mostram que o sistema proposto
está pronto para ser usado de forma massiva e que pode ser bastante relevante para o
presente e o futuro de aplicações na blogosfera.
7.3
Publicações relacionadas ao RetriBlog
A lista abaixo mostra uma série de publicações que foram realizadas com o resultado
desse trabalho.
1. Arcabouço para criação de Blog Crawlers Baseados em Contexto (Ferreira et al.,
2010a).
86
7.3. PUBLICAÇÕES RELACIONADAS AO RETRIBLOG
2. A Framework for Developing Context-Based Blog Crawlers (Ferreira et al., 2010b).
3. Improving the Dynamic Interaction in Virtual Learning Environments Through an
Ontology-based Recommender System (Melo et al., 2011).
4. An Agent-Based Semantic Web Blog Crawler (Ferreira et al., 2011a).
5. An Architecture-Based Framework for Developing Blog Crawlers (Ferreira et al.,
2012a).
6. RetriBlog: A Framework for Creating Blog Crawlers (Ferreira et al., 2012b).
7. Tag-Based and Post-Based Services for Tag Recommendation (Ferreira et al.,
2011d).
8. Improving News Web Page Classification Through Content Extraction (Ferreira
et al., 2011c).
9. Creating a Blog Recommendation System Through a Framework for Building Blog
Crawlers (Ferreira et al., 2011b).
10. A Framework for Building Web Mining Applications in the World of Blogs: A
Case Study in Product Sentiment Analysis (Costa et al., 2012).
87
Referências Bibliográficas
Abney, S. (1991). Principle-Based Parsing: Computation and Psycholinguistics. Kluwer
Academic Publishers, Norwell, MA, USA.
Agarwal, N., Kumar, S., Liu, H., and Woodward, M. (2009). Blogtrackers: A tool for
sociologists to track and analyze blogosphere. In ICWSM.
Aldrich, J., Chambers, C., and Notkin, D. (2002). Archjava: connecting software
architecture to implementation. In Proceedings of the 24th International Conference
on Software Engineering, ICSE ’02, pages 187–197, New York, NY, USA. ACM.
Ana Elisa Lobo, P. B. and Rubira, C. M. F. (2007). A systematic approach for architectural
design of component-based product lines. Technical report, Instituto da Computação Universidade Estadual de Campinas.
Arasu, A., Cho, J., Garcia-Molia, H., Paepcke, A., and Raghavan, S. (2001). Searching
the web. Acm Transactions On Internet Technology, 1(1), 2–43.
Aris Kosmopoulos, G. P. and Androutsopoulos, I. (2008). Adaptive spam filtering using
only naive bayes text classifiers. 5th Conference on Email and Anti-Spam (CEAS
2008).
Baeza-Yates, R. and Ribeiro-Neto, B. (1999). Modern Information Retrieval. Addison
Wesley, 1st edition.
Bansal, N. and Koudas, N. (2007). Searching the blogosphere.
Bass, L., Clements, P., and Kazman, R. (2003). Software Architecture in Practices.
Addison-Wesley Longman Publishing Co., Inc., Boston, MA, USA.
Bellifemine, F. L., Caire, G., and Greenwood, D. (2007). Developing Multi-Agent Systems
with JADE. Wiley.
Bittencourt, I. I., de Barros Costa, E., Silva, M., and Soares, E. (2009). A computational
model for developing semantic web-based educational systems. Knowl.-Based Syst.,
22(4), 302–315.
Blood, R. (2004). How blogging software reshapes the online community. Commun.
ACM, 47(12), 53–55.
88
REFERÊNCIAS BIBLIOGRÁFICAS
Brin, S. and Page, L. (1998). The anatomy of a large-scale hypertextual web search
engine. Computer Networks and ISDN Systems, 30(1–7), 107–117.
Chau, M., Xu, J., Cao, J., Lam, P., and Shiu, B. (2009). A blog mining framework. IT
Professional, 11, 36–41.
Chen, F., Wang, Q., Mei, H., and Yang, F. (2002). An architecture-based approach for
component-oriented development. 26th Annual International Computer Software and
Applications Conference.
Chessman, J. and Daniels, J. (2000). UML Components. Addison-Wesley.
Clements, P. and Northrop, L. (2001). Software product lines: practices and patterns.
0201703327.
Costa, E., Ferreira, R., Brito, P., Bittencourt, I., Machado, A., and Holanda, O. (2012). A
framework for building web mining applications in the world of blogs: A case study in
product sentiment analysis. Expert Systems with Applications, 1.
Czarnecki, K., Helsen, S., and Eisenecker, U. (2005). Staged configuration through
specialization and multilevel configuration of feature models. Software Process:
Improvement and Practice, 10(2), 143–169.
Fayad, M. E., Schmidt, D. C., and Johnson, R. E. (1999). Building application frameworks: object-oriented foundations of framework design. John Wiley & Sons, Inc.,
New York, NY, USA.
Fellbaum, C., editor (1998). WordNet: an electronic lexical database. MIT Press.
Ferreira, R., Bittencourt, I., Costa, E., and Pacca, H. (2010a). Arcabouço para criação
de blog crawlers baseados em contexto. in: Simpósio brasileiro de informática na
educação. In Simpósio Brasileiro de Informática em Educação.
Ferreira, R., Lima, R. J., Bittencourt, I. I., Filho, D. M., Holanda, O., Costa, E., Freitas,
F., and Melo, L. (2010b). A framework for developing context-based blog crawlers.
Proceedings of the IADIS International Conference on WWW/Internet, pages 120–126.
Ferreira, R., Holanda, O., Melo, J., Bittencourt, I., Freitas, F., and Costa, E. B. (2011a).
An agent-based semantic web blog crawler. In International Conference on Information
Technology and Application.
89
REFERÊNCIAS BIBLIOGRÁFICAS
Ferreira, R., Melo, J., Brito, P., Costa, E., Lima, R., and Freitas, F. (2011b). Creating
a blog recommendation system through a framework for building blog crawlers. In
Simpósio Brasileiro de Sistemas Colaborativos.
Ferreira, R., Lima, R., Filho, D., Tomaz, H., and Freitas, F. (2011c). Improving news
web page classification through content extraction. In Proceedings of the IADIS
International Conference WWW/INTERNET.
Ferreira, R., Lima, R., Melo, D., and Freitas, F. (2011d). Tag-based and post-based
services for tag recommendation. In Proceedings of the IADIS International Conference
WWW/INTERNET.
Ferreira, R., Melo, J., Lima, R., Brito, P., Costa, E., and Freitas, F. (2012a). An
architecture-based framework for developing blog crawlers. In Symposium On Applied
Computing.
Ferreira, R., Melo, J., Lima, R., Brito, P., Costa, E., and Freitas, F. (2012b). Retriblog: A
framework for creating blog crawlers. In Symposium On Applied Computing.
Fujimura, K., Toda, H., Inoue, T., Hiroshima, N., Kataoka, R., and Sugizaki, M. (2006).
Blogranger - a multi-faceted blog search engine. In In Proc. 3rd Annual WWE.
Gaizauskas, R. and Wilks, Y. (1998). Information extraction: Beyond document retrieval.
Journal of Documentation, 54(1), 70–105.
Garlan, D. and Shaw, M. (1994). An introduction to software architecture. Technical
report, Pittsburgh, PA, USA.
Gayard, L. A., Rubira, C. M. F., and de Castro Guerra, P. A. (2008). COSMOS*: a
COmponent System MOdel for Software Architectures. Technical Report IC-08-04,
Institute of Computing, University of Campinas.
Geisser, S. (1993). Predictive Inference. Chapman & Hall.
Geun Chol Moon, Go Kikuta, T. Y. A. Y. T. T. (2010). Blog information considered
useful for book sales prediction. 7th International Conference on Service Systems and
Service Management (ICSSSM), 1, 1 – 5.
Golder, S. A. and Huberman, B. A. (2006). Usage patterns of collaborative tagging
systems. J. Inf. Sci., 32, 198–208.
90
REFERÊNCIAS BIBLIOGRÁFICAS
Gottron, T. (2007). Evaluating content extraction on html documents. ITA, pages 123 –
132.
Hart, M., Johnson, R., and Stent, A. (2009). itag: a personalized blog tagger. In
Proceedings of the third ACM conference on Recommender systems, RecSys ’09, pages
297–300, New York, NY, USA. ACM.
Hassan-montero, Y. and solana A, V. H. (2006). Improving tag-clouds as visual information retrieval interfaces. In Merída, InSciT2006 conference.
Hatcher, E. and Gospodnetic, O. (2004). Lucene in Action (In Action series). Manning
Publications.
Hiep Phuc Luong, S. G. and Wang, Q. (2009). Ontology-based focused crawling. In
EKNOW’09, pages 123–128.
Hong Qu, Andrea La Pietra, S. P. (2006). Automated blog classification: Challenges
and pitfalls. In AAAI Spring Symposium on Computational Approaches to Analysing
Weblogs.
Hotho, A., Nürnberger, A., and Paaß, G. (2005). A brief survey of text mining. LDV
Forum - GLDV Journal for Computational Linguistics and Language Technology,
20(1), 19–62.
Islam, M. J., Wu, Q. M. J., Ahmadi, M., and Sid-Ahmed, M. A. (2007). Investigating the
performance of naive- bayes classifiers and k- nearest neighbor classifiers. In Proceedings of the 2007 International Conference on Convergence Information Technology,
ICCIT ’07, pages 1541–1546, Washington, DC, USA. IEEE Computer Society.
Johnson, R. E. (1997). Components, frameworks, patterns. COMMUNICATIONS OF
THE ACM, 40, 10–17.
Johnson, R. E. and Foote, B. (1988). Designing reusable classes. Journal of ObjectOriented Programming, 1(2), 22–35.
Joshi, M. (2006). Blogharvest: Blog mining and search framework. In In: Proc. of the
International Conf. on Management of Data COMAD.
Kim, H., Lee, K., Shin, H., and Kim, H.-J. (2009). Tag suggestion method based on
association pattern and bigram approach. Software Engineering, Artificial Intelligence,
91
REFERÊNCIAS BIBLIOGRÁFICAS
Networking, and Parallel/Distributed Computing, ACIS International Conference on,
0, 63–68.
Klein, M. H., Kazman, R., Bass, L. J., Carrière, S. J., Barbacci, M., and Lipson, H. F.
(1999). Attribute-based architecture styles. In WICSA1: Proceedings of the TC2
First Working IFIP Conference on Software Architecture (WICSA1), pages 225–244,
Deventer, The Netherlands, The Netherlands. Kluwer, B.V.
Kleinberg, J. M. (1999). Authoritative sources in a hyperlinked environment. Journal of
the ACM, 46, 668–677.
Kohlschütter, C., Fankhauser, P., and Nejdl, W. (2010). Boilerplate detection using
shallow text features. In Proceedings of the third ACM international conference on
Web search and data mining, WSDM ’10, pages 441–450, New York, NY, USA. ACM.
Koskimies, K. (2001). Towards architecture-oriented programming environments. First
ASERC Workshop on Software Architecture.
Lee, K. and Kang, K. C. (2004). Feature dependency analysis for product line component
design. pages 69–85.
Lemur (2009). The lemur toolkit. http://www.lemurproject.org/. Accessed on December
2011.
Li Baoli, Y. S. and Qin, L. (2002). A comparative study on automatic categorization
methods for chinese search engine. Proceedings of the Eighth Joint International
Computer Conference, pages 117–120.
Li Baoli, Y. S. and Qin, L. (2003). An improved k-nearest neighbor algorithm for
text categorization. Proceedings of the 20th international conference on computer
processing of oriental languages.
Lucene (2001). Lucene. http://lucene.apache.org/java/docs/. Accessed on December
2011.
Magee, J. and Kramer, J. (1996). Dynamic structure in software architectures. In Proceedings of the 4th ACM SIGSOFT symposium on Foundations of software engineering,
SIGSOFT ’96, pages 3–14, New York, NY, USA. ACM.
Manning, C. D., Raghavan, P., and Schütze, H. (2008). Introduction to Information
Retrieval. Cambridge University Press, 1 edition.
92
REFERÊNCIAS BIBLIOGRÁFICAS
Markiewicz, M. E. and Lucena, C. J. (2001). Object oriented framework development.
http://www.acm.org/crossroads/xrds7-4/frameworks.html. Último acesso em Dezembro de 2011.
Markines, B., Cattuto, C., Menczer, F., Benz, D., Hotho, A., and Gerd, S. (2009). Evaluating similarity measures for emergent semantics of social tagging. In Proceedings
of the 18th international conference on World wide web, WWW ’09, pages 641–650,
New York, NY, USA. ACM.
McCallum, A. K. (1996). Bow: A toolkit for statistical language modeling, text retrieval,
classification and clustering. http://www.cs.cmu.edu/ mccallum/bow.
McDirmid, S., Flatt, M., and Hsieh, W. C. (2001). Jiazzi: new-age components for
old-fasioned java. In Proceedings of the 16th ACM SIGPLAN conference on Objectoriented programming, systems, languages, and applications, OOPSLA ’01, pages
211–222, New York, NY, USA. ACM.
Melo, J., Ferreira, R., Pontes, J., Costa, E., Brito, P., and Machado, A. (2011). Improving
the dynamic interaction in virtual learning environments through an ontology-based
recommender system. In Fourth Brazilian Workshop on Semantic Web and Education.
Miller, F. P., Vandome, A. F., and McBrewster, J. (2009). Levenshtein Distance: Information theory, Computer science, String (computer science), String metric, Damerau?
Levenshtein distance, Spell checker, Hamming distance. Alpha Press.
Miller, G. A. (1995). Wordnet: A lexical database for english. Communications of the
ACM, 38, 39–41.
Mishne, G. (2006). Autotag: a collaborative approach to automated tag assignment for
weblog posts. In Proceedings of the 15th international conference on World Wide Web,
WWW ’06, pages 953–954, New York, NY, USA. ACM.
Mitchell, T. (1997). Machine Learning (Mcgraw-Hill International Edit). McGraw-Hill
Education (ISE Editions), 1st edition.
Monroe, R. T., Kompanek, A., Melton, R., and Garlan, D. (1997). Architectural styles,
design patterns, and objects. IEEE Softw., 14(1), 43–52.
O’Reilly,
T.
(2005).
and
business
models
What
for
the
is
web
2.0.
design
next
generation
of
patterns
software.
93
REFERÊNCIAS BIBLIOGRÁFICAS
http://www.oreillynet.com/pub/a/oreilly/tim/news/2005/09/30/what-is-web-20.html.
Stand 12.5.2011.
Pant, G., Srinivasan, P., and Menczer, F. (2004). Crawling the web. In M. Levene and
A. Poulovassilis, editors, Web Dynamics. Springer.
Pinto, D., Branstein, M., Coleman, R., Croft, W. B., King, M., Li, W., and Wei, X. (2002).
Quasm: a system for question answering using semi-structured data. In Proceedings of
the 2nd ACM/IEEE-CS joint conference on Digital libraries, JCDL ’02, pages 46–55,
New York, NY, USA. ACM.
Qiao, S., Chu, X., and Wang, S. (2009). Study on application strategies of blog in
information-based teaching. Artificial Intelligence, International Joint Conference on,
0, 526–528.
Rosenbloom, A. (2004). The blogosphere - introduction. Commun. ACM, 47(12), 30–33.
Rosenblum, D. S. and Natarajan, R. (2000). Supporting architectural concerns in
component-interoperability standards. IEEE Proceedings of Software Special Issue on
ComponentBased Software Engineering, 147(6), 215–223.
Roy, S., Joshi, S., and Krishnapuram, R. (2004). Automatic categorization of web sites
based on source types. In Proceedings of the fifteenth ACM conference on Hypertext
and hypermedia, HYPERTEXT ’04, pages 38–39, New York, NY, USA. ACM.
Salton, G. and Buckley, C. (1988). Term-weighting approaches in automatic text retrieval.
Information Processing and Management, 24, 513–523.
Sauvé, J. P. (2000).
Projeto de software orientado a objeto.
http://www.dsc.ufcg.edu.br/ jacques/cursos/map/html/frame/oque.htm.
Último
acesso em Dezembro de 2011.
Sebastiani, F. and Delle Ricerche, C. N. (2002). Machine learning in automated text
categorization. ACM Computing Surveys, 34, 1–47.
Shaw, M. and Garlan, D. (1996). Software Architecture: Perspectives on an Emerging
Discipline. Prentice-Hall, Inc., Upper Saddle River, NJ, USA.
Shkapenyuk, V. and Suel, T. (2002). Design and implementation of a high-performance
distributed web crawler. pages 357–368.
94
REFERÊNCIAS BIBLIOGRÁFICAS
Sigurbjörnsson, B. and van Zwol, R. (2008). Flickr tag recommendation based on
collective knowledge. In Proceeding of the 17th international conference on World
Wide Web, WWW ’08, pages 327–336, New York, NY, USA. ACM.
Sommerville, I. (2001). Software Engineering. Addison-Wesley, 6th edition.
Sommerville, I. (2004). Software Engineering (7th Edition) (International Computer
Science Series). Addison Wesley.
Sood, S., Hammond, K., Owsley, S., and Birnbaum, L. (2007). TagAssist: Automatic Tag
Suggestion for Blog Posts. In Proceedings of the International Conference on Weblogs
and Social Media (ICWSM 2007).
Subramanya, S. B. and Liu, H. (2008). Socialtagger - collaborative tagging for blogs in
the long tail. In Proceeding of the 2008 ACM workshop on Search in social media,
SSM ’08, pages 19–26, New York, NY, USA. ACM.
Szyperski, C. (1998). Component Software: Beyond Object-Oriented Programming.
Addison-Wesley.
Tan, S. (2006). An effective refinement strategy for knn text classifier. Expert Syst. Appl.,
30, 290–298.
Tanenbaum, A. S. (2007). Modern Operating Systems. Prentice Hall Press, Upper Saddle
River, NJ, USA.
Taylor, R. N., Medvidovic, N., Anderson, K. M., Whitehead, Jr., E. J., and Robbins,
J. E. (1995). A component- and message-based architectural style for gui software. In
Proceedings of the 17th international conference on Software engineering, ICSE ’95,
pages 295–304, New York, NY, USA. ACM.
Technorati
(2008).
State
of
the
blogosphere
http://technorati.com/blogging/feature/state-of-the-blogosphere-2008/.
acesso em Dezembro de 2011.
2008.
Último
Technorati
(2009).
State
of
the
blogosphere
http://technorati.com/blogging/feature/state-of-the-blogosphere-2009/.
acesso em Dezembro de 2011.
2009.
Último
Tenenbaum, A. (1995). Estruturas de Dados Usando C. MAKRON BOOKS.
95
REFERÊNCIAS BIBLIOGRÁFICAS
van Ommering, R., van der Linden, F., Kramer, J., and Magee, J. (2000). The koala
component model for consumer electronics software. Computer, 33, 78–85.
Weninger, T. and Hsu, W. H. (2008). Text extraction from the web via text-to-tag ratio.
In Proceedings of the 2008 19th International Conference on Database and Expert
Systems Application, pages 23–28, Washington, DC, USA. IEEE Computer Society.
Whitehead, E. J., Jason, J., Robbins, E., Medvidovic, N., and Taylor, R. N. (1995).
Software architecture: Foundation of a software component marketplace. In Proceedings of the First International Workshop on Architectures for Software Systems, pages
276–282.
Xiong, H. and Wang, X. (2008). The information filtering under the web 2.0 environment.
In Proceedings of the 2008 International Conference on Information Management,
Innovation Management and Industrial Engineering - Volume 01, pages 141–146,
Washington, DC, USA. IEEE Computer Society.
Yang, X. (2008). Improving teachers’ knowledge management with blog platform.
In Proceedings of the 2008 International Workshop on Education Technology and
Training & 2008 International Workshop on Geoscience and Remote Sensing - Volume
01, pages 73–76, Washington, DC, USA. IEEE Computer Society.
Yang, Y. and Liu, X. (1999). A re-examination of text categorization methods. In
Proceedings of the 22nd annual international ACM SIGIR conference on Research and
development in information retrieval, SIGIR ’99, pages 42–49, New York, NY, USA.
ACM.
Ying Ding, Ioan Toma, S. J. K. M. F. and Yan, Z. (2008). Data mediation and interoperation in social web: Modeling, crawling and integrating social tagging data. Workshop
on Social Web Search and Mining.
You-Sheng, Z. and Yu-Yun, H. (2003). Architecture-based software process model.
Software Engineering Notes, 28(2).
96
Catalogação na fonte
Bibliotecário Vimário Carvalho da Silva, CBR 4-1204
Mello, Rafael Ferreira Leite de.
RetriBlog: um framework centrado na arquitetura para criação de
blog crawlers./ Rafael Ferreira Leite de Mello. – Recife: O Autor, 2012.
Cvii, 107 f.: fig. tab.
Orientador: Frederico Luiz Gonçalves de Freitas.
Dissertação (Mestrado) – Universidade Federal de Pernambuco, CIN,
Ciência da Computação, 2012.
Inclui bibliografia.
1. Recuperação da informação. 2. Blog Crawlers. 3. Framework. I.
Freitas, Frederico Luiz Gonçalves de (orientador). II. Título.
025.04 (22. ed.)
MEI 2012-006
Download

Rafael Ferreira Leite de Mello - Universidade Federal de Pernambuco