330 likes | 441 Views
i-Jus Busca em Diário Oficial. Bruno Edson Filho Daniel Marques Oliveira José de Anchieta Caraciolo Netto Max José Lins Tímoteo. Roteiro. Motivação Arquitetura Básica do Lucene Componentes do sistema Estrutura do Arquivo Consultas Resultados. Motivação. Anchieta. Contexto.
E N D
i-JusBusca em Diário Oficial Bruno Edson Filho Daniel Marques Oliveira José de Anchieta Caraciolo Netto Max José Lins Tímoteo
Roteiro • Motivação • Arquitetura Básica do Lucene • Componentes do sistema • Estrutura do Arquivo • Consultas • Resultados
Motivação Anchieta
Contexto • Necessidade de buscar informações nos Diários Oficiais do país (advogados autônomos, escritórios, empresas terceirizadas pelos escritórios, etc.) • Os sites existentes são muito confusos e apresentam muita dificuldade quando se procura informações, pois são publicados como um documento inteiro ou são publicados em partes menores.
Exemplos • Diário Oficial de Pernambuco • http://www.fisepe.pe.gov.br/cepe/diario.htm • Diário Oficial da União (http://www.in.gov.br/) • Diários Oficiais Eletrônicos • http://ediarios.in.gov.br/ediarios/pages/seguranca/login.jsp • Privados • Ledj (Sistema de Leitura Eletrônica dos Diários Oficiais e da Justiça) • http://www.ledj.com.br/ • DOINET (Diário Oficial na Internet) • http://www.doi.com.br/
Solução • Um sistema com interface simples e agradável, semelhante aos sistemas de busca conhecidos (Ex: Google, Yahoo!, Radix) • Busca nos Diários Oficiais • Termos (frase exata e expressões boleanas) • Critérios de ordenação (data de publicação ou relevância) • Resultados • Data de publicação • Documento em cache com salientador • Local do Diário Oficial • Endereço da versão Oficial
Arquitetura Básica do Lucene Bruno Edson
Arquitetura Básica - Lucene • Objetos de acesso à dados (acessíveis) • Camada de negócios • acesso aos arquivos de índices (sistema) • Camada de pesquisa (parser) / Indexação • 7 pacotes (org.apache.lucene.*): • analisys, document, index, queryparser, search, store, util
Pacotes - Lucene • analysys: converter texto -> índices • document: relacionada a arquivos • index: relacionada aos índices • queryparser: QueryParser, parser consulta • search: busca pelos índices • store: abstração dados (BD, arq., RAM) • util: utilizado pelos outros (vetor, tabela)
Tipos de Campos - Lucene • Field.Keyword • Field.UnIndexed • Field.UnStored • Field.Text
Fluxo de Execução - Lucene • Consulta: • QueryParser: Traduzir a consulta • Realiza a consulta • Obtém acesso aos índices • Obtém acesso aos arquivos (BD, arq., RAM) • Indexação: • Aquisição do documento (processamento) • Análise (gera índices) • Grava nos índices • Grava nos arquivos (BD, arq., RAM)
Componentes do Sistema Daniel
Componentes do Sistema • Analisador Léxico • Converte todas as letras para minúsculas • Retira pontos, barras e hífen de números de identificação concatenando as suas partes • CPF, CNPJ, RG, OAB etc • Retira pontos, barras, hífen e espaços presentes no meio de frases • Retira acentos e cedilhas • Retira stopwords
Campos Existentes • Título (Field.Text) • Publicação (Field.Keyword) • Site (Field.Keyword) • Cache (Field.UnIndexed) • Arquivo (Field.UnIndexed) • Conteudo (Field.Text)
Estrutura do Arquivo Bruno Edson
Estrutura do Arquivo • Estrutura de Índices • Multi-índice • Composto • Conteúdo: • Segmentos • Documentos • Campos • Termos
Escolha de estrutura de índices • Cálculo do nº. de arquivos abertos • Multi = 15300 (índices e campos) • Composto = 900 (índices) • Performance • Composto é 5-10% mais lenta que o multi • Composto é default.
Arquivos de Índices Compostos • Diferença visível • Multi = 10 arq’s. • Composto = 2 arq’s. • Poucos recursos • Redução do número de arquivos • Exceto: segmentos, documentos, campos e termos. • Único .csf por segmento
Arquivos de Índices Compostos • Exemplo: • Multi: • Composto:
Criando um índice composto • Opção default • Explicitar no código • Método: setUseCompound(boolean) IndexWriter writer = new IndexWriter(indexDir, new StandardAnalyzer(), true); writer.setUseCompoundFile(true); • Possibilidade de troca
Conversão entre estruturas • Suporte durante indexação • IndexWriter • setUseCompoundFiles(boolean) • Código: IndexWriter writer = new IndexWriter(indexDir, new StandardAnalyzer(), false); writer.setUseCompoundFile(true); writer.optimize(); writer.close();
Consultas Max
Consulta • Biblioteca Lucene • IndexSearcher • Query (e subclasses) • QueryParser • Hits
Consulta • Idéia básica de uma consulta • QueryParser • Query • IndexSearcher • Hits • Document
Consulta • Tipos de consulta • Or (padrão): • termo1 termo2 • Termo1 OR termo2 • And: • +termo1 +termo2 • termo1 AND termo2 • Parênteses: • (termo1 OR termo2) AND termo3 • ...
Consulta • Tipos de consulta • Expressão(retirando stopwords): • “termo1 termo2” • *: • termo1* • Palavras semelhantes: • termo1~
Score • Tipos • Publicação • Relevância
Score • Biblioteca Lucene • Métodos da classe Hits: • length() • doc(n) • id(n) • score(n)
Resultados Daniel
Resultados • Quantidade de termos • 200.000 • Quantidade de documentos • 1800 • Muitos nomes frequentes • Sistema • http://ijuz.no-ip.info/juri • Ou http://201.8.211.225/juri • Obs: o sistema está rodando no computador de Daniel (dmo), quando quiser acessar programar um horário para que ele ative o sistema
Referências • Gospodnetic, Otis & Hatcher, Erik. Lucene in action. Manning Publications Co, 2005. • CyberNeko Tools for XNI. http://www.apache.org/~andyc/neko/doc. • Jakarta Lucene. http://jakarta.apache.org/lucene. • JLex: A Lexical Analyzer Generator for Java(TM). http://www.cs.princeton.edu/~appel/modern/java/JLex/. • Baeza-Yates, Ricardo & Ribeiro-Neto, Berthier. Modern Information Retrieval. ACM Press, 1999. • CEPE - Diário Oficial do Estado de Pernambuco. http://www.fisepe.pe.gov.br/cepe/diario.htm.