SlideShare uma empresa Scribd logo
1 de 23
Baixar para ler offline
Departamento de Eletrónica,
Telecomunicações e Informática
Armazenamento, Indexação e
Recuperação de Informação
Trabalho Prático 2
Mestrado em Sistemas de Informação
Docente: Prof. José Luís Oliveira Discentes: Emanuel Pires – 77994
Prof. Sérgio Matos Mário Monteiro – 77910
Armazenamento, Indexação e Recuperação de Informação – MSI – 2015/2016
Mário Monteiro - 77910 || Emanuel Pires - 77994
2
Índice
INTRODUÇÃO.........................................................................................................................3
PARTE 1 – ARQUITETURA E MODELAÇÃO .............................................................................5
PARTE 2 – CORPUS READ.....................................................................................................10
PARTE 3 – TOKENIZER............................................................................................................11
PARTE 4 - INDEXAÇÃO............................................................................................................12
PARTE 5 – RESPOSTAS AS QUESTÕES ..................................................................................13
PARTE 6 – EXECUÇÃO DO ALGORITMO INDEXAÇÃO ............................................................19
PARTE 6 – CONSIDERAÇÕES FINAIS.....................................................................................23
Armazenamento, Indexação e Recuperação de Informação – MSI – 2015/2016
Mário Monteiro - 77910 || Emanuel Pires - 77994
3
INTRODUÇÃO
Este relatório realiza-se no âmbito da unidade curricular da disciplina Armazenamento
Indexação e Recuperação de Informação do Mestrado em Sistemas de Informação da
Universidade de Aveiro, com o intuito de fazer uma readaptação do algoritmo do trabalho
prático 1 com os seguintes requisitos básicos:
 Criar um algoritmo de índice invertido utilizando o corpus do trabalho 1, que permite
realizar pesquisa por um texto (Exemplo: Ambiente, politica Ambiental);
 Criar corpus com base em capítulos e speakers fornecidos em cada um dos documentos
em ficheiros corpus.
 Implementar o método rank retrieval baseado no modelo vector-space e utilizar o
sistema de ponderação tf-idf;
 Disponibilizar um relatório;
 Adaptar o método indexing/retrieval pesquisa por frase (Exemplo: “fishing quota”) e
pesquisa de proximidade (Exemplo:”fishing quota”~10);
 Adaptar método indexing/retrieval para suportar múltiplos termos e combinação de
termos no querie.
Será apresentado com grande nível de detalhes a arquitetura, diagrama de classes, bem como a
descrição para cada uma das classes. Encontra-se também um tutorial em anexo a mostrar como
se interagir com o algoritmo.
Armazenamento, Indexação e Recuperação de Informação – MSI – 2015/2016
Mário Monteiro - 77910 || Emanuel Pires - 77994
4
DESENVOLVIMENTO
Para o desenvolvimento do algoritmo foi sugerido pelo professor a utilização da tecnologia
Java.
Java - Uma linguagem de programação e plataforma computacional lançada pela Sun
Microsystems em 1995. Esta linguagem está presente desde, laptops a datacenters, consolas de
jogos a supercomputadores científicos, telemóveis e muito mais. Ela encontra-se disponível de
forma gratuita na Internet no site java.com.
Como IDE de desenvolvimento, foi escolhido o Netbeans 8.0.2. Este oferece-nos assistentes e
modelos que permitem a criação de aplicações Java EE, Java SE e Java ME.
Teve-se a necessidade de incorporar algumas bibliotecas externas para o desenvolvimento deste
algoritmo como:
 Jsoup-1.8.3.jar1 - Biblioteca feito em Java para trabalhar com serialização de objetos
Json.
 Json-simple-1.1.1.jar2 – Biblioteca que faz parser (serialização) de objetos em Json.
 Guava-18.0.jar3 - Biblioteca da Google utilizado para fazer tratamento de: coleções,
caching, apoio primitivas, processamento de string, I/O, no nosso caso ela é utilizado
para fazer o Join do texto Corpus.
1Http://jsoup.org/packages/jsoup-1.8.3.jar
2 Http://www.java2s.com/Code/Jar/j/Downloadjsonsimple111jar.htm
3 Http://search.maven.org/remotecontent?filepath=com/google/guava/guava/18.0/guava-18.0.jar
Armazenamento, Indexação e Recuperação de Informação – MSI – 2015/2016
Mário Monteiro - 77910 || Emanuel Pires - 77994
5
 Libstemmer.jar 4 - Algoritmo Porter Stemmer,um processo comum para normalização
morfológicas de palavras em português. Seu principal objetivo é fazer normalização de
palavras em sistemas de recuperação de informação.
PARTE 1 – ARQUITETURA E MODELAÇÃO
Foi dotado o modelo de classes Orientado a Objetos, para o desenvolvimento deste algoritmo.
O algoritmo foi desenvolvido com implementação de threads de forma realizar operações
diversas em paralelo ou seja, os trabalhos são executados em espaços próprios na memória e no
processador, de realçar ainda que as estruturas de dados mais utilizado para desenvolvimento
deste algoritmo são:
 Map, HashMap e TreeMap.
Para uma melhor compreensão da estrutura de classes, é apresentado uma breve discrição dos
mesmos:
 Library – Classe que incorpora um conjunto de métodos auxiliares que ajudam no
desenvolvimento do algoritmo;
 Policy – Classe que faz toda gestão de politicas, como por exemplo:
o Definir o tamanho máximo de memória a ser utilizada;
o Definir quantidade de corpus a ser lido pelas threads;
o Definir o limite de memória;
 Thread – Classe mãe para as threds, pois é nesta classe que todas threads são criados
em que posteriormente irão ser instanciados em outras classes;
4 (http://snowball.tartarus.org/)
Armazenamento, Indexação e Recuperação de Informação – MSI – 2015/2016
Mário Monteiro - 77910 || Emanuel Pires - 77994
6
 CorpusRead – Classe responsável por fazer a leitura dos corpus, separar os CHAPTER
e SPEAKER, com finalidade de obter um corpus, de forma como foi especificado nos
requisitos do trabalho. Cada corpus pode conter um ou mais CHAPTER e cada
CHAPTER pode conter um ou mais SPEAKER. Quando processado um SPEAKER, a
classe tem a responsabilidade de fazer limpeza dos dados aplicando o algoritmo remove
StopWords, Steamer e guarda assim a referência de cada corpus numa estrutura de
HasMap, este recebe um id que é sequencial e um valor que contém a data que se
encontra em cada ficheiro concatenado com o id do CHAPTER e o id do SPEAKER,
nome do SPEAKER e referida Lingua. De realçar ainda que para proceder com limpeza
dos dados, foi criada ainda, um ficheiro com StopWords complexo, onde será removido
alguns outros termos que o stopWords simples ignorava.
 Token – Classe responsável pelo tratamento e contabilização dos termos individuais;
 OperateWhitThread – classe onde é criado todas operações que utiliza Thread;
 Ranking – Classe onde realiza as operações relativamente ao ranking retrieval;
 ListaRanking – Representa uma estrutura responsável por fazer armazenamento dos
corpus e a relativa classificação de ranking, de notar que esta estrutura apresenta os
dados ordenados.
 Indexer – Classe responsável por fazer indexação final, executado todos os métodos das
outras classes descritas acima.
Armazenamento, Indexação e Recuperação de Informação – MSI – 2015/2016
Mário Monteiro - 77910 || Emanuel Pires - 77994
7
A estrutura das classes é apresentada na figura 1.
Figura 1 - Diagrama de Classes
Armazenamento, Indexação e Recuperação de Informação – MSI – 2015/2016
Mário Monteiro - 77910 || Emanuel Pires - 77994
8
Assim como foi descrito acima, acerca da classe CorpusRead, Indexer e Token podemos ver na
figura 2 o modelo descrevendo como é que essas classes trabalham para organizar os Corpus.
Para realizar a operação de indexação foi fornecido um conjunto de documentos (corpus). O
algoritmo desenvolvido aplica sobre esses corpus o princípio de divisão para que seja utilizado
menos memória possível e com menor quantidade de dados para processar a velocidade do
mesmo é maior.
Imaginemos numa fábrica onde dois funcionários trabalham na mesma linha de produção: isso
seria o equivalente a um processador dual-core. Caso o gerente tiver que mandar uma tarefa
Figura 2 – Modo de leitura dos Corpus
Armazenamento, Indexação e Recuperação de Informação – MSI – 2015/2016
Mário Monteiro - 77910 || Emanuel Pires - 77994
9
apenas para o primeiro operário, o segundo fica sem ter o que fazer. Desta forma só o primeiro
operário fica a trabalhar.
Para resolver esse problema, o gerente pode dividir a tarefa em duas partes e mandado ordenado
assim que cada um fizesse uma parte do trabalho. Dessa maneira, o processo seria concluído em
menos tempo e com maior eficácia.
Onde queremos chegar com esse exemplo? Simples: o algoritmo desenvolvido segue o mesmo
modelo que o gerente deve tomar para dividir tarefas aos seus operários.
Neste caso o que o algoritmo foi treinado a fazer é a repartição de dados em vários blocos, de
acordo com a definição na configuração, cada bloco ainda é subdividido de forma a partilhar os
mesmos aos várias threads tornando os mais eficientes, não sobrecarrega-los com grande
quantidade de dados na memória. Em java cada thread tem uma quantidade de memória limitada
e uma instanciação de processador reservado, permitindo assim a sua execução em paralelo e
independente de qualquer outro processo.
Depois de realizar toda a operação de divisão dos ficheiros em blocos, os blocos são tratados
pelas Threads, assim como foi descrito na descrição da classe CorpusRead, de forma que no
final cada speaker dentro dos Chapter, virá a ser um Corpus.
Depois de já ter um Corpus, as threads encarregam de fazer o tratamento dos mesmos (aplicação
do StopWords e Steamer) e armazena-os numa estrutura em HashMap, cada uma desta estrutura
é armazenado no disco de forma a libertar o espaço de memória, de mesmo modo as threads
são liberadas forma estarem prontos para executarem novas tarefas.
Os dados armazenados em disco são processados por uma outra thread para realizar a
tokenização, cada bloco no disco é carregado e um outro processo faz a contagem dos termos
para cada corpus devolvendo-os na estrutura de índice invertido 5.
5 Ver figura 4
Armazenamento, Indexação e Recuperação de Informação – MSI – 2015/2016
Mário Monteiro - 77910 || Emanuel Pires - 77994
10
Para melhor compreender todo o processo foi criada o seguinte diagrama de fluxo de dados que
representa todo o algoritmo.
Figura 3 – Diagrama de fluxo de dados da indexação invertida
PARTE 2 – CORPUS READ
Um dos requisitos do trabalho é criar uma classe capaz de fazer leitura de corpus e devolver o
conteúdo dos mesmos, analisando a estrutura do mesmo e removendo os caracteres especiais
existentes (tags HTML etc…).
A leitura dos ficheiros é feita através da divisão de corpus em segmentos, definida na
configuração, de forma a realizar toda as operações de leitura e tratamento dos conteúdos dos
ficheiros em paralelo entre as várias Threads. Para que o processo seja eficiente na utilização
do processador e da memória.
Cada corpus físico é dividido em vários corpus, conforme o número de speakers de cada corpus,
proporcionando como resultado um corpus com menor quantidade de informação, mais em
maior numero, cada um desses speakers são processados por uma Thead em paralela.
Armazenamento, Indexação e Recuperação de Informação – MSI – 2015/2016
Mário Monteiro - 77910 || Emanuel Pires - 77994
11
A leitura de corpus é armazenada em N estruturas de memória (HashMap), definida na
configuração de forma a facilitar o acesso do mesmo pelas Threads que realizam a operação de
tokenização. Essas estruturas são armazenadas em disco a cada iteração, com vista a melhorar
a performance do algoritmo. Após isso existe as threads auxiliares para carregar um a um, e
realizar o tratamento em memória. Ficam a trabalhar em paralelo com a leitura de corpus.
PARTE 3 – TOKENIZER
Tokenizer tem como objetivo, criar uma classe Tokenque devolve os tokensde um dado corpus,
sabendo que deve ignorar os caracteres especiais ('.', ',', '-', etc.) como também entidades HTML
e/ou XML (‘ ’ e outros).
Para o efeito, foi desenvolvido no algoritmo uma classe que executa o processo de leitura no
disco, dos corpus armazenados temporariamente, carregar cada um deles e realizar operação de
contagem de ocorrências dos mesmos dentro de cada corpus.
Sabendo que os corpos compõem uma grande quantidade de termos, processa-los de uma vez
só tornaria o algoritmo pouco eficiente, o consumo de memória e o acesso ao processador pode
ser excessivo. Por isso esses termos são divididos em vários segmentos e distribuídos em várias
Threads conforme o número de segmento criado, proporcionando assim uma maior velocidade
no processamento.
Como resultado, o processo irá retornar os termos e o número de vezes que estas ocorrem para
cada corpus. O mesmo será enviado para outras threads com finalidade de criar uma estrutura
de índice invertido.
Armazenamento, Indexação e Recuperação de Informação – MSI – 2015/2016
Mário Monteiro - 77910 || Emanuel Pires - 77994
12
PARTE 4 - INDEXAÇÃO
O objectivo principal de todo o algoritmo é criar indexação de índice invertido. Para o feito foi
criado uma classe de Index que executa todas as classes anteriores e armazena em disco a
indexação realizada.
A figura 4 apresenta a estrutura do índice invertido.
.
Figura 4 – Estrutura do índice Invertido
Armazenamento, Indexação e Recuperação de Informação – MSI – 2015/2016
Mário Monteiro - 77910 || Emanuel Pires - 77994
13
A filosofiaadotada foi de utilizar o menos possívelna estrutura do índice invertido o HashMap,
pois este consome muita memória.
Foi criada um índice com uma Lista da classe InvertIndex, onde cada índice é armazena a
informação para um determinado termo, e estes estão mapeadas num HashMap com Termo
e índice do ArrayList, pois tornaria o acesso muito mais rápido no processo de indexação e
pesquisa do mesmo.
Classe InvertIndex com os atributos frequênciaTermos (Numero de ocorrência do termo em
todos os corpus), elementos (Lista de classe No). A classe No é utilizada para armazenar
informações do corpus em que cada termo ocorre. Temos Para a classe No os atributos
idCorpus (id correspondente ao corpus), tF (term Frequency), WT (Calculo do Peso), nLize
(Normalização) e idPosicao (Link para uma lista de posição de cada termo dentro de um
Corpus), pois esta lista como consome muita memoria é armazenada no disco (Estrutura
HashMap) e guardado no índice apenas um id que refere ao mesmo.
PARTE 5 – RESPOSTAS AS QUESTÕES
O algoritmo realiza a limpeza de dados através de remoção de alguns termos (palavras) que são
encontrados na lista de StopWords e utilizando ainda o algoritmo de Steamer, de forma a
normalizar os termos. Foi combinado diferentes formas de execução do algoritmo com
finalidade de criar estatísticas acerca do desempenho e quantidade de termos indexados através
do algoritmo. Isto Pode ser analisado na tabela que se segue, com os resultados obtidos através
da combinação da limpeza dos Stop Words e a inclusão ou não do algoritmo Steamer.
Modo Execução
Tempo
(Minuto)
Número de
Termos
Tempo Inicial Tempo Final
Com remoção do Stop
Words e Steamer
8.53 88778 11:18:54 11:27:26
Sem remoção do Stop
Words e com Steamer
8.43 88806 11:29:50 11:38:17
Com remoção do Stop
Words semexecução do
Steamer
8.1 162187 11:48:12 11:56:19
Armazenamento, Indexação e Recuperação de Informação – MSI – 2015/2016
Mário Monteiro - 77910 || Emanuel Pires - 77994
14
Sem remoção do Stop
Words e semexecução
do Steamer
8.33 162349 12:01:30 12:09:50
Tabela I - Tabela estatística de indexação com remoção do StopWords e aplicação do algoritmo Steamer.
O tempo inicial referido na tabela acima representa o tempo em que o algoritmo foi iniciado e
o tempo final, representa o tempo em que o algoritmo termina execução.
Uma dos requisitos também é criar novo corpus a partir das informações de cada Speaker dentro
dos Chapters, ou seja o nome do corpus devem ser além das datas, ter o chapter ID, o speaker
ID, O nome do Speaker e a língua. Para isso foi criado a seguinte estrutura para o nome do
corpus:
 D:00-03-14 C:10 S:167 N:Antonios L:SL
o D – data do corpus
o C – Chapter ID
o S – Speaker ID
o N – Nome do Speaker
o L – língua do speaker (o Speaker que não tem língua é atribuída SL)
Para responder as questões é necessário criar o algoritmo que realiza o ranking dos termos por
cada corpus utilizando o processo tf-idf. A figura 5 apresenta a forma como é realizada todo o
processo de cálculo do ranking.
Armazenamento, Indexação e Recuperação de Informação – MSI – 2015/2016
Mário Monteiro - 77910 || Emanuel Pires - 77994
15
Figura 5 - Calculo do Ranking
O processo começa com a indexação onde é calculado o peso de termos por corpus que é 1+
log10 (TF) para tf maior que zero, 0 caso contrario, durante esse processo é calculado o DF e
armazenada num HashMap (termo, DF), calculado também o doc lenght (raiz quadrada do
somatório ao quadrado de cada WT dos termos) e armazenada numa Estrutura HashMap
(corpus, dc lenght), foi utilizado o HashMap pois facilita a inserção e a pesquisa do mesmo.
Após terminar a indexação é realizado o calculo do IDF sobre a estrutura de HashMap do DF,
onde o IDF é log10(N/DF), terminando o calculo do IDF é calculado o N’Lize para cada termo
por Corpus. Para isso é realizada uma iteração pela estrutura do Índice invertido onde a cada
relação Termo/Corpus é aplicado a normalização (WT/docLenght). E essas informações podem
ser guardadas no disco conforme a opção do utilizador, permanecendo na memória.
Quando o utilizador pretende processar a query, parte da informação (lista de posições) é lida
do disco antes de inserir a query. Com essa inserção é calculada o WT da query ((1+log(tf-wt)
para tf-wt > 0, 0 caso contrario) * IDF), a normalização do mesmo (WTquery/docLenghtquery)
e obtido a normalização do Termo/Corpus. Com essas informações disponíveis é calculado o
score e disponibilizada a informação no Output.
Armazenamento, Indexação e Recuperação de Informação – MSI – 2015/2016
Mário Monteiro - 77910 || Emanuel Pires - 77994
16
Os dados calculados da score por cada termo/corpus é adicionado numa estrutura em lista de
forma ordenada por ordem decrescente ou seja a instancia com maior score fica no início da
fila, e depois a mesma é apresentada no output ordenada. Para isso é utilizada a classe
ListaRanking com Atributos:
 String NomeCorpus – Nome atribuído ao corpus;
 int idCorpus – identificação dos corpus;
 double score – o score calculado para os corpus;
 HashMap cálculos – os cálculos efetuados (WT, IDF, N’Lize);
 ListaRanking próximo – apontado para o próximo elemento da lista.
PESQUISA SIMPLES (3 - PARTE A)
Para a realização desta pesquisa é criado uma lista de corpus, são corpus onde os termos
aparecem, isto para realizar a operação de ranking apenas nos corpus/termos da query. Para
isso é realizada a operação de união dos corpus onde os termos introduzidos ocorrem (vide
figura 6).
Figura 6 – Cálculo do ranking para pesquisa simples
Apos a inserção dos termos é aplicado a limpeza dos stopwords e aplicado o steamers, e
realizada uma união de todos os corpus onde os termos aparecem e depois disso é calculado
o ranking para cada um dos corpus/termos.
Armazenamento, Indexação e Recuperação de Informação – MSI – 2015/2016
Mário Monteiro - 77910 || Emanuel Pires - 77994
17
PESQUISA DE FRASES E DE PROXIMIDADE E COM QUOTAS K (4 – PARTE B)
A pesquisa de frases e de proximidade é utilizada o mesmo algoritmo, pois a pesquisa de frase
utiliza a proximidade igual a 1, enquanto a pesquisa de proximidade utiliza uma quota igual a
K, introduzida pelo utilizado na query.
Para a realização desta pesquisa é criado uma lista de corpus, são corpus onde os todos os
termos aparecem, isto para realizar a operação de ranking apenas nos corpus/termos da query
aparecem todos ao mesmo tempo.
Para isso é realizada a operação de interseção dos corpus onde os termos introduzidos
ocorrem (vide figura 7), apos isso é aplicado o processo de proximidade apenas nos N
primeiros corpus do Ranking, proporcionado maior rapidez, pois não será preciso realizar o
cálculo de proximidade em grande número de corpus, visto que já tenhamos o corpus com
maior probabilidade dos termos aparecerem juntos.
Figura 7 – pesquisa de Proximidade
PESQUISA POR COMBINAÇÃO DE CAMPOS (5 – PARTE B)
Armazenamento, Indexação e Recuperação de Informação – MSI – 2015/2016
Mário Monteiro - 77910 || Emanuel Pires - 77994
18
A pesquisa por combinação dos campos é suposto ao utilizador inserir determinado campo a
pesquisar e proporcionar resultados conforme o campo escolhido, por exemplo pesquisar
todos os corpus onde aparece o speaker com o nome Marques.
Para isso foi utilizado um filtro baseado no nome do corpus mapeado durante a indexação,
pois o nome do corpus já tem o nome para cada speaker. Além disso tem todos os outros
campos que podem ser utilizados na pesquisa, como língua e data (vide figura 8).
Figura 8 - Pesquisa por campos no corpus
Armazenamento, Indexação e Recuperação de Informação – MSI – 2015/2016
Mário Monteiro - 77910 || Emanuel Pires - 77994
19
PARTE 6 – EXECUÇÃO DO ALGORITMO INDEXAÇÃO
Figura 9 - Escolher a configuração
Ao iniciar o algoritmo, questionado ao utilizador sobre a configuração do mesmo, onde pode
adicionar um novo endereço para a configuração ou pressionar um Enter para aceitar a
configuração por defeito.
Apos isso é apresentado um menu, com opções a fim de ajudar-nos na execução do algoritmo.
Opções como: Executar a indexação e apresentar os relatórios, Queries, Configuração, Load a
Save Data, vide a figura 10.
Armazenamento, Indexação e Recuperação de Informação – MSI – 2015/2016
Mário Monteiro - 77910 || Emanuel Pires - 77994
20
Figura 10 - Menu inicial
A configuração é muito importante, pois a partir desta é possível determinar o número de corpus
a processar por cada threads, por defeito é aplicado uma configuração com um threads para cada
corpus para quantidade de corpus até 50, a partir desta os corpus são processados em grupos de
50 e criado 50 HashMaps e 50 Threads para processar respetivos corpus. Esta configuração
pode ser alterada pelo utilizador antes de executar a indexação. Vide figura 11.
Figura 11 - Opção de configuração
Armazenamento, Indexação e Recuperação de Informação – MSI – 2015/2016
Mário Monteiro - 77910 || Emanuel Pires - 77994
21
Definir o número de blocos de memória a processar tem a ver com a quantidade de HasHMap
a ser utilizado para armazenar informação durante o processo de corpus Read e de
Tokenização, os mesmos são armazenados no disco para continuação do processo de
indexação, visto a sua permanência na memória, irá sobrecarregar a mesma.
Definir o número de Blocos de Corpus, tem a ver com o número de corpus a ser carregado e
processado por cada threads que é criada conforme a configuração do número de blocos de
memória, vide figura 2.
Definir o limite de memória que a aplicação deve chegar tem a ver com o ultimo limite que a
aplicação deve suportar durante o processo de indexação.
Todas essas configurações são carregadas e armazenadas num ficheiro de configuração por
isso o utilizador pode aceitar ou não a configuração por defeito.
Após escolher a opção executar Indexação é apresentada as opções de execução.
Opção 1 - é para arrancar com a execução em si. Durante a execução aparece no output o tempo
de início e os números de grupos de corpus em execução, ao terminar a indexação aprece o
tempo final.
Opção 2 [Desativar] Stopwords, significa que o algoritmo vai ser executado removendo do
corpus todos os Stopwords, caso se pretenda deixar os Stopwords nos corpos deve ser escolhida
esta opção, o utilizador pode ativar ou desativar execução de Stopwords.
Opção 3 [Desativar] Steamer, significa que o algoritmo vai ser executado aplicando algoritmo
de Steamer sobre os termos, caso se pretenda deixar os termos sem aplicar o Steamer deve ser
escolhida esta opção.
Opção 4 pode ser escolhida os dois modos de execução ao mesmo tempo. Vide a figura 12.
Armazenamento, Indexação e Recuperação de Informação – MSI – 2015/2016
Mário Monteiro - 77910 || Emanuel Pires - 77994
22
Figura 12 - Menu execução da indexação
No menu inicial, na figura 8 se escolher a opção 3 é proporcionado um outro menu de forma
a realizar as diversas pesquisas sugeridas no trabalho ver figura 13.
Figura 13 - Opção de queries
Armazenamento, Indexação e Recuperação de Informação – MSI – 2015/2016
Mário Monteiro - 77910 || Emanuel Pires - 77994
23
A opção 1 é para realizar as queries da parte A em 3, na opção 2 e 3 para realizar as pesquisas
por frases de proximidade na parte B em 4 e a opção 4 para realizar a pesquisa proposta em
parte B em 5.
PARTE 6 – CONSIDERAÇÕES FINAIS
Este trabalho propôs-se como objetivo geral criar uma estrutura de indexação invertida em
java,para que o trabalho não selimitasseaum simples algoritmo de indexação pouco eficiente
em termos de recursos e tempos, foi realizado um conjunto de pesquisa e ações de forma a
torna-lo num algoritmo eficiente na utilização dos recursos e com um tempo de execução
razoável.
Este tempo pode ser melhorado muito ainda mais com um uma unidade de processamento e
memória maior, aumentando o número de corpos a processar a cada bloco de corpos.
Filosofia de segmentação e multiprocessamento adotada pode se dizer que em termos de
performance do algoritmo o ganho foi brutal, visto que com o multiprocessamento dos corpos
em segmentos teremos pouca utilização da memória e uma melhor eficiência no uso do
processador, bem como a operação de pesquisa sobre o Índice invertido criado.
A nível de eficiência o maior ganho em termos de eficiência do algoritmo foi conseguido nos
seguintes pontos:
 Segmentação dos corpos e grupos pequenos, num tamanho razoável para permitir que
não seja sobrecarregada o processador e a memória;
 Construção do índiceinvertido utilizado Listas emArray para uma estrutura em classes,
pois a inserção e pesquisa é muito rápido bem como o consumo de memória é menor,
pois é utilizada menos HashMaps.
 Não utilização de colectores de lixo(Garbage colector,System.gc() no Java)da memoria
varias vezes, pois o mesmo tende a tornar pouco eficiente o algoritmo, pois executa
varias operações para o efeito.
 Aplicação de uma classe policy, que determina a quantidade de memória em uso e o
limite a ser utilizada durante a indexação e processamento d algoritmo, permite que
não haja uma sobrecarga da memória.

Mais conteúdo relacionado

Mais procurados

Sistemas Operacionais Modernos - Gerenciamento de Memória
Sistemas Operacionais Modernos - Gerenciamento de MemóriaSistemas Operacionais Modernos - Gerenciamento de Memória
Sistemas Operacionais Modernos - Gerenciamento de MemóriaWellington Oliveira
 
Arquitetura de Computadores: Conceitos básicos
Arquitetura de Computadores: Conceitos básicosArquitetura de Computadores: Conceitos básicos
Arquitetura de Computadores: Conceitos básicosAlex Camargo
 
Gerenciamento de memoria
Gerenciamento de memoriaGerenciamento de memoria
Gerenciamento de memoriaJailson Silva
 
Aula 7 de Arquitetura
Aula 7 de ArquiteturaAula 7 de Arquitetura
Aula 7 de ArquiteturaMarco Silva
 
Arquitetura de Computadores: Barramentos e instruções
Arquitetura de Computadores: Barramentos e instruçõesArquitetura de Computadores: Barramentos e instruções
Arquitetura de Computadores: Barramentos e instruçõesAlex Camargo
 
Gerência de Armazenamento: Sistemas de Entrada e Saída
Gerência de Armazenamento: Sistemas de Entrada e SaídaGerência de Armazenamento: Sistemas de Entrada e Saída
Gerência de Armazenamento: Sistemas de Entrada e SaídaAlexandre Duarte
 
Apostila computacao
Apostila computacaoApostila computacao
Apostila computacaowebphotoshop
 
Sistemas operacionais memória no linux
Sistemas operacionais   memória no linuxSistemas operacionais   memória no linux
Sistemas operacionais memória no linuxCarlos Melo
 
Resumo de S.O.
Resumo de S.O.Resumo de S.O.
Resumo de S.O.dannas_06
 
Introdução a computação e suas aplicações seminário
Introdução a computação e suas aplicações seminárioIntrodução a computação e suas aplicações seminário
Introdução a computação e suas aplicações seminárioRobson Ferreira
 
Hierarquia de memória
Hierarquia de memóriaHierarquia de memória
Hierarquia de memóriaPAULO Moreira
 
Gerência de Armazenamento: Sistemas de Armazenamento em Massa
Gerência de Armazenamento: Sistemas de Armazenamento em MassaGerência de Armazenamento: Sistemas de Armazenamento em Massa
Gerência de Armazenamento: Sistemas de Armazenamento em MassaAlexandre Duarte
 
Tecnologia front end back-end
Tecnologia front end back-end Tecnologia front end back-end
Tecnologia front end back-end Andressa Silveira
 
Gerência de Memória: Memória Principal
Gerência de Memória: Memória PrincipalGerência de Memória: Memória Principal
Gerência de Memória: Memória PrincipalAlexandre Duarte
 

Mais procurados (20)

Htm trabalho
Htm trabalhoHtm trabalho
Htm trabalho
 
Processos+threads.2pp
Processos+threads.2ppProcessos+threads.2pp
Processos+threads.2pp
 
Sistemas Operacionais Modernos - Gerenciamento de Memória
Sistemas Operacionais Modernos - Gerenciamento de MemóriaSistemas Operacionais Modernos - Gerenciamento de Memória
Sistemas Operacionais Modernos - Gerenciamento de Memória
 
Artigo memórias
Artigo memóriasArtigo memórias
Artigo memórias
 
Arquitetura de Computadores: Conceitos básicos
Arquitetura de Computadores: Conceitos básicosArquitetura de Computadores: Conceitos básicos
Arquitetura de Computadores: Conceitos básicos
 
Gerenciamento de memoria
Gerenciamento de memoriaGerenciamento de memoria
Gerenciamento de memoria
 
Aula 7 de Arquitetura
Aula 7 de ArquiteturaAula 7 de Arquitetura
Aula 7 de Arquitetura
 
Arquitetura de Computadores: Barramentos e instruções
Arquitetura de Computadores: Barramentos e instruçõesArquitetura de Computadores: Barramentos e instruções
Arquitetura de Computadores: Barramentos e instruções
 
Gerência de Armazenamento: Sistemas de Entrada e Saída
Gerência de Armazenamento: Sistemas de Entrada e SaídaGerência de Armazenamento: Sistemas de Entrada e Saída
Gerência de Armazenamento: Sistemas de Entrada e Saída
 
Apostila computacao
Apostila computacaoApostila computacao
Apostila computacao
 
Sistemas operacionais memória no linux
Sistemas operacionais   memória no linuxSistemas operacionais   memória no linux
Sistemas operacionais memória no linux
 
4 memo arq
4   memo arq4   memo arq
4 memo arq
 
Resumo de S.O.
Resumo de S.O.Resumo de S.O.
Resumo de S.O.
 
Introdução a computação e suas aplicações seminário
Introdução a computação e suas aplicações seminárioIntrodução a computação e suas aplicações seminário
Introdução a computação e suas aplicações seminário
 
Hierarquia de memória
Hierarquia de memóriaHierarquia de memória
Hierarquia de memória
 
ICC-07 Softwares - Introdução
ICC-07 Softwares - IntroduçãoICC-07 Softwares - Introdução
ICC-07 Softwares - Introdução
 
Gerência de Armazenamento: Sistemas de Armazenamento em Massa
Gerência de Armazenamento: Sistemas de Armazenamento em MassaGerência de Armazenamento: Sistemas de Armazenamento em Massa
Gerência de Armazenamento: Sistemas de Armazenamento em Massa
 
Tecnologia front end back-end
Tecnologia front end back-end Tecnologia front end back-end
Tecnologia front end back-end
 
Gerência de Memória: Memória Principal
Gerência de Memória: Memória PrincipalGerência de Memória: Memória Principal
Gerência de Memória: Memória Principal
 
Aula 04-gerenciamento-basico-de-memoria
Aula 04-gerenciamento-basico-de-memoriaAula 04-gerenciamento-basico-de-memoria
Aula 04-gerenciamento-basico-de-memoria
 

Destaque

Mexican Manufacturers Inc 9 27
Mexican Manufacturers Inc 9 27Mexican Manufacturers Inc 9 27
Mexican Manufacturers Inc 9 27John Martino
 
Venticinque Aprile Un bellissimo giorno da ricordare e onorare
Venticinque   Aprile Un bellissimo giorno da ricordare e onorareVenticinque   Aprile Un bellissimo giorno da ricordare e onorare
Venticinque Aprile Un bellissimo giorno da ricordare e onorareLaura Franchini
 
Step By Step Guide of Keyword Research For Blog & Affiliation
Step By Step Guide of Keyword Research For Blog & AffiliationStep By Step Guide of Keyword Research For Blog & Affiliation
Step By Step Guide of Keyword Research For Blog & AffiliationNasir Uddin Shamim
 
2012 real anti psychotrophic reductions-health 2013 drugs
2012 real anti psychotrophic reductions-health 2013 drugs2012 real anti psychotrophic reductions-health 2013 drugs
2012 real anti psychotrophic reductions-health 2013 drugsPeggy Arvanitas
 
Us Govt Explanation Of Maquiladora
Us Govt Explanation Of MaquiladoraUs Govt Explanation Of Maquiladora
Us Govt Explanation Of MaquiladoraJohn Martino
 
Slide6 rp ranc_operasi
Slide6 rp ranc_operasiSlide6 rp ranc_operasi
Slide6 rp ranc_operasiZunnur Zamzam
 
Quick Wins and Shortcuts to Get the Most out of IDEA
Quick Wins and Shortcuts to Get the Most out of IDEAQuick Wins and Shortcuts to Get the Most out of IDEA
Quick Wins and Shortcuts to Get the Most out of IDEAAuditWare Systems Ltd.
 
Tugas uts simsp website bina marga
Tugas uts simsp website bina margaTugas uts simsp website bina marga
Tugas uts simsp website bina margaEsha S
 
Introducing VEEV 2.0
Introducing VEEV 2.0 Introducing VEEV 2.0
Introducing VEEV 2.0 VEEV Spirits
 
Missing andy ‘kings for the weekend’
Missing andy ‘kings for the weekend’Missing andy ‘kings for the weekend’
Missing andy ‘kings for the weekend’Bradley Stearn
 
Creatiosoft 3D Portfolio !!
Creatiosoft 3D Portfolio !!Creatiosoft 3D Portfolio !!
Creatiosoft 3D Portfolio !!Rishabh Agrawal
 

Destaque (20)

Mexican Manufacturers Inc 9 27
Mexican Manufacturers Inc 9 27Mexican Manufacturers Inc 9 27
Mexican Manufacturers Inc 9 27
 
Venticinque Aprile Un bellissimo giorno da ricordare e onorare
Venticinque   Aprile Un bellissimo giorno da ricordare e onorareVenticinque   Aprile Un bellissimo giorno da ricordare e onorare
Venticinque Aprile Un bellissimo giorno da ricordare e onorare
 
Vitamnin k
Vitamnin kVitamnin k
Vitamnin k
 
Step By Step Guide of Keyword Research For Blog & Affiliation
Step By Step Guide of Keyword Research For Blog & AffiliationStep By Step Guide of Keyword Research For Blog & Affiliation
Step By Step Guide of Keyword Research For Blog & Affiliation
 
Secure software design
Secure software designSecure software design
Secure software design
 
2012 real anti psychotrophic reductions-health 2013 drugs
2012 real anti psychotrophic reductions-health 2013 drugs2012 real anti psychotrophic reductions-health 2013 drugs
2012 real anti psychotrophic reductions-health 2013 drugs
 
Gokhan butunler portfolio
Gokhan butunler portfolioGokhan butunler portfolio
Gokhan butunler portfolio
 
My world 1
My world 1My world 1
My world 1
 
Ortografía 3
Ortografía 3Ortografía 3
Ortografía 3
 
Software Cost Estimation
Software Cost EstimationSoftware Cost Estimation
Software Cost Estimation
 
Us Govt Explanation Of Maquiladora
Us Govt Explanation Of MaquiladoraUs Govt Explanation Of Maquiladora
Us Govt Explanation Of Maquiladora
 
Slide6 rp ranc_operasi
Slide6 rp ranc_operasiSlide6 rp ranc_operasi
Slide6 rp ranc_operasi
 
Quick Wins and Shortcuts to Get the Most out of IDEA
Quick Wins and Shortcuts to Get the Most out of IDEAQuick Wins and Shortcuts to Get the Most out of IDEA
Quick Wins and Shortcuts to Get the Most out of IDEA
 
Idea v9 product profile
Idea v9 product profileIdea v9 product profile
Idea v9 product profile
 
Tugas uts simsp website bina marga
Tugas uts simsp website bina margaTugas uts simsp website bina marga
Tugas uts simsp website bina marga
 
Final photos
Final photosFinal photos
Final photos
 
Introducing VEEV 2.0
Introducing VEEV 2.0 Introducing VEEV 2.0
Introducing VEEV 2.0
 
Missing andy ‘kings for the weekend’
Missing andy ‘kings for the weekend’Missing andy ‘kings for the weekend’
Missing andy ‘kings for the weekend’
 
Creatiosoft 3D Portfolio !!
Creatiosoft 3D Portfolio !!Creatiosoft 3D Portfolio !!
Creatiosoft 3D Portfolio !!
 
Space brochure
Space brochureSpace brochure
Space brochure
 

Semelhante a Armazenamento, Indexação e Recuperação de Informação

Artigo Threads O Problema Dos Leitores E Escritores Implementado Em C# Rafael...
Artigo Threads O Problema Dos Leitores E Escritores Implementado Em C# Rafael...Artigo Threads O Problema Dos Leitores E Escritores Implementado Em C# Rafael...
Artigo Threads O Problema Dos Leitores E Escritores Implementado Em C# Rafael...rafaelov
 
Emacs - Arquitetura E Design Com Foco No Desenv De Plugins
Emacs - Arquitetura E Design Com Foco No Desenv De PluginsEmacs - Arquitetura E Design Com Foco No Desenv De Plugins
Emacs - Arquitetura E Design Com Foco No Desenv De PluginsJosé Martins da Nobrega Filho
 
Conceitos básicos de sistemas operacionais
Conceitos básicos de sistemas operacionaisConceitos básicos de sistemas operacionais
Conceitos básicos de sistemas operacionaisRonildo Oliveira
 
hibernate annotation
hibernate annotationhibernate annotation
hibernate annotationeduardo dias
 
MAPA - FUNDAMENTOS E ARQUITETURA DE COMPUTADORES - 512024.docx
MAPA - FUNDAMENTOS E ARQUITETURA DE COMPUTADORES - 512024.docxMAPA - FUNDAMENTOS E ARQUITETURA DE COMPUTADORES - 512024.docx
MAPA - FUNDAMENTOS E ARQUITETURA DE COMPUTADORES - 512024.docx2m Assessoria
 
Unidade 3.3 Estrutura de Diretórios Linux
Unidade 3.3 Estrutura de Diretórios LinuxUnidade 3.3 Estrutura de Diretórios Linux
Unidade 3.3 Estrutura de Diretórios LinuxJuan Carlos Lamarão
 
Multithreaded tecnologia
Multithreaded tecnologia Multithreaded tecnologia
Multithreaded tecnologia J Chaves Silva
 
Sistemas operacionais de rede exercicio de sala
Sistemas operacionais de rede exercicio de salaSistemas operacionais de rede exercicio de sala
Sistemas operacionais de rede exercicio de salaCarlos Melo
 
Memoria cache princípio da localidade
Memoria cache   princípio da localidadeMemoria cache   princípio da localidade
Memoria cache princípio da localidadeClaudia Costa
 
Arquitetura de computadores – memórias
Arquitetura de computadores – memóriasArquitetura de computadores – memórias
Arquitetura de computadores – memóriasElaine Cecília Gatto
 
Gerencia memoria simulador
Gerencia memoria simuladorGerencia memoria simulador
Gerencia memoria simuladormarcosfon
 
Prova Da Dataprev 2006 Jaime Correia Amostra
Prova Da Dataprev 2006   Jaime Correia   AmostraProva Da Dataprev 2006   Jaime Correia   Amostra
Prova Da Dataprev 2006 Jaime Correia AmostraWalter Cunha
 

Semelhante a Armazenamento, Indexação e Recuperação de Informação (20)

Curso openmp
Curso openmpCurso openmp
Curso openmp
 
Artigo Threads O Problema Dos Leitores E Escritores Implementado Em C# Rafael...
Artigo Threads O Problema Dos Leitores E Escritores Implementado Em C# Rafael...Artigo Threads O Problema Dos Leitores E Escritores Implementado Em C# Rafael...
Artigo Threads O Problema Dos Leitores E Escritores Implementado Em C# Rafael...
 
Emacs - Arquitetura E Design Com Foco No Desenv De Plugins
Emacs - Arquitetura E Design Com Foco No Desenv De PluginsEmacs - Arquitetura E Design Com Foco No Desenv De Plugins
Emacs - Arquitetura E Design Com Foco No Desenv De Plugins
 
Resumo c#
Resumo c#Resumo c#
Resumo c#
 
Conceitos básicos de sistemas operacionais
Conceitos básicos de sistemas operacionaisConceitos básicos de sistemas operacionais
Conceitos básicos de sistemas operacionais
 
Curso de perl
Curso de perlCurso de perl
Curso de perl
 
hibernate annotation
hibernate annotationhibernate annotation
hibernate annotation
 
Hardware memória principal
Hardware  memória  principalHardware  memória  principal
Hardware memória principal
 
JAVA REFLETCION
JAVA REFLETCIONJAVA REFLETCION
JAVA REFLETCION
 
MAPA - FUNDAMENTOS E ARQUITETURA DE COMPUTADORES - 512024.docx
MAPA - FUNDAMENTOS E ARQUITETURA DE COMPUTADORES - 512024.docxMAPA - FUNDAMENTOS E ARQUITETURA DE COMPUTADORES - 512024.docx
MAPA - FUNDAMENTOS E ARQUITETURA DE COMPUTADORES - 512024.docx
 
S.o aula 2324
S.o aula 2324S.o aula 2324
S.o aula 2324
 
Unidade 3.3 Estrutura de Diretórios Linux
Unidade 3.3 Estrutura de Diretórios LinuxUnidade 3.3 Estrutura de Diretórios Linux
Unidade 3.3 Estrutura de Diretórios Linux
 
Multithreaded tecnologia
Multithreaded tecnologia Multithreaded tecnologia
Multithreaded tecnologia
 
Sistemas operacionais de rede exercicio de sala
Sistemas operacionais de rede exercicio de salaSistemas operacionais de rede exercicio de sala
Sistemas operacionais de rede exercicio de sala
 
Memoria cache princípio da localidade
Memoria cache   princípio da localidadeMemoria cache   princípio da localidade
Memoria cache princípio da localidade
 
Arquitetura de computadores – memórias
Arquitetura de computadores – memóriasArquitetura de computadores – memórias
Arquitetura de computadores – memórias
 
Exercicios
ExerciciosExercicios
Exercicios
 
Gerencia memoria simulador
Gerencia memoria simuladorGerencia memoria simulador
Gerencia memoria simulador
 
Apostila oracle
Apostila oracleApostila oracle
Apostila oracle
 
Prova Da Dataprev 2006 Jaime Correia Amostra
Prova Da Dataprev 2006   Jaime Correia   AmostraProva Da Dataprev 2006   Jaime Correia   Amostra
Prova Da Dataprev 2006 Jaime Correia Amostra
 

Mais de Mário Monteiro

Armazenamento, Indexação e Recuperação de Informação
Armazenamento, Indexação e Recuperação de InformaçãoArmazenamento, Indexação e Recuperação de Informação
Armazenamento, Indexação e Recuperação de InformaçãoMário Monteiro
 
Modelo de Processo de Negocios - Farmacia On-Line
Modelo de Processo de Negocios - Farmacia On-LineModelo de Processo de Negocios - Farmacia On-Line
Modelo de Processo de Negocios - Farmacia On-LineMário Monteiro
 
Modelo de Processo de Negocios - Barbeiro & cabeleireiro em casa
Modelo de Processo de Negocios - Barbeiro & cabeleireiro em casaModelo de Processo de Negocios - Barbeiro & cabeleireiro em casa
Modelo de Processo de Negocios - Barbeiro & cabeleireiro em casaMário Monteiro
 
Apresentação - Citrix Xen Server
Apresentação - Citrix Xen ServerApresentação - Citrix Xen Server
Apresentação - Citrix Xen ServerMário Monteiro
 

Mais de Mário Monteiro (6)

Airport Pub
Airport PubAirport Pub
Airport Pub
 
Web semantica
 Web semantica Web semantica
Web semantica
 
Armazenamento, Indexação e Recuperação de Informação
Armazenamento, Indexação e Recuperação de InformaçãoArmazenamento, Indexação e Recuperação de Informação
Armazenamento, Indexação e Recuperação de Informação
 
Modelo de Processo de Negocios - Farmacia On-Line
Modelo de Processo de Negocios - Farmacia On-LineModelo de Processo de Negocios - Farmacia On-Line
Modelo de Processo de Negocios - Farmacia On-Line
 
Modelo de Processo de Negocios - Barbeiro & cabeleireiro em casa
Modelo de Processo de Negocios - Barbeiro & cabeleireiro em casaModelo de Processo de Negocios - Barbeiro & cabeleireiro em casa
Modelo de Processo de Negocios - Barbeiro & cabeleireiro em casa
 
Apresentação - Citrix Xen Server
Apresentação - Citrix Xen ServerApresentação - Citrix Xen Server
Apresentação - Citrix Xen Server
 

Armazenamento, Indexação e Recuperação de Informação

  • 1. Departamento de Eletrónica, Telecomunicações e Informática Armazenamento, Indexação e Recuperação de Informação Trabalho Prático 2 Mestrado em Sistemas de Informação Docente: Prof. José Luís Oliveira Discentes: Emanuel Pires – 77994 Prof. Sérgio Matos Mário Monteiro – 77910
  • 2. Armazenamento, Indexação e Recuperação de Informação – MSI – 2015/2016 Mário Monteiro - 77910 || Emanuel Pires - 77994 2 Índice INTRODUÇÃO.........................................................................................................................3 PARTE 1 – ARQUITETURA E MODELAÇÃO .............................................................................5 PARTE 2 – CORPUS READ.....................................................................................................10 PARTE 3 – TOKENIZER............................................................................................................11 PARTE 4 - INDEXAÇÃO............................................................................................................12 PARTE 5 – RESPOSTAS AS QUESTÕES ..................................................................................13 PARTE 6 – EXECUÇÃO DO ALGORITMO INDEXAÇÃO ............................................................19 PARTE 6 – CONSIDERAÇÕES FINAIS.....................................................................................23
  • 3. Armazenamento, Indexação e Recuperação de Informação – MSI – 2015/2016 Mário Monteiro - 77910 || Emanuel Pires - 77994 3 INTRODUÇÃO Este relatório realiza-se no âmbito da unidade curricular da disciplina Armazenamento Indexação e Recuperação de Informação do Mestrado em Sistemas de Informação da Universidade de Aveiro, com o intuito de fazer uma readaptação do algoritmo do trabalho prático 1 com os seguintes requisitos básicos:  Criar um algoritmo de índice invertido utilizando o corpus do trabalho 1, que permite realizar pesquisa por um texto (Exemplo: Ambiente, politica Ambiental);  Criar corpus com base em capítulos e speakers fornecidos em cada um dos documentos em ficheiros corpus.  Implementar o método rank retrieval baseado no modelo vector-space e utilizar o sistema de ponderação tf-idf;  Disponibilizar um relatório;  Adaptar o método indexing/retrieval pesquisa por frase (Exemplo: “fishing quota”) e pesquisa de proximidade (Exemplo:”fishing quota”~10);  Adaptar método indexing/retrieval para suportar múltiplos termos e combinação de termos no querie. Será apresentado com grande nível de detalhes a arquitetura, diagrama de classes, bem como a descrição para cada uma das classes. Encontra-se também um tutorial em anexo a mostrar como se interagir com o algoritmo.
  • 4. Armazenamento, Indexação e Recuperação de Informação – MSI – 2015/2016 Mário Monteiro - 77910 || Emanuel Pires - 77994 4 DESENVOLVIMENTO Para o desenvolvimento do algoritmo foi sugerido pelo professor a utilização da tecnologia Java. Java - Uma linguagem de programação e plataforma computacional lançada pela Sun Microsystems em 1995. Esta linguagem está presente desde, laptops a datacenters, consolas de jogos a supercomputadores científicos, telemóveis e muito mais. Ela encontra-se disponível de forma gratuita na Internet no site java.com. Como IDE de desenvolvimento, foi escolhido o Netbeans 8.0.2. Este oferece-nos assistentes e modelos que permitem a criação de aplicações Java EE, Java SE e Java ME. Teve-se a necessidade de incorporar algumas bibliotecas externas para o desenvolvimento deste algoritmo como:  Jsoup-1.8.3.jar1 - Biblioteca feito em Java para trabalhar com serialização de objetos Json.  Json-simple-1.1.1.jar2 – Biblioteca que faz parser (serialização) de objetos em Json.  Guava-18.0.jar3 - Biblioteca da Google utilizado para fazer tratamento de: coleções, caching, apoio primitivas, processamento de string, I/O, no nosso caso ela é utilizado para fazer o Join do texto Corpus. 1Http://jsoup.org/packages/jsoup-1.8.3.jar 2 Http://www.java2s.com/Code/Jar/j/Downloadjsonsimple111jar.htm 3 Http://search.maven.org/remotecontent?filepath=com/google/guava/guava/18.0/guava-18.0.jar
  • 5. Armazenamento, Indexação e Recuperação de Informação – MSI – 2015/2016 Mário Monteiro - 77910 || Emanuel Pires - 77994 5  Libstemmer.jar 4 - Algoritmo Porter Stemmer,um processo comum para normalização morfológicas de palavras em português. Seu principal objetivo é fazer normalização de palavras em sistemas de recuperação de informação. PARTE 1 – ARQUITETURA E MODELAÇÃO Foi dotado o modelo de classes Orientado a Objetos, para o desenvolvimento deste algoritmo. O algoritmo foi desenvolvido com implementação de threads de forma realizar operações diversas em paralelo ou seja, os trabalhos são executados em espaços próprios na memória e no processador, de realçar ainda que as estruturas de dados mais utilizado para desenvolvimento deste algoritmo são:  Map, HashMap e TreeMap. Para uma melhor compreensão da estrutura de classes, é apresentado uma breve discrição dos mesmos:  Library – Classe que incorpora um conjunto de métodos auxiliares que ajudam no desenvolvimento do algoritmo;  Policy – Classe que faz toda gestão de politicas, como por exemplo: o Definir o tamanho máximo de memória a ser utilizada; o Definir quantidade de corpus a ser lido pelas threads; o Definir o limite de memória;  Thread – Classe mãe para as threds, pois é nesta classe que todas threads são criados em que posteriormente irão ser instanciados em outras classes; 4 (http://snowball.tartarus.org/)
  • 6. Armazenamento, Indexação e Recuperação de Informação – MSI – 2015/2016 Mário Monteiro - 77910 || Emanuel Pires - 77994 6  CorpusRead – Classe responsável por fazer a leitura dos corpus, separar os CHAPTER e SPEAKER, com finalidade de obter um corpus, de forma como foi especificado nos requisitos do trabalho. Cada corpus pode conter um ou mais CHAPTER e cada CHAPTER pode conter um ou mais SPEAKER. Quando processado um SPEAKER, a classe tem a responsabilidade de fazer limpeza dos dados aplicando o algoritmo remove StopWords, Steamer e guarda assim a referência de cada corpus numa estrutura de HasMap, este recebe um id que é sequencial e um valor que contém a data que se encontra em cada ficheiro concatenado com o id do CHAPTER e o id do SPEAKER, nome do SPEAKER e referida Lingua. De realçar ainda que para proceder com limpeza dos dados, foi criada ainda, um ficheiro com StopWords complexo, onde será removido alguns outros termos que o stopWords simples ignorava.  Token – Classe responsável pelo tratamento e contabilização dos termos individuais;  OperateWhitThread – classe onde é criado todas operações que utiliza Thread;  Ranking – Classe onde realiza as operações relativamente ao ranking retrieval;  ListaRanking – Representa uma estrutura responsável por fazer armazenamento dos corpus e a relativa classificação de ranking, de notar que esta estrutura apresenta os dados ordenados.  Indexer – Classe responsável por fazer indexação final, executado todos os métodos das outras classes descritas acima.
  • 7. Armazenamento, Indexação e Recuperação de Informação – MSI – 2015/2016 Mário Monteiro - 77910 || Emanuel Pires - 77994 7 A estrutura das classes é apresentada na figura 1. Figura 1 - Diagrama de Classes
  • 8. Armazenamento, Indexação e Recuperação de Informação – MSI – 2015/2016 Mário Monteiro - 77910 || Emanuel Pires - 77994 8 Assim como foi descrito acima, acerca da classe CorpusRead, Indexer e Token podemos ver na figura 2 o modelo descrevendo como é que essas classes trabalham para organizar os Corpus. Para realizar a operação de indexação foi fornecido um conjunto de documentos (corpus). O algoritmo desenvolvido aplica sobre esses corpus o princípio de divisão para que seja utilizado menos memória possível e com menor quantidade de dados para processar a velocidade do mesmo é maior. Imaginemos numa fábrica onde dois funcionários trabalham na mesma linha de produção: isso seria o equivalente a um processador dual-core. Caso o gerente tiver que mandar uma tarefa Figura 2 – Modo de leitura dos Corpus
  • 9. Armazenamento, Indexação e Recuperação de Informação – MSI – 2015/2016 Mário Monteiro - 77910 || Emanuel Pires - 77994 9 apenas para o primeiro operário, o segundo fica sem ter o que fazer. Desta forma só o primeiro operário fica a trabalhar. Para resolver esse problema, o gerente pode dividir a tarefa em duas partes e mandado ordenado assim que cada um fizesse uma parte do trabalho. Dessa maneira, o processo seria concluído em menos tempo e com maior eficácia. Onde queremos chegar com esse exemplo? Simples: o algoritmo desenvolvido segue o mesmo modelo que o gerente deve tomar para dividir tarefas aos seus operários. Neste caso o que o algoritmo foi treinado a fazer é a repartição de dados em vários blocos, de acordo com a definição na configuração, cada bloco ainda é subdividido de forma a partilhar os mesmos aos várias threads tornando os mais eficientes, não sobrecarrega-los com grande quantidade de dados na memória. Em java cada thread tem uma quantidade de memória limitada e uma instanciação de processador reservado, permitindo assim a sua execução em paralelo e independente de qualquer outro processo. Depois de realizar toda a operação de divisão dos ficheiros em blocos, os blocos são tratados pelas Threads, assim como foi descrito na descrição da classe CorpusRead, de forma que no final cada speaker dentro dos Chapter, virá a ser um Corpus. Depois de já ter um Corpus, as threads encarregam de fazer o tratamento dos mesmos (aplicação do StopWords e Steamer) e armazena-os numa estrutura em HashMap, cada uma desta estrutura é armazenado no disco de forma a libertar o espaço de memória, de mesmo modo as threads são liberadas forma estarem prontos para executarem novas tarefas. Os dados armazenados em disco são processados por uma outra thread para realizar a tokenização, cada bloco no disco é carregado e um outro processo faz a contagem dos termos para cada corpus devolvendo-os na estrutura de índice invertido 5. 5 Ver figura 4
  • 10. Armazenamento, Indexação e Recuperação de Informação – MSI – 2015/2016 Mário Monteiro - 77910 || Emanuel Pires - 77994 10 Para melhor compreender todo o processo foi criada o seguinte diagrama de fluxo de dados que representa todo o algoritmo. Figura 3 – Diagrama de fluxo de dados da indexação invertida PARTE 2 – CORPUS READ Um dos requisitos do trabalho é criar uma classe capaz de fazer leitura de corpus e devolver o conteúdo dos mesmos, analisando a estrutura do mesmo e removendo os caracteres especiais existentes (tags HTML etc…). A leitura dos ficheiros é feita através da divisão de corpus em segmentos, definida na configuração, de forma a realizar toda as operações de leitura e tratamento dos conteúdos dos ficheiros em paralelo entre as várias Threads. Para que o processo seja eficiente na utilização do processador e da memória. Cada corpus físico é dividido em vários corpus, conforme o número de speakers de cada corpus, proporcionando como resultado um corpus com menor quantidade de informação, mais em maior numero, cada um desses speakers são processados por uma Thead em paralela.
  • 11. Armazenamento, Indexação e Recuperação de Informação – MSI – 2015/2016 Mário Monteiro - 77910 || Emanuel Pires - 77994 11 A leitura de corpus é armazenada em N estruturas de memória (HashMap), definida na configuração de forma a facilitar o acesso do mesmo pelas Threads que realizam a operação de tokenização. Essas estruturas são armazenadas em disco a cada iteração, com vista a melhorar a performance do algoritmo. Após isso existe as threads auxiliares para carregar um a um, e realizar o tratamento em memória. Ficam a trabalhar em paralelo com a leitura de corpus. PARTE 3 – TOKENIZER Tokenizer tem como objetivo, criar uma classe Tokenque devolve os tokensde um dado corpus, sabendo que deve ignorar os caracteres especiais ('.', ',', '-', etc.) como também entidades HTML e/ou XML (‘ ’ e outros). Para o efeito, foi desenvolvido no algoritmo uma classe que executa o processo de leitura no disco, dos corpus armazenados temporariamente, carregar cada um deles e realizar operação de contagem de ocorrências dos mesmos dentro de cada corpus. Sabendo que os corpos compõem uma grande quantidade de termos, processa-los de uma vez só tornaria o algoritmo pouco eficiente, o consumo de memória e o acesso ao processador pode ser excessivo. Por isso esses termos são divididos em vários segmentos e distribuídos em várias Threads conforme o número de segmento criado, proporcionando assim uma maior velocidade no processamento. Como resultado, o processo irá retornar os termos e o número de vezes que estas ocorrem para cada corpus. O mesmo será enviado para outras threads com finalidade de criar uma estrutura de índice invertido.
  • 12. Armazenamento, Indexação e Recuperação de Informação – MSI – 2015/2016 Mário Monteiro - 77910 || Emanuel Pires - 77994 12 PARTE 4 - INDEXAÇÃO O objectivo principal de todo o algoritmo é criar indexação de índice invertido. Para o feito foi criado uma classe de Index que executa todas as classes anteriores e armazena em disco a indexação realizada. A figura 4 apresenta a estrutura do índice invertido. . Figura 4 – Estrutura do índice Invertido
  • 13. Armazenamento, Indexação e Recuperação de Informação – MSI – 2015/2016 Mário Monteiro - 77910 || Emanuel Pires - 77994 13 A filosofiaadotada foi de utilizar o menos possívelna estrutura do índice invertido o HashMap, pois este consome muita memória. Foi criada um índice com uma Lista da classe InvertIndex, onde cada índice é armazena a informação para um determinado termo, e estes estão mapeadas num HashMap com Termo e índice do ArrayList, pois tornaria o acesso muito mais rápido no processo de indexação e pesquisa do mesmo. Classe InvertIndex com os atributos frequênciaTermos (Numero de ocorrência do termo em todos os corpus), elementos (Lista de classe No). A classe No é utilizada para armazenar informações do corpus em que cada termo ocorre. Temos Para a classe No os atributos idCorpus (id correspondente ao corpus), tF (term Frequency), WT (Calculo do Peso), nLize (Normalização) e idPosicao (Link para uma lista de posição de cada termo dentro de um Corpus), pois esta lista como consome muita memoria é armazenada no disco (Estrutura HashMap) e guardado no índice apenas um id que refere ao mesmo. PARTE 5 – RESPOSTAS AS QUESTÕES O algoritmo realiza a limpeza de dados através de remoção de alguns termos (palavras) que são encontrados na lista de StopWords e utilizando ainda o algoritmo de Steamer, de forma a normalizar os termos. Foi combinado diferentes formas de execução do algoritmo com finalidade de criar estatísticas acerca do desempenho e quantidade de termos indexados através do algoritmo. Isto Pode ser analisado na tabela que se segue, com os resultados obtidos através da combinação da limpeza dos Stop Words e a inclusão ou não do algoritmo Steamer. Modo Execução Tempo (Minuto) Número de Termos Tempo Inicial Tempo Final Com remoção do Stop Words e Steamer 8.53 88778 11:18:54 11:27:26 Sem remoção do Stop Words e com Steamer 8.43 88806 11:29:50 11:38:17 Com remoção do Stop Words semexecução do Steamer 8.1 162187 11:48:12 11:56:19
  • 14. Armazenamento, Indexação e Recuperação de Informação – MSI – 2015/2016 Mário Monteiro - 77910 || Emanuel Pires - 77994 14 Sem remoção do Stop Words e semexecução do Steamer 8.33 162349 12:01:30 12:09:50 Tabela I - Tabela estatística de indexação com remoção do StopWords e aplicação do algoritmo Steamer. O tempo inicial referido na tabela acima representa o tempo em que o algoritmo foi iniciado e o tempo final, representa o tempo em que o algoritmo termina execução. Uma dos requisitos também é criar novo corpus a partir das informações de cada Speaker dentro dos Chapters, ou seja o nome do corpus devem ser além das datas, ter o chapter ID, o speaker ID, O nome do Speaker e a língua. Para isso foi criado a seguinte estrutura para o nome do corpus:  D:00-03-14 C:10 S:167 N:Antonios L:SL o D – data do corpus o C – Chapter ID o S – Speaker ID o N – Nome do Speaker o L – língua do speaker (o Speaker que não tem língua é atribuída SL) Para responder as questões é necessário criar o algoritmo que realiza o ranking dos termos por cada corpus utilizando o processo tf-idf. A figura 5 apresenta a forma como é realizada todo o processo de cálculo do ranking.
  • 15. Armazenamento, Indexação e Recuperação de Informação – MSI – 2015/2016 Mário Monteiro - 77910 || Emanuel Pires - 77994 15 Figura 5 - Calculo do Ranking O processo começa com a indexação onde é calculado o peso de termos por corpus que é 1+ log10 (TF) para tf maior que zero, 0 caso contrario, durante esse processo é calculado o DF e armazenada num HashMap (termo, DF), calculado também o doc lenght (raiz quadrada do somatório ao quadrado de cada WT dos termos) e armazenada numa Estrutura HashMap (corpus, dc lenght), foi utilizado o HashMap pois facilita a inserção e a pesquisa do mesmo. Após terminar a indexação é realizado o calculo do IDF sobre a estrutura de HashMap do DF, onde o IDF é log10(N/DF), terminando o calculo do IDF é calculado o N’Lize para cada termo por Corpus. Para isso é realizada uma iteração pela estrutura do Índice invertido onde a cada relação Termo/Corpus é aplicado a normalização (WT/docLenght). E essas informações podem ser guardadas no disco conforme a opção do utilizador, permanecendo na memória. Quando o utilizador pretende processar a query, parte da informação (lista de posições) é lida do disco antes de inserir a query. Com essa inserção é calculada o WT da query ((1+log(tf-wt) para tf-wt > 0, 0 caso contrario) * IDF), a normalização do mesmo (WTquery/docLenghtquery) e obtido a normalização do Termo/Corpus. Com essas informações disponíveis é calculado o score e disponibilizada a informação no Output.
  • 16. Armazenamento, Indexação e Recuperação de Informação – MSI – 2015/2016 Mário Monteiro - 77910 || Emanuel Pires - 77994 16 Os dados calculados da score por cada termo/corpus é adicionado numa estrutura em lista de forma ordenada por ordem decrescente ou seja a instancia com maior score fica no início da fila, e depois a mesma é apresentada no output ordenada. Para isso é utilizada a classe ListaRanking com Atributos:  String NomeCorpus – Nome atribuído ao corpus;  int idCorpus – identificação dos corpus;  double score – o score calculado para os corpus;  HashMap cálculos – os cálculos efetuados (WT, IDF, N’Lize);  ListaRanking próximo – apontado para o próximo elemento da lista. PESQUISA SIMPLES (3 - PARTE A) Para a realização desta pesquisa é criado uma lista de corpus, são corpus onde os termos aparecem, isto para realizar a operação de ranking apenas nos corpus/termos da query. Para isso é realizada a operação de união dos corpus onde os termos introduzidos ocorrem (vide figura 6). Figura 6 – Cálculo do ranking para pesquisa simples Apos a inserção dos termos é aplicado a limpeza dos stopwords e aplicado o steamers, e realizada uma união de todos os corpus onde os termos aparecem e depois disso é calculado o ranking para cada um dos corpus/termos.
  • 17. Armazenamento, Indexação e Recuperação de Informação – MSI – 2015/2016 Mário Monteiro - 77910 || Emanuel Pires - 77994 17 PESQUISA DE FRASES E DE PROXIMIDADE E COM QUOTAS K (4 – PARTE B) A pesquisa de frases e de proximidade é utilizada o mesmo algoritmo, pois a pesquisa de frase utiliza a proximidade igual a 1, enquanto a pesquisa de proximidade utiliza uma quota igual a K, introduzida pelo utilizado na query. Para a realização desta pesquisa é criado uma lista de corpus, são corpus onde os todos os termos aparecem, isto para realizar a operação de ranking apenas nos corpus/termos da query aparecem todos ao mesmo tempo. Para isso é realizada a operação de interseção dos corpus onde os termos introduzidos ocorrem (vide figura 7), apos isso é aplicado o processo de proximidade apenas nos N primeiros corpus do Ranking, proporcionado maior rapidez, pois não será preciso realizar o cálculo de proximidade em grande número de corpus, visto que já tenhamos o corpus com maior probabilidade dos termos aparecerem juntos. Figura 7 – pesquisa de Proximidade PESQUISA POR COMBINAÇÃO DE CAMPOS (5 – PARTE B)
  • 18. Armazenamento, Indexação e Recuperação de Informação – MSI – 2015/2016 Mário Monteiro - 77910 || Emanuel Pires - 77994 18 A pesquisa por combinação dos campos é suposto ao utilizador inserir determinado campo a pesquisar e proporcionar resultados conforme o campo escolhido, por exemplo pesquisar todos os corpus onde aparece o speaker com o nome Marques. Para isso foi utilizado um filtro baseado no nome do corpus mapeado durante a indexação, pois o nome do corpus já tem o nome para cada speaker. Além disso tem todos os outros campos que podem ser utilizados na pesquisa, como língua e data (vide figura 8). Figura 8 - Pesquisa por campos no corpus
  • 19. Armazenamento, Indexação e Recuperação de Informação – MSI – 2015/2016 Mário Monteiro - 77910 || Emanuel Pires - 77994 19 PARTE 6 – EXECUÇÃO DO ALGORITMO INDEXAÇÃO Figura 9 - Escolher a configuração Ao iniciar o algoritmo, questionado ao utilizador sobre a configuração do mesmo, onde pode adicionar um novo endereço para a configuração ou pressionar um Enter para aceitar a configuração por defeito. Apos isso é apresentado um menu, com opções a fim de ajudar-nos na execução do algoritmo. Opções como: Executar a indexação e apresentar os relatórios, Queries, Configuração, Load a Save Data, vide a figura 10.
  • 20. Armazenamento, Indexação e Recuperação de Informação – MSI – 2015/2016 Mário Monteiro - 77910 || Emanuel Pires - 77994 20 Figura 10 - Menu inicial A configuração é muito importante, pois a partir desta é possível determinar o número de corpus a processar por cada threads, por defeito é aplicado uma configuração com um threads para cada corpus para quantidade de corpus até 50, a partir desta os corpus são processados em grupos de 50 e criado 50 HashMaps e 50 Threads para processar respetivos corpus. Esta configuração pode ser alterada pelo utilizador antes de executar a indexação. Vide figura 11. Figura 11 - Opção de configuração
  • 21. Armazenamento, Indexação e Recuperação de Informação – MSI – 2015/2016 Mário Monteiro - 77910 || Emanuel Pires - 77994 21 Definir o número de blocos de memória a processar tem a ver com a quantidade de HasHMap a ser utilizado para armazenar informação durante o processo de corpus Read e de Tokenização, os mesmos são armazenados no disco para continuação do processo de indexação, visto a sua permanência na memória, irá sobrecarregar a mesma. Definir o número de Blocos de Corpus, tem a ver com o número de corpus a ser carregado e processado por cada threads que é criada conforme a configuração do número de blocos de memória, vide figura 2. Definir o limite de memória que a aplicação deve chegar tem a ver com o ultimo limite que a aplicação deve suportar durante o processo de indexação. Todas essas configurações são carregadas e armazenadas num ficheiro de configuração por isso o utilizador pode aceitar ou não a configuração por defeito. Após escolher a opção executar Indexação é apresentada as opções de execução. Opção 1 - é para arrancar com a execução em si. Durante a execução aparece no output o tempo de início e os números de grupos de corpus em execução, ao terminar a indexação aprece o tempo final. Opção 2 [Desativar] Stopwords, significa que o algoritmo vai ser executado removendo do corpus todos os Stopwords, caso se pretenda deixar os Stopwords nos corpos deve ser escolhida esta opção, o utilizador pode ativar ou desativar execução de Stopwords. Opção 3 [Desativar] Steamer, significa que o algoritmo vai ser executado aplicando algoritmo de Steamer sobre os termos, caso se pretenda deixar os termos sem aplicar o Steamer deve ser escolhida esta opção. Opção 4 pode ser escolhida os dois modos de execução ao mesmo tempo. Vide a figura 12.
  • 22. Armazenamento, Indexação e Recuperação de Informação – MSI – 2015/2016 Mário Monteiro - 77910 || Emanuel Pires - 77994 22 Figura 12 - Menu execução da indexação No menu inicial, na figura 8 se escolher a opção 3 é proporcionado um outro menu de forma a realizar as diversas pesquisas sugeridas no trabalho ver figura 13. Figura 13 - Opção de queries
  • 23. Armazenamento, Indexação e Recuperação de Informação – MSI – 2015/2016 Mário Monteiro - 77910 || Emanuel Pires - 77994 23 A opção 1 é para realizar as queries da parte A em 3, na opção 2 e 3 para realizar as pesquisas por frases de proximidade na parte B em 4 e a opção 4 para realizar a pesquisa proposta em parte B em 5. PARTE 6 – CONSIDERAÇÕES FINAIS Este trabalho propôs-se como objetivo geral criar uma estrutura de indexação invertida em java,para que o trabalho não selimitasseaum simples algoritmo de indexação pouco eficiente em termos de recursos e tempos, foi realizado um conjunto de pesquisa e ações de forma a torna-lo num algoritmo eficiente na utilização dos recursos e com um tempo de execução razoável. Este tempo pode ser melhorado muito ainda mais com um uma unidade de processamento e memória maior, aumentando o número de corpos a processar a cada bloco de corpos. Filosofia de segmentação e multiprocessamento adotada pode se dizer que em termos de performance do algoritmo o ganho foi brutal, visto que com o multiprocessamento dos corpos em segmentos teremos pouca utilização da memória e uma melhor eficiência no uso do processador, bem como a operação de pesquisa sobre o Índice invertido criado. A nível de eficiência o maior ganho em termos de eficiência do algoritmo foi conseguido nos seguintes pontos:  Segmentação dos corpos e grupos pequenos, num tamanho razoável para permitir que não seja sobrecarregada o processador e a memória;  Construção do índiceinvertido utilizado Listas emArray para uma estrutura em classes, pois a inserção e pesquisa é muito rápido bem como o consumo de memória é menor, pois é utilizada menos HashMaps.  Não utilização de colectores de lixo(Garbage colector,System.gc() no Java)da memoria varias vezes, pois o mesmo tende a tornar pouco eficiente o algoritmo, pois executa varias operações para o efeito.  Aplicação de uma classe policy, que determina a quantidade de memória em uso e o limite a ser utilizada durante a indexação e processamento d algoritmo, permite que não haja uma sobrecarga da memória.