Extração de informações de texto e cálculo de similaridade usando Apache Lucene
Upcoming SlideShare
Loading in...5
×

Like this? Share it with your network

Share

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

  • 2,821 views
Uploaded on

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

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

More in: Education
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
No Downloads

Views

Total Views
2,821
On Slideshare
2,821
From Embeds
0
Number of Embeds
0

Actions

Shares
Downloads
47
Comments
0
Likes
4

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 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. 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. 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. 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. 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. Extração de Informações de Texto Pré- Indexação MineraçãoProcessamento 1 Tokenização 2 Normalização 3 Stopwords 4 Stemming 6
  • 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. 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. 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. 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. 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. 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. 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. Mineração Pré- Indexação Mineração Processamento• Utilização algoritmos para extrair informações dos dados estruturados 14
  • 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. 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. 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. 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. 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. 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. Indexação Pré- Indexação MineraçãoProcessamento Document Field Field Field Index Writer Analyzer 21
  • 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. 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. 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. Busca Pré- Indexação Mineração Processamento• Encontra documentos que são relevantes para a consulta.• Rapidez e Classificação Busca Resultados 25
  • 26. Busca Pré- Indexação Mineração Processamento Consulta Query Parser Analyzer Index Resultados Searcher Index ReaderBusca Resultados 26
  • 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. 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. 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. 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. 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. 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. 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. 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. 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