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

17
Departamento de Eletrónica, Telecomunicações e Informática Armazenamento, Indexação e Recuperação de Informação Trabalho Prático 3 Mestrado em Sistemas de Informação Docente: Prof. José Luís Oliveira Discentes: Emanuel Pires – 77994 Prof. Sérgio Matos Mário Monteiro – 77910

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

Page 1: Armazenamento, Indexação e Recuperação de Informação

Departamento de Eletrónica,

Telecomunicações e Informática

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

Trabalho Prático 3

Mestrado em Sistemas de Informação

Docente: Prof. José Luís Oliveira Discentes: Emanuel Pires – 77994

Prof. Sérgio Matos Mário Monteiro – 77910

Page 2: Armazenamento, Indexação e Recuperação de Informação

Armazenamento, Indexação e Recuperação de Informação – MSI – 2015/2016

Mário Monteiro - 77910 || Emanuel Pires - 77994

2

Índice

INTRODUÇÃO......................................................................................................................... 3

DESENVOLVIMENTO .............................................................................................................. 4

ARQUITETURA E MODELAÇÃO .............................................................................................. 5

CORPUS READ ....................................................................................................................... 8

MEAN AVERAGE PRECISION.................................................................................................. 9

CONFIGURAÇÃO DO SOLR ................................................................................................... 10

APRESENTAÇÃO DO SISTEMA (FRONT-END) ........................................................................ 12

CONSIDERAÇÕES FINAIS...................................................................................................... 17

Page 3: Armazenamento, Indexação e Recuperação de Informação

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 objetivo de fazer indexação de alguns documentos, recorrendo

há algumas tenologias como: Java, Apache Solr e o SolrJ, através de uma API que são

fornecidos pelo servidor do Solr.

Foi previamente definido algumas metas como sendo requisitos fundamentais para o

desenvolvimento deste trabalho, como por exemplo:

Índice do corpus utilizado a API SolrJ e o Corpus Read do trabalho 2. O índice deve conter

os seguintes campos:

o Nome do ficheiro original

o Identificador de documentos (composto pelo nome do ficheiro, Chapter ID, Speaker

ID)

o Conteúdo (o conteúdo do documento principal)

o Nome do Speaker

o Língua

o Data

o Ano

Definir campo de pesquisa padrão que inclui os campos de conteúdo e do Speaker. Definir

igualmente o esquema de indexação, a seleção, por exemplo, que analisador a utilizar para

cada campo, os campos que vão ser indexados. Por exemplo, armazenar a data como um

campo de data, para permitir buscas em intervalos.

A partir de uma lista de querys fornecido pelo professor, deve-se criar uma classe em java

que seja capaz de executa-los através de uma chamada ao servidor Solr. O resultado

Page 4: Armazenamento, Indexação e Recuperação de Informação

Armazenamento, Indexação e Recuperação de Informação – MSI – 2015/2016

Mário Monteiro - 77910 || Emanuel Pires - 77994

4

devolvido pelo Solr, deve ser analisado com os resultados prévios devolvido pelo professor,

a fim de calcular o Mean Everage Precision.

Criar um sistema IR simples baseado na web com os seguintes requisitos:

o Pesquisa em campo, ou seja, permitir a pesquisa diferentes campos;

o Pesquisas por intervalo de data e ano;

o Criar Facete (nos campos de Speakear, Ano e de Idioma);

o Response Snippets;

o More like thi’s feature;

o Spelling suggestion ('Did you mean...?').

DESENVOLVIMENTO

O desenvolvimento deste trabalho prático levou-nos a utilizar algumas tenologias de base, assim

como foi sugerido pelo professor.

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.

Foi utilizado o Solr 4.10.2, para fazer indexação dos documentos, a parte do front-end, foi

desenvolvido através do framework SolrAjax (desenvolvido em javascrip).

Page 5: Armazenamento, Indexação e Recuperação de Informação

Armazenamento, Indexação e Recuperação de Informação – MSI – 2015/2016

Mário Monteiro - 77910 || Emanuel Pires - 77994

5

ARQUITETURA E MODELAÇÃO

Foi dotado o modelo de classes Orientado a Objetos, para o desenvolvimento deste algoritmo .

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;

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.

AveragePrecision – classe que é responsável por fazer tratamento dos resultados das

querys fornecida pelo professor, executar as querys através de uma chamada ao servidor

Solr e calcular o Mean Average Precision.

Executar – Classe responsável pela indexação, ou seja executar a classe CorpusRead e

inserir o corpus processado no Solr e fazer o Commit. Bem como calcular o Average

Precision.

Page 6: Armazenamento, Indexação e Recuperação de Informação

Armazenamento, Indexação e Recuperação de Informação – MSI – 2015/2016

Mário Monteiro - 77910 || Emanuel Pires - 77994

6

A estrutura das classes é apresentada na figura 1 que se segue.

Assim como foi descrito acima, acerca das classes podemos ver na figura 2 o modelo que

descreve como é que essas classes trabalham para organizar os Corpus e inserir no Solr.

Figura 1 - Diagrama de Classes

Page 7: Armazenamento, Indexação e Recuperação de Informação

Armazenamento, Indexação e Recuperação de Informação – MSI – 2015/2016

Mário Monteiro - 77910 || Emanuel Pires - 77994

7

Para realizar a operação de indexação foi fornecido um conjunto de documentos (corpus). O

algoritmo desenvolvido aplica sobre o corpus o princípio de divisão do corpus em segmentos,

ou seja cada novo corpus é extraído do excerto do que cada Speaker fala nas sessões no

parlamento.

Depois de realizar toda a operação de divisão dos ficheiros em Speaker e extrair as informações

importantes para realizar a indexação, é criada um documento de SolrInputDocument e

adicionado num ArrayList da mesma estrutura de dados e ao chegar a um determinado número

de documento processado é Inserido os dados no servidor Solr (HttpSolrServer) e realizado o

commit do mesmo e o processo se repete até ao último documento de corpus.

Para melhor compreender todo o processo foi criada o seguinte diagrama de fluxo de dados que

representa todo o algoritmo.

Figura 2 – Modo de leitura dos Corpus

Page 8: Armazenamento, Indexação e Recuperação de Informação

Armazenamento, Indexação e Recuperação de Informação – MSI – 2015/2016

Mário Monteiro - 77910 || Emanuel Pires - 77994

8

Figura 3 – Diagrama de fluxo de dados da indexação invertida

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 como tags HTML.

A leitura dos ficheiros é feita através da divisão de corpus em segmentos, 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 número.

A leitura de corpus é armazenada em estruturas de memória (ArrayList de SolrInputDocument),

Page 9: Armazenamento, Indexação e Recuperação de Informação

Armazenamento, Indexação e Recuperação de Informação – MSI – 2015/2016

Mário Monteiro - 77910 || Emanuel Pires - 77994

9

MEAN AVERAGE PRECISION

De acordo com o que foi explicado mais acima na especificação das classes, para executar esta

tarefa, teve-se a necessidade de desenvolver uma classe que contém 3 métodos destintos,

com finalidade de calcular o Average Precision, classes essas que são:

solrResultQuery - método responsável por fazer execução de quera no Solr, recebe

como parâmetro (query – String fornecido pelo professor e conf – instanciação da classe

Conf que contém dados de configuração), este método retorna uma lista com dados

retornado através da execução da query Solr.

rearyQuery - Responsável por fazer leitura e parser dos dados fornecido, que se

encontram no ficheiro “query.txt”, o método recebe como parâmetro (fileName –

nome do ficheiro e charSet – codificação do ficheiro ex. utf-8 etc…), o método retorna

um HashMap, cuja chave é a query e o valor, uma lista com resultados referente a

mesma query.

calculateAveragePrecision - Faz cálculo de Average Precision recebe como parâmetro

(conf – instanciação da classe Conf que contém dados de configuração) e retorna os

resultados numa hashmap nome de cada query e o resultado calculado.

Depois de já ter descrito um pouco sobre a classe Average Precision, é apresentado na

tabela que se segui os resultados obtidos.

Query Resultado Everage Precision

Q1= {text: imigrantes} 0.33

Q2 = {text: presidente Barroso} 0.68

Q3 = {text: estratégia de lisboa ambiente e energias renováveis}

0.93

Q4 = {text: quota de pesca} 0.70

Q5 = {text: áreas estratégicas investigação e

desenvolvimento}

0.85

Mean Everage Precision 0.70

Tabela I – Resultados de Average Precision

Page 10: Armazenamento, Indexação e Recuperação de Informação

Armazenamento, Indexação e Recuperação de Informação – MSI – 2015/2016

Mário Monteiro - 77910 || Emanuel Pires - 77994

10

CONFIGURAÇÃO DO SOLR

Um dos principais objetivos deste trabalho é a configuração do servidor Solr, o primeiro

requisito deste trabalho previa a configuração do Schema, de modo que se possa definir alguns

campos e tipo de dados, para isso foi possível definir os campos no schema do Solr da seguinte

forma:

name_of_file - type="text_pt" indexed="true" stored="true" termVectors="true";

document_identifier - type="string" indexed="true" stored="true" required="true";

content_corpus - type="string_corpus" indexed="true" stored="false";

speaker_name - type="string" indexed="true" stored="true";

language type="string" indexed="true" stored="true" termVectors="true";

date type="pdate" indexed="true" stored="true" termVectors="true";

Year - type="int" indexed="true" stored="true" termVectors="true" multiValued="true"

omitNorms="true";

Termos - type="text_pt" indexed="true" stored="true" multiValued="true";

Text - type="text_pt" indexed="true" stored="false" multiValued="true".

Pode ser analisado a configuração feita no Solr, através da imagem que se segue.

Figura 4 – Configuração do fields em schema Solr

Page 11: Armazenamento, Indexação e Recuperação de Informação

Armazenamento, Indexação e Recuperação de Informação – MSI – 2015/2016

Mário Monteiro - 77910 || Emanuel Pires - 77994

11

Teve-se a necessidade de criar alguns outros campos a fim de ajudar no processamento de indexação e

pesquisa de informação, podemos ver estes campos na figura que se segue abaixo.

Figura 5 – Configuração do copyFields em schema Solr

Após ter definidos os campos é preciso definir os tipos em que foi definido para cada campo e a forma

como vai ser feita a indexação e pesquisa de dados no Solr. Para o processo de indexação como para

pesquisa de dados, é aplicado o processo de limpeza de StopWords e aplicado o Steamer, a fim de tratar

e normalizar os dados, podemos confirmar na figura que se segue.

Figura 6 – Configuração do fieldType em schema Solr

Page 12: Armazenamento, Indexação e Recuperação de Informação

Armazenamento, Indexação e Recuperação de Informação – MSI – 2015/2016

Mário Monteiro - 77910 || Emanuel Pires - 77994

12

É importante realçar de que a configuração do Solconfig.xml foi feito no rute.js do framework

SolrAjax, deste modo não foi necessário ser feito no Solr, uma vez que tenhamos a configuração

no rute.js do SolrAjax, todas configurações passam a ser válidas visto que SolrAjax posiciona

numa camada intermediário com o Solr.

APRESENTAÇÃO DO SISTEMA (FRONT-END)

O desenvolvimento da front-end foi feito tendo em conta a utilização do framework SolrAjax,

este que é desenvolvido em javascript há alguns tempos, encontra-se disponível no seguinte

endereço: https://github.com/evolvingweb/ajax-solr. É uma livraria interessante pela sua forma de

interagir com o Solr, entretanto é uma pena que hoje não está sendo desenvolvido, pelo que a sua

documentação também é muito escasso.

O SolrAjax encontra-se estruturado da seguinte forma:

Core – É uma pasta onde se encontra os principais ficheiros de configuração;

Managers – faz toda gestão de chamada ao Solr através de configuração de url;

Webapp – onde encontra-se localizado propriamente dito a aplicação do front-end;

o Ruters – pode ser considerado como núcleo da aplicação front-end, é ali que se

faz todas configurações que supostamente iriam ser feitas no ficheiro

solrconfig.xml, caso optasse-mos por não usar uma livraria independe, é

configurado as facets, more like this, did you mean e entre outras;

o Widgets – pasta responsável por conter os widgets, que posteriormente irá ser

apresentado na página, ex. lista de facets, auto complete, apresentação de

resultado etc.

Depois de já conhecer um pouco sobre o SolrAjax, neste momento é preciso meter a mão na

massa e começar a desenvolver o módulo para front-end, assim sendo, tivemos que criar muitas

funcionalidades de raiz, pelo fato de que a livraria SolrAjax não estar completo.

Nesta etapa utilizamos como é óbvio as tecnologias como:

1. HTML 5;

2. Jquery (javascript);

3. CSS3;

4. Bootstrap.

Page 13: Armazenamento, Indexação e Recuperação de Informação

Armazenamento, Indexação e Recuperação de Informação – MSI – 2015/2016

Mário Monteiro - 77910 || Emanuel Pires - 77994

13

Com o intuído de desenvolver uma página front-end, limpo, dinâmico e de fácil compreensão

para os utilizadores final.

Passa-se a apresentação da aplicação, mas concretamente a página inicial, na figura que se

segue.

Figura 7 – Página principal (front-end)

É apresentado os facets por língua, por termos e ainda por datas e ano, assim como foi

especificado nos requisitos mais acima, para uma melhor perceção é apresentado na figura que

se segue.

Page 14: Armazenamento, Indexação e Recuperação de Informação

Armazenamento, Indexação e Recuperação de Informação – MSI – 2015/2016

Mário Monteiro - 77910 || Emanuel Pires - 77994

14

Figura 8 – Apresentação de facet por termos (front-end)

Figura 9 – Apresentação de facet por lingua (front-end)

Page 15: Armazenamento, Indexação e Recuperação de Informação

Armazenamento, Indexação e Recuperação de Informação – MSI – 2015/2016

Mário Monteiro - 77910 || Emanuel Pires - 77994

15

Foi desenvolvido um método para fazer preenchimento automático de campo de pesquisa, com

o Auto complete, com aplicação de highlight de termos no momento em que a pesquisa é feita,

a demostração é apresentado na figura que se segue.

Figura 10 – Pesquisa com auto-complete e highlight (front-end)

Um outro requisito deste trabalho, é apresentação de sugestões caso o utilizador escrever uma

palavra estranha, assim sendo a aplicação irá se posicionar e apresenta uma palavra como

sugestão de uma pesquisa correta que supostamente o utilizador queria fazer, ver a figura que

se segue.

Figura 11 – Feedback did you mean (front-end)

Page 16: Armazenamento, Indexação e Recuperação de Informação

Armazenamento, Indexação e Recuperação de Informação – MSI – 2015/2016

Mário Monteiro - 77910 || Emanuel Pires - 77994

16

Finalmente, falta realçar que a aplicação possibilita aos utilizadores fazer pesquisa em testo

livre, por intervalo de datas ou ainda por ano em que um documento foi publicado, apresenta-

se na figura que se segue.

Figura 12 – Pesquisa (front-end)

Page 17: Armazenamento, Indexação e Recuperação de Informação

Armazenamento, Indexação e Recuperação de Informação – MSI – 2015/2016

Mário Monteiro - 77910 || Emanuel Pires - 77994

17

CONSIDERAÇÕES FINAIS

Este trabalho propôs-se como objetivo geral criar uma estrutura de indexação.

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.

Poderia se utilizar o multiprocessamento no processamento dos corpus e na inserção dos dados

de indexação no Solr, visto que com o multiprocessamento, enquanto e realizado a tarefa de

processamento dos corpus no Corpus Read os dados já tratados são inseridos no Solr.

Pensamos que os objetivos deste trabalho foram alcançados sem grandes sobressaltos,

entretanto como melhoria ficou por acrescentar uma pesquisa por intervalo de ano e

apresentação de highlight nos resultados obtidos, pois não foi possível ser apresentado a tempo,

devido ao fato de estarmos a trabalhar sob uma biblioteca que disponibiliza pouca

documentação.