Extração de informações de texto e cálculo de similaridade usando Apache Lucene

4,829 views

Published on

Apresentação didática sobre conceitos teóricos e práticos do uso do Apache Lucene. Por fim, uma atividade é proposta.

Published in: Education

Extração de informações de texto e cálculo de similaridade usando Apache Lucene

  1. 1. Extração de informações de texto e cálculo de similaridade usando Apache Lucene André Luis Schwerz Rafael Liberato Roberto Abril/ 2012 By André Luis Schwerz e Rafael Liberato Roberto . Este trabalho foi licenciado com uma Licença Creative Commons - Atribuição 3.0 Não Adaptada.
  2. 2. Roteiro• Por que extrair informações?• Processo de extração de informação • Tokenização • Normalização • Eliminação de Stopwords • Stemming• Indexação e Busca• Apache Lucene• Atividade 2
  3. 3. Por que extrair informação?• Muito conteúdo sendo gerado • Textos não estruturados • Blogs • E-mails • Fóruns • Redes sociais • Artigos • Websites• Realizar busca em textos não estruturados• Inteligência Coletiva• Como extrair informação desses conteúdos? 3
  4. 4. Processo de Extração de Informação Refinamento Pré- Coleta Indexação Mineração Análise Processamento• Formação da • Preparação dos • Organização com • Cálculos, • Análise humana base de dados objetivo de busca inferências, conhecimento rápida extração de • Processamento conhecimento • Leitura e• Varredura manual de Linguagem • Recuperação da interpretação dos ou automática natural Informação • Mineração de dados (Crawling) dados 4
  5. 5. Processo de Extração de Informação Refinamento Pré- Coleta Indexação Mineração Análise Processamento• Formação da • Preparação dos • Organização com • Cálculos, • Análise humana base de dados objetivo de busca inferências, conhecimento rápida extração de • Processamento conhecimento • Leitura e• Varredura manual de Linguagem • Recuperação da interpretação dos ou automática natural Informação • Mineração de dados (Crawling) dados 5
  6. 6. Extração de Informações de Texto Pré- Indexação MineraçãoProcessamento 1 Tokenização 2 Normalização 3 Stopwords 4 Stemming 6
  7. 7. 1 TokenizaçãoTokenização 2 Normalização Pré- Indexação Mineração Processamento 3 Stopwords• Interpreta o texto transformado em termos 4 Stemming• Exemplo Texto: Pouco se aprende com a vitória, mas muito com a derrota. 1 1 1 Pouco se aprende com 0 5 6 8 9 16 17 20Termos:[“Pouco”, “se”, “aprende”, “com”, “a”, “vitória”, “mas”, “muito”, “com”, “a”, “derrota”] 7
  8. 8. 1 TokenizaçãoTokenização 2 Normalização Pré- Indexação Mineração Processamento 3 Stopwords• Diferentes formas de tokenização 4 Stemming Pouco se aprende com a vitória, mas muito com a derrota.Shingle n=4 Pouco aprende com Pouco se aprende com a Pouco se aprende aprende com a vitória Pouco se aprende com com se com a se aprende com a vitória se aprende com a se aprende com a a vitória aprende vitória 8
  9. 9. 1 Tokenização Normalização 2 Normalização Pré- Indexação Mineração Processamento 3 Stopwords 4 Stemming • Conversão do texto para letras minúsculas. • Pode remover acentos, pontos, números, etc. Texto: Pouco se aprende com a vitória, mas muito com a derrota.[“pouco”, “se”, “aprende”, “com”, “a”, “vitoria”, “mas”, “muito”, “com”, “a”, “derrota”] 9
  10. 10. 1 Tokenização Remoção de Stopwords 2 Normalização Pré- Indexação Mineração Processamento 3 Stopwords • Remove as palavras comuns 4 Stemming • Sem significado relevante • Preposição, pronome, etc. • Depende do idioma Texto: Pouco se aprende com a vitória, mas muito com a derrota.[“pouco”, “se”, “aprende”, “com”, “a”, “vitoria”, “mas”, “muito”, “com”, “a”, “derrota”] [“pouco”, “aprende”, “vitoria”, “muito”, “derrota”] 10
  11. 11. 1 Tokenização Stemming 2 Normalização Pré- Indexação Mineração Processamento 3 Stopwords • Converte os termos em sua raiz gramatical 4 Stemming • Elimina plural Pouco se aprende com a vitória, mas muito com a derrota.[“pouco”, “se”, “aprende”, “com”, “a”, “vitoria”, “mas”, “muito”, “com”, “a”, “derrota”] [“pouco”, “aprende”, “vitoria”, “muito”, “derrota”] pouco pouc aprende aprend vitoria vitor muito muit derrota derrot 11
  12. 12. Indexação Pré- Indexação Mineração Processamento Documento 1• Estabelece uma estrutura para os dados Termos Documentos Documento 2• Índice invertido Termo1 1 Termo2 1,2 • Vocabulário e ocorrência Termo3 2 Termo4 3 Documento 3• Banco de dados 12
  13. 13. Indexação Pré- Indexação Mineração Processamento• Tratamento de termos que são muito usados em uma coleção de documentos• Fator tf • Quantidade de vezes que o termo i aparece no documento (Quão bem i descreve d)• Fator idf • Inverso da frequência do termo i dentro da coleção de documentos. • Quanto menos usado for o termo, maior o idf 13
  14. 14. Mineração Pré- Indexação Mineração Processamento• Utilização algoritmos para extrair informações dos dados estruturados 14
  15. 15. Apache Lucene™• Biblioteca para recuperação de informação;• Projeto código aberto implementado em Java;• Primeira distribuição em 2000;• Versão atual 3.5;• Disponível em http://lucene.apache.org/core/• Documentação em http://lucene.apache.org/core/old_versioned_docs/versions/3_5_0/api/core/index.html *Os slides a seguir tem como objetivo fornecer um tutorial rápido e básico da utilização do Lucene 15
  16. 16. Analisadores Pré- Indexação Mineração Processamento• Estabelece regras para realização do pré-processamento• Alguns tipos de Analisadores Analyzer Whitespace Analyzer Divide tokens por espaço em branco Simple Analyzer Divide tokens por caracteres que não são letras, normaliza (lowercase) e remove pontuação. Stop Analyzer Simple Analyzer mais remoção de stopwords em inglês Standard Analyzer Mais sofisticado. Identifica certos tipos de tokens, como e-mail, nomes de empresas, etc. Normaliza (lowercase) e remove pontuação e stopwords 16
  17. 17. Analisadores Pré- Indexação Mineração Processamento Analyzer Reader Tokenizer ... TokenFilter TokenFilter Tokens TokenFilterStopFilter Length Filter LowerCase Standard Filter Filter Shingle PorterStem Filter Filter 17
  18. 18. Analisadores Pré- Indexação Mineração Processamento Analyzer Reader Tokenizer ... TokenFilter TokenFilter Tokenspublic final class MeuAnalisador extends Analyzer{ TokenFilter @Override public TokenStream tokenStream(String fieldName, Reader reader) { StopFilter Length TokenStream t = new WhitespaceTokenizer(Version.LUCENE_35, reader) Filter return new ShingleFilter(t, 4); LowerCase Standard } Filter Filter Shingle PorterStem} Filter Filter 18
  19. 19. Analisadores Pré- Indexação Mineração Processamento• Suporte a outros idiomas • Definido pelo analisador • Somente é necessário se o analisador realizar stemming e a remoção de stopwords• Idiomas suportados pelo Apache Lucene • Brazilian • Chinese • Dutch • French • German • Greek • Russian • Thai 19
  20. 20. Indexação Pré- Indexação Mineração Processamento• Cria arquivos estruturados que permitem o rápido acesso as palavras. • Índice Invertido Termos Documentos aprend 1 derrot 1,2 muit 1,3 pouc 1,2 vitor 1,5 20
  21. 21. Indexação Pré- Indexação MineraçãoProcessamento Document Field Field Field Index Writer Analyzer 21
  22. 22. Indexação Pré- Indexação Mineração Processamento • IndexWriter responsável por escrever no índice.IndexWriter(Directory dir, IndexWriterConfig config)dir Diretório onde o índice será escritoconfig responsável por definir a versão do lucene e o analyzer a ser utilizado Métodos addDocument(Document doc) Insere o documento no índice close() Encerra o processo de indexação • IndexWriterConfigIndexWriterConfig(Version matchVersion, Analyzer analyzer)matchVersion Versão do lucene. Version.LUCENE_35analyzer Analisador a ser utilizado 22
  23. 23. Indexação Pré- Indexação Mineração Processamento Document • Document FieldDocument() Field Métodos add(Fieldable field) Adiciona o field no documento Field • FieldField(String name, String value, Field.Store store, Field.Index index) name Nome do campo value String a ser processada store Store.YES / Store.NO index Index.ANALYZED | Index.NOT_ANALYZED 23
  24. 24. Indexação Pré- Indexação Mineração Processamento • BrazilianAnalyzer responsável por estabelecer as regras do pré-processamento. BrazilianAnalyzer(Version matchVersion) Field matchVersion Versão do lucene. Version.LUCENE_35 Field Field Analyzer Index WriterDirectory dir = FSDirectory.open(new File(pathIndexDir));Analyzer an = new BrazilianAnalyzer(Version.LUCENE_35);IndexWriterConfig config = new IndexWriterConfig(Version.LUCENE_35, an);IndexWriter indexWriter = new IndexWriter(dir, config);Document d = new Document();d.add(new Field("livro", “livro”, Store.YES, Index.ANALYZED)); 24
  25. 25. Busca Pré- Indexação Mineração Processamento• Encontra documentos que são relevantes para a consulta.• Rapidez e Classificação Busca Resultados 25
  26. 26. Busca Pré- Indexação Mineração Processamento Consulta Query Parser Analyzer Index Resultados Searcher Index ReaderBusca Resultados 26
  27. 27. Busca Pré- Indexação Mineração Processamento IndexReader responsável pela leitura do índice.Directory dir = FSDirectory.open(new File(“c://data”));IndexReader reader = IndexReader.open(dir); IndexSearcher implementa um buscador para o IndexReader.IndexSearcher searcher = new IndexSearcher(reader) QueryParser analisador da consulta.QueryParser parser = new QueryParser(Version.LUCENE_35, “field”,analyzer) 27
  28. 28. Busca Pré- Indexação Mineração Processamento Query consulta analisada pelo QueryParserQuery query = parser.parse(“string de busca”); Cálculo de similaridade entre a query e os documentos TopDocs hits = searcher.search(q,100); ScoreDoc[] scoreDocs = hits.scoreDocs; Exibindo o resultado for(ScoreDoc sd : scoreDocs){ Document d = searcher.doc(sd.doc); System.out.println("Nome do Arquivo: " + d.get("file")); System.out.println("Detalhando os resultados:"); System.out.println(searcher.explain(q, sd.doc)); } 28
  29. 29. Score Pré- Indexação Mineração Processamento• Retorno do cálculo de similaridade entre a query e o documentoTermo Descriçãotf(t in d) O número de vezes que o termo t ocorre no documento didf(t) Leva em consideração o número de documentos que contém o termo tcoord(q,d) Fração de todos os termos da consulta que o documento contémqueryNorm(q,d) Fator de normalização da consultat.getBoost() Privilegia o termo t na consulta q em tempo de buscanorm(t,d) Encapsula alguns fatores de boost em tempo de indexação 29
  30. 30. OperadoresConsulta Encontra o documento que...java Contém o termo java no campo padrão (default field)java junit Contém o termo java ou junit ou os dois no campo padrão (default field)java OR junit+java +junit Contém ambos, java e junit no campo padrão (default field)java AND junit Contém o termo java ou junit ou os dois no campo padrão (default field)titulo:ant Contém o termo ant no campo titulotitulo:extremo Contém o termo extremo no campo titulo e que não contenha esporte no–assunto:esporte campo assuntotitulo:extremoAND NOTassunto:sports 30
  31. 31. OperadoresConsulta Encontra o documento que...(agil OR extrema) Contém metodologia e deve conter agil ou extrema, todos no campoAND padrão (default field)metodologiatitulo:"junit in Contém a frase “junit in action” no campo tituloaction"titulo:"junit Contém os termos junit e action com 5 posições um do outro, no campoaction"~5 titulojava* Contém termos que começam com java, tais como javaspaces, javaserversjava~ Contém termo próximos ao termo java, como lava 31
  32. 32. Atividade1. Baixar o projeto com o esqueleto e os livros da bíblia na forma de arquivos texto2. Fazer a indexação da bíblia3. Fazer a busca que mostra os versículos da Bíblia correspondentes a consultaObs. Cada arquivo possui um capítulo do livro Gênesis 01.txtI Samuel 01.txt Mateus 01.txt 1 No princípio criou Deus os céus e a terra. 2 A terra era sem forma e vazia; e havia trevas sobre a face doI Samuel 02.txt Mateus 02.txt abismo, mas o Espírito de Deus pairava sobre a face das águas. 3 Disse Deus: haja luz. E houve luz. ... ... 4 Viu Deus que a luz era boa; e fez separação entre a luz e as trevas. 5 E Deus chamou à luz dia, e às trevas noite. E foi a tarde e a manhã, o dia primeiro. ... 32
  33. 33. Atividade 2. Fazer a indexação da bíblia • Para permitir a busca por versículo, criar um document por versículo Document livro Gênesis Gênesis 01.txt1 No princípio criou Deus os céus e a terra. capitulo 012 A terra era sem forma e vazia; e havia trevas sobre a face do abismo, mas o Espírito de Deus pairava sobre a face das águas. 1 No princípio criou Deus os céus e a versiculo terra.3 Disse Deus: haja luz. E houve luz.4 Viu Deus que a luz era boa; e fez separação entre a luz e as trevas.5 E Deus chamou à luz dia, e às trevas noite. E foi a tarde e a Document manhã, o dia primeiro.... livro Gênesis capitulo 01 2 A terra era sem forma e vazia; e versiculo havia trevas sobre a face do*usar o nome do arquivo para preencher os campos abismo, mas o Espírito de Deuslivro e capítulo pairava sobre a face das águas. 33
  34. 34. Atividade – Código exemplo Passo 01: Inicializa o processo de Indexação Passo 02: Processo de Indexação Passo 03: Processo de Busca e impressão do resultado 34
  35. 35. Referências• RAJARAMAN, A. & ULLMAN, J.D., Mining of Massive Datasets, 2011• ALAG, S., Collective Intelligence in Action, Manning, 2009.• MCCANDLES, M. et al. Lucene in Action, 2010. 35

×