Coder Social home page Coder Social logo

ojoaomorais / lucene_searcher Goto Github PK

View Code? Open in Web Editor NEW
0.0 1.0 0.0 10.17 MB

Implementacção de uma máquina de busca com a biblioteca Apache Lucene e, da realização de testes com os modelo BM25 e Vetorial

Java 100.00%
information-retrieval lucene lucenesearch

lucene_searcher's Introduction

Metodologia

A ferramenta de recuperação de documentos utilizada para a execução deste trabalho foi o Lucene, que consiste em uma biblioteca de mecanismo de busca e, de software livre a partir do Apache Software Foundation. As APIs do Lucene focam principalmente na indexação e na procura de texto e, dentre os diferentes recursos que disponibiliza temos: algoritmos de procura em documentos de texto; retorno de documentos relevantes a consulta realizada pelo usuário através da aplicação de um cálculo de pontuação para cada documento da coleção; procura e a indexação simultaneamente, entre outros. A Figura 1 mostra o funcionamento da máquina de busca configurada no presente trabalho, utilizando o Lucene para indexação e pesquisa dos documentos e das consultas.

  1. A ferramenta inicia lendo um arquivo chamado ”cfquery”, onde estão todas as informações sobre as consultas e documentos relevantes de cada uma, e armazenando os dados em uma estrutura manipul ́avel. As queries são utilizadas posteriormente para fazer as consultas na ferramenta e, os documentos para avaliar os a precisãoo e revocaçãoo dos resultados.

  2. Posteriormente, o programa verifica se os documentos já foram devidamente lidos e indexados, caso a resposta seja negativa, todo o processo de Indexação, pré-processamento dos documentos e conversão para arquivo .txt é feita.

  3. A próxima etapa é realizar as consultas. O programa utiliza as consultas do arquivo ”cfquery”que contendo 100 pesquisas distintas, para recuperar os resultados de cada uma.

  4. Após a pesquisa, os resultados obtidos s ̃ao comparados com os documentos relevantes.

  5. Por fim, são calculadas as métricas de precisão e revocação para cada uma das pesquisas, gerando um único array com a média aritmética das pesquisas.

  6. O programa finaliza sua execução mostrando um gráfico com a curva de precisão versus revocação.

fluxo

Descrição dos dados utilizados

Para realização implementação e teste dos classificadores utilizouse a coleção de documentos ”CReuters-21578”, disponível em http://disi.unitn.it/moschitti/corpora.html

Indexação e Pesquisa

A biblioteca Lucene é composta por duas etapas principais: indexaçãoo e pesquisa e, os documentos precisam ser previamente indexados antes de se realizar a consulta. Neste trabalho antes do Lucene indexar os termos dos documentos, foi necessário primeiramente programar um código em java para ler e guardar automaticamente os campos que continham o texto e o número de identificaçãoo de cada documento. Para isso utilizou-se uma estrutura de repetiçãoo que acessa cada arquivo, verifica e guarda os campos que contém apenas as informaçõees relevantes para as especificaçõees propostas ao desenvolvimento do trabalho. Os códigos a seguir trazem o procedimento principal para a criação da indexação dos documentos e a estrutura de pesquisa (método chamado Indexer), que permite a realizaçãoo da consulta na coleção para recuperação dos documentos relevantes, de acordo com a entrada (consulta) informada pelo usuário.

private void Indexer(){
  try {
     Directory indexDirectory = FSDirectory.open(Paths.get(indexDir));
     //create the indexer
     config = new IndexWriterConfig(analyzer);
     writer = new IndexWriter(indexDirectory, config);
  }catch (IOException e){
      System.out.println("Problema : " + e.getMessage());
  }
}
public void indexFile(String text,String fileNumber){
  try {
    Document document = getDocument(text,fileNumber);
    writer.addDocument(document);
    writer.commit();
  }catch (IOException e){
    System.out.println("Problema : " + e.getMessage());
  }
}
//Estrutra de pequisa
Query query = new QueryBuilder(analyzer).
createMinShouldMatchQuery("termos", queryObject.
getQuery(), 0.1f);
// Abre o diret rio com o index do Lucene
IndexReader reader = DirectoryReader.open(index);
IndexSearcher searcher = new IndexSearcher(reader);
TopScoreDocCollector collector = TopScoreDocCollector.
create(10000,10000);
searcher.setSimilarity(similarityType);
searcher.search(query,collector);
ScoreDoc[] hits = collector.topDocs().scoreDocs;

Resultados

Os grafos apresentados nas Figuras 3 e 4, correspondem aos resultados da precisao interpolada em 11 níveis de revocação obtidos. A interpolação mostra em intervalos de dez e dez (eixo Revocação) quantos documentos recuperados sãoo realmente relevantes (eixo Precisao).

A Figura 2 traz os resultados obtidos pelos dois modelos para a seguinte consulta ”what are the effects of calcium on the physical properties of mucus from cf patients?”.

testee

vetorial

Conclusão

O objetivo do presente trabalho foi utilizar um mecanismo de recuperac¸ao de informação como o Lucene, bem como realizar consultas atraves deste mecanismo utilizando diferentes modelos de RI a fim de, analisar a qualidade de recuperação destes modelos. Através dos resultados obtidos foi possível constatar que ambos os modelos apresentaram desempenho semelhante, porem o modelo BM25 se saiu ligeiramente melhor. Além disso, a pesquisa entrega documentos relevantes logo nas primeiras amostras, o que pode ser relevante para alguns casos.

lucene_searcher's People

Contributors

ojoaomorais avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.