SlideShare uma empresa Scribd logo
1 de 17
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 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
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
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
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).
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.
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
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
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),
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 fornecidopelo professor e conf – instanciaçãodaclasse
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
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
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
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.
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.
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)
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)
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)
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.

Mais conteúdo relacionado

Destaque

Pension Committee Chairwoman Bridget Gainer - Truth In Numbers Report on the ...
Pension Committee Chairwoman Bridget Gainer - Truth In Numbers Report on the ...Pension Committee Chairwoman Bridget Gainer - Truth In Numbers Report on the ...
Pension Committee Chairwoman Bridget Gainer - Truth In Numbers Report on the ...
Cook County Commissioner Bridget Gainer
 
New microsoft power NARRATIVEpoint presentation
New microsoft power NARRATIVEpoint presentationNew microsoft power NARRATIVEpoint presentation
New microsoft power NARRATIVEpoint presentation
King Jacob
 
Presentazione-Cristina-Pagetti
Presentazione-Cristina-PagettiPresentazione-Cristina-Pagetti
Presentazione-Cristina-Pagetti
Cristina Pagetti
 
Audience Research Results Analysis
Audience Research Results AnalysisAudience Research Results Analysis
Audience Research Results Analysis
db04803167
 
LBIS Professional Development Day 21/09/12
LBIS Professional Development Day 21/09/12LBIS Professional Development Day 21/09/12
LBIS Professional Development Day 21/09/12
davidjjenkins
 

Destaque (17)

DJ Mag/Mixmag Case Studies
DJ Mag/Mixmag Case StudiesDJ Mag/Mixmag Case Studies
DJ Mag/Mixmag Case Studies
 
One Another Wordles
One Another WordlesOne Another Wordles
One Another Wordles
 
Freelancing on Search engine optimization (SEO)
Freelancing on Search engine optimization (SEO)Freelancing on Search engine optimization (SEO)
Freelancing on Search engine optimization (SEO)
 
Missing andy ‘kings for the weekend’
Missing andy ‘kings for the weekend’Missing andy ‘kings for the weekend’
Missing andy ‘kings for the weekend’
 
SEO For Ecommerce Site
SEO For Ecommerce SiteSEO For Ecommerce Site
SEO For Ecommerce Site
 
Smart analyzer v9 product profile
Smart analyzer v9 product profileSmart analyzer v9 product profile
Smart analyzer v9 product profile
 
Visual resume Ivan Artyukh
Visual resume Ivan Artyukh Visual resume Ivan Artyukh
Visual resume Ivan Artyukh
 
Pension Committee Chairwoman Bridget Gainer - Truth In Numbers Report on the ...
Pension Committee Chairwoman Bridget Gainer - Truth In Numbers Report on the ...Pension Committee Chairwoman Bridget Gainer - Truth In Numbers Report on the ...
Pension Committee Chairwoman Bridget Gainer - Truth In Numbers Report on the ...
 
Illinois supreme court decision in re pension reform litigation - May 8, 2015
Illinois supreme court decision in re pension reform litigation - May 8, 2015Illinois supreme court decision in re pension reform litigation - May 8, 2015
Illinois supreme court decision in re pension reform litigation - May 8, 2015
 
New microsoft power NARRATIVEpoint presentation
New microsoft power NARRATIVEpoint presentationNew microsoft power NARRATIVEpoint presentation
New microsoft power NARRATIVEpoint presentation
 
Final photos
Final photosFinal photos
Final photos
 
Presentazione-Cristina-Pagetti
Presentazione-Cristina-PagettiPresentazione-Cristina-Pagetti
Presentazione-Cristina-Pagetti
 
Audience Research Results Analysis
Audience Research Results AnalysisAudience Research Results Analysis
Audience Research Results Analysis
 
LBIS Professional Development Day 21/09/12
LBIS Professional Development Day 21/09/12LBIS Professional Development Day 21/09/12
LBIS Professional Development Day 21/09/12
 
Dalil tentang shaum ramadhan
Dalil tentang shaum ramadhanDalil tentang shaum ramadhan
Dalil tentang shaum ramadhan
 
Great moments
Great momentsGreat moments
Great moments
 
La Gestión de imagen como factor clave del posicionamiento
La Gestión de imagen como factor clave del posicionamientoLa Gestión de imagen como factor clave del posicionamiento
La Gestión de imagen como factor clave del posicionamiento
 

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

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
 
Resumo c#
Resumo c#Resumo c#
Resumo c#
 
Artigo tecnico RNA Iris
Artigo tecnico RNA IrisArtigo tecnico RNA Iris
Artigo tecnico RNA Iris
 
Plano de projeto de software - SISCONI
Plano de projeto de software - SISCONIPlano de projeto de software - SISCONI
Plano de projeto de software - SISCONI
 
Plano de projeto de software - SISCONI
Plano de projeto de software - SISCONIPlano de projeto de software - SISCONI
Plano de projeto de software - SISCONI
 
Algoritmos
AlgoritmosAlgoritmos
Algoritmos
 
Apostila de sql basico
Apostila de sql basicoApostila de sql basico
Apostila de sql basico
 
Pesquisa ppi 2
Pesquisa ppi 2Pesquisa ppi 2
Pesquisa ppi 2
 
UM ESTUDO PARA A IMPLANTAÇÃO DE UM MODELO DE GERÊNCIA DE NUVEM HÍBRIDA UTILIZ...
UM ESTUDO PARA A IMPLANTAÇÃO DE UM MODELO DE GERÊNCIA DE NUVEM HÍBRIDA UTILIZ...UM ESTUDO PARA A IMPLANTAÇÃO DE UM MODELO DE GERÊNCIA DE NUVEM HÍBRIDA UTILIZ...
UM ESTUDO PARA A IMPLANTAÇÃO DE UM MODELO DE GERÊNCIA DE NUVEM HÍBRIDA UTILIZ...
 

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 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
  • 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 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
  • 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 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
  • 4. 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).
  • 5. 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.
  • 6. 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
  • 7. 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
  • 8. 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),
  • 9. 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 fornecidopelo professor e conf – instanciaçãodaclasse 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
  • 10. 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
  • 11. 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
  • 12. 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.
  • 13. 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.
  • 14. 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)
  • 15. 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)
  • 16. 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)
  • 17. 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.