extração de informações de texto e cálculo de similaridade usando apache lucene
DESCRIPTION
Apresentação didática sobre conceitos teóricos e práticos do uso do Apache Lucene. Por fim, uma atividade é proposta.TRANSCRIPT
![Page 1: Extração de informações de texto e cálculo de similaridade usando Apache Lucene](https://reader035.vdocuments.site/reader035/viewer/2022081720/55941b391a28ab0a2c8b4674/html5/thumbnails/1.jpg)
Extração de informações de texto e
cálculo de similaridade usando
Apache Lucene
André Luis Schwerz
Rafael Liberato Roberto
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.
Abril/ 2012
![Page 2: Extração de informações de texto e cálculo de similaridade usando Apache Lucene](https://reader035.vdocuments.site/reader035/viewer/2022081720/55941b391a28ab0a2c8b4674/html5/thumbnails/2.jpg)
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
![Page 3: Extração de informações de texto e cálculo de similaridade usando Apache Lucene](https://reader035.vdocuments.site/reader035/viewer/2022081720/55941b391a28ab0a2c8b4674/html5/thumbnails/3.jpg)
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
![Page 4: Extração de informações de texto e cálculo de similaridade usando Apache Lucene](https://reader035.vdocuments.site/reader035/viewer/2022081720/55941b391a28ab0a2c8b4674/html5/thumbnails/4.jpg)
Processo de Extração de Informação
Coleta
• Formação da base de conhecimento
• Varredura manual ou automática (Crawling)
Pré-Processamento
• Preparação dos dados
• Processamento de Linguagem natural
Indexação
• Organização com objetivo de busca rápida
• Recuperação da Informação
Mineração
• Cálculos, inferências, extração de conhecimento
• Mineração de dados
Análise
• Análise humana
• Leitura e interpretação dos dados
Refinamento
4
![Page 5: Extração de informações de texto e cálculo de similaridade usando Apache Lucene](https://reader035.vdocuments.site/reader035/viewer/2022081720/55941b391a28ab0a2c8b4674/html5/thumbnails/5.jpg)
Processo de Extração de Informação
Coleta
• Formação da base de conhecimento
• Varredura manual ou automática (Crawling)
Pré-Processamento
• Preparação dos dados
• Processamento de Linguagem natural
Indexação
• Organização com objetivo de busca rápida
• Recuperação da Informação
Mineração
• Cálculos, inferências, extração de conhecimento
• Mineração de dados
Análise
• Análise humana
• Leitura e interpretação dos dados
Refinamento
5
![Page 6: Extração de informações de texto e cálculo de similaridade usando Apache Lucene](https://reader035.vdocuments.site/reader035/viewer/2022081720/55941b391a28ab0a2c8b4674/html5/thumbnails/6.jpg)
Extração de Informações de Texto
Pré-Processamento
Indexação Mineração
Tokenização 1
Normalização 2
Stopwords 3
Stemming 4
6
![Page 7: Extração de informações de texto e cálculo de similaridade usando Apache Lucene](https://reader035.vdocuments.site/reader035/viewer/2022081720/55941b391a28ab0a2c8b4674/html5/thumbnails/7.jpg)
Tokenização
• Interpreta o texto transformado em termos
• Exemplo
Pré-Processamento
Indexação Mineração
Tokenização 1
Normalização 2
Stopwords 3
Stemming 4
Pouco se aprende com a vitória, mas muito com a derrota.
[“Pouco”, “se”, “aprende”, “com”, “a”, “vitória”, “mas”, “muito”, “com”, “a”, “derrota”]
Texto:
Termos:
Pouco se aprende com
1 1 1
0 5 6 8 9 16 17 20
7
![Page 8: Extração de informações de texto e cálculo de similaridade usando Apache Lucene](https://reader035.vdocuments.site/reader035/viewer/2022081720/55941b391a28ab0a2c8b4674/html5/thumbnails/8.jpg)
Tokenização
• Diferentes formas de tokenização
Pré-Processamento
Indexação Mineração
Tokenização 1
Normalização 2
Stopwords 3
Stemming 4
Pouco se aprende com a vitória, mas muito com a derrota.
Pouco
Pouco se
Pouco se aprende
Pouco se aprende com
se
se aprende
se aprende com
se aprende com a
aprende
aprende com
aprende com a
aprende com a vitória
com
com a
com a vitória
a
a vitória
vitória
Shingle n=4
8
![Page 9: Extração de informações de texto e cálculo de similaridade usando Apache Lucene](https://reader035.vdocuments.site/reader035/viewer/2022081720/55941b391a28ab0a2c8b4674/html5/thumbnails/9.jpg)
Normalização
• Conversão do texto para letras minúsculas.
• Pode remover acentos, pontos, números, etc.
Pré-Processamento
Indexação Mineração
Tokenização 1
Normalização 2
Stopwords 3
Stemming 4
Pouco se aprende com a vitória, mas muito com a derrota.
[“pouco”, “se”, “aprende”, “com”, “a”, “vitoria”, “mas”, “muito”, “com”, “a”, “derrota”]
Texto:
9
![Page 10: Extração de informações de texto e cálculo de similaridade usando Apache Lucene](https://reader035.vdocuments.site/reader035/viewer/2022081720/55941b391a28ab0a2c8b4674/html5/thumbnails/10.jpg)
Remoção de Stopwords
• Remove as palavras comuns
• Sem significado relevante
• Preposição, pronome, etc.
• Depende do idioma
Pré-Processamento
Indexação Mineração
Tokenização 1
Normalização 2
Stopwords 3
Stemming 4
Pouco se aprende com a vitória, mas muito com a derrota. Texto:
[“pouco”, “aprende”, “vitoria”, “muito”, “derrota”]
[“pouco”, “se”, “aprende”, “com”, “a”, “vitoria”, “mas”, “muito”, “com”, “a”, “derrota”]
10
![Page 11: Extração de informações de texto e cálculo de similaridade usando Apache Lucene](https://reader035.vdocuments.site/reader035/viewer/2022081720/55941b391a28ab0a2c8b4674/html5/thumbnails/11.jpg)
Stemming
• Converte os termos em sua raiz gramatical
• Elimina plural
Pré-Processamento
Indexação Mineração
Tokenização 1
Normalização 2
Stopwords 3
Stemming 4
[“pouco”, “aprende”, “vitoria”, “muito”, “derrota”]
[“pouco”, “se”, “aprende”, “com”, “a”, “vitoria”, “mas”, “muito”, “com”, “a”, “derrota”]
Pouco se aprende com a vitória, mas muito com a derrota.
pouco pouc
aprende aprend
vitoria vitor
muito muit
derrota derrot
11
![Page 12: Extração de informações de texto e cálculo de similaridade usando Apache Lucene](https://reader035.vdocuments.site/reader035/viewer/2022081720/55941b391a28ab0a2c8b4674/html5/thumbnails/12.jpg)
Indexação
• Estabelece uma estrutura para os dados
• Índice invertido
• Vocabulário e ocorrência
• Banco de dados
Pré-Processamento
Indexação Mineração
Termos Documentos
Termo1 1
Termo2 1,2
Termo3 2
Termo4 3
Documento 1
Documento 2
Documento 3
12
![Page 13: Extração de informações de texto e cálculo de similaridade usando Apache Lucene](https://reader035.vdocuments.site/reader035/viewer/2022081720/55941b391a28ab0a2c8b4674/html5/thumbnails/13.jpg)
Indexação Pré-
Processamento Indexação Mineração
13
• 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
![Page 14: Extração de informações de texto e cálculo de similaridade usando Apache Lucene](https://reader035.vdocuments.site/reader035/viewer/2022081720/55941b391a28ab0a2c8b4674/html5/thumbnails/14.jpg)
Mineração
• Utilização algoritmos para extrair informações dos dados
estruturados
Pré-Processamento
Indexação Mineração
14
![Page 15: Extração de informações de texto e cálculo de similaridade usando Apache Lucene](https://reader035.vdocuments.site/reader035/viewer/2022081720/55941b391a28ab0a2c8b4674/html5/thumbnails/15.jpg)
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
![Page 16: Extração de informações de texto e cálculo de similaridade usando Apache Lucene](https://reader035.vdocuments.site/reader035/viewer/2022081720/55941b391a28ab0a2c8b4674/html5/thumbnails/16.jpg)
Analisadores
• Estabelece regras para realização do pré-processamento
• Alguns tipos de Analisadores
Pré-Processamento
Indexação Mineração
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
![Page 17: Extração de informações de texto e cálculo de similaridade usando Apache Lucene](https://reader035.vdocuments.site/reader035/viewer/2022081720/55941b391a28ab0a2c8b4674/html5/thumbnails/17.jpg)
Analisadores Pré-
Processamento Indexação Mineração
Reader Tokenizer TokenFilter TokenFilter Tokens
Analyzer
...
TokenFilter
StopFilter
LowerCase
Filter
Standard
Filter
Length
Filter
PorterStem
Filter
Shingle
Filter
17
![Page 18: Extração de informações de texto e cálculo de similaridade usando Apache Lucene](https://reader035.vdocuments.site/reader035/viewer/2022081720/55941b391a28ab0a2c8b4674/html5/thumbnails/18.jpg)
Analisadores Pré-
Processamento Indexação Mineração
Reader Tokenizer TokenFilter TokenFilter Tokens
Analyzer
...
TokenFilter
StopFilter
LowerCase
Filter
Standard
Filter
Length
Filter
PorterStem
Filter
Shingle
Filter
public final class MeuAnalisador extends Analyzer{
@Override
public TokenStream tokenStream(String fieldName, Reader reader)
{
TokenStream t = new WhitespaceTokenizer(Version.LUCENE_35, reader)
return new ShingleFilter(t, 4);
}
}
18
![Page 19: Extração de informações de texto e cálculo de similaridade usando Apache Lucene](https://reader035.vdocuments.site/reader035/viewer/2022081720/55941b391a28ab0a2c8b4674/html5/thumbnails/19.jpg)
Analisadores
• 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
Pré-Processamento
Indexação Mineração
19
![Page 20: Extração de informações de texto e cálculo de similaridade usando Apache Lucene](https://reader035.vdocuments.site/reader035/viewer/2022081720/55941b391a28ab0a2c8b4674/html5/thumbnails/20.jpg)
Indexação
• Cria arquivos estruturados que permitem o rápido acesso
as palavras.
• Índice Invertido
Pré-Processamento
Indexação Mineração
Termos Documentos
aprend 1
derrot 1,2
muit 1,3
pouc 1,2
vitor 1,5
20
![Page 21: Extração de informações de texto e cálculo de similaridade usando Apache Lucene](https://reader035.vdocuments.site/reader035/viewer/2022081720/55941b391a28ab0a2c8b4674/html5/thumbnails/21.jpg)
Indexação Pré-
Processamento Indexação Mineração
Field
Field
Field
Document
Index Writer Analyzer
21
![Page 22: Extração de informações de texto e cálculo de similaridade usando Apache Lucene](https://reader035.vdocuments.site/reader035/viewer/2022081720/55941b391a28ab0a2c8b4674/html5/thumbnails/22.jpg)
Indexação
• IndexWriter responsável por escrever no índice.
• IndexWriterConfig
Pré-Processamento
Indexação Mineração
IndexWriter(Directory dir, IndexWriterConfig config)
Métodos
addDocument(Document doc) Insere o documento no índice
close() Encerra o processo de indexação
dir Diretório onde o índice será escrito
config responsável por definir a versão do lucene e o analyzer a ser utilizado
IndexWriterConfig(Version matchVersion, Analyzer analyzer)
matchVersion Versão do lucene. Version.LUCENE_35
analyzer Analisador a ser utilizado
22
![Page 23: Extração de informações de texto e cálculo de similaridade usando Apache Lucene](https://reader035.vdocuments.site/reader035/viewer/2022081720/55941b391a28ab0a2c8b4674/html5/thumbnails/23.jpg)
Indexação
• Document
• Field
Pré-Processamento
Indexação Mineração
Field
Field
Field
Document
Field(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
Document()
Métodos
add(Fieldable field) Adiciona o field no documento
23
![Page 24: Extração de informações de texto e cálculo de similaridade usando Apache Lucene](https://reader035.vdocuments.site/reader035/viewer/2022081720/55941b391a28ab0a2c8b4674/html5/thumbnails/24.jpg)
Indexação
• BrazilianAnalyzer responsável por estabelecer as regras do pré-processamento.
Pré-Processamento
Indexação Mineração
BrazilianAnalyzer(Version matchVersion)
Directory 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));
matchVersion Versão do lucene. Version.LUCENE_35
24
Field
Field
Field
Index Writer Analyzer
![Page 25: Extração de informações de texto e cálculo de similaridade usando Apache Lucene](https://reader035.vdocuments.site/reader035/viewer/2022081720/55941b391a28ab0a2c8b4674/html5/thumbnails/25.jpg)
Busca Pré-
Processamento Indexação Mineração
• Encontra documentos que são relevantes para a
consulta.
• Rapidez e Classificação
Busca
Resultados
25
![Page 26: Extração de informações de texto e cálculo de similaridade usando Apache Lucene](https://reader035.vdocuments.site/reader035/viewer/2022081720/55941b391a28ab0a2c8b4674/html5/thumbnails/26.jpg)
Busca Pré-
Processamento Indexação Mineração
Query Parser Analyzer
Busca
Resultados
Consulta
Index
Searcher Resultados
Index Reader
26
![Page 27: Extração de informações de texto e cálculo de similaridade usando Apache Lucene](https://reader035.vdocuments.site/reader035/viewer/2022081720/55941b391a28ab0a2c8b4674/html5/thumbnails/27.jpg)
IndexSearcher implementa um buscador para o IndexReader.
Busca
Pré-Processamento
Indexação Mineração
Directory dir = FSDirectory.open(new File(“c://data”));
IndexReader reader = IndexReader.open(dir);
IndexSearcher searcher = new IndexSearcher(reader)
IndexReader responsável pela leitura do índice.
QueryParser parser = new QueryParser(Version.LUCENE_35, “field”,
analyzer)
QueryParser analisador da consulta.
27
![Page 28: Extração de informações de texto e cálculo de similaridade usando Apache Lucene](https://reader035.vdocuments.site/reader035/viewer/2022081720/55941b391a28ab0a2c8b4674/html5/thumbnails/28.jpg)
Query consulta analisada pelo QueryParser
Busca
Pré-Processamento
Indexação Mineração
Query query = parser.parse(“string de busca”);
TopDocs hits = searcher.search(q,100);
ScoreDoc[] scoreDocs = hits.scoreDocs;
Cálculo de similaridade entre a query e os documentos
1
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));
}
Exibindo o resultado
28
![Page 29: Extração de informações de texto e cálculo de similaridade usando Apache Lucene](https://reader035.vdocuments.site/reader035/viewer/2022081720/55941b391a28ab0a2c8b4674/html5/thumbnails/29.jpg)
Score
• Retorno do cálculo de similaridade entre a query e o
documento
Pré-Processamento
Indexação Mineração
Termo Descrição
tf(t in d) O número de vezes que o termo t ocorre no documento d
idf(t) Leva em consideração o número de documentos que contém o termo t
coord(q,d) Fração de todos os termos da consulta que o documento contém
queryNorm(q,d) Fator de normalização da consulta
t.getBoost() Privilegia o termo t na consulta q em tempo de busca
norm(t,d) Encapsula alguns fatores de boost em tempo de indexação
29
![Page 30: Extração de informações de texto e cálculo de similaridade usando Apache Lucene](https://reader035.vdocuments.site/reader035/viewer/2022081720/55941b391a28ab0a2c8b4674/html5/thumbnails/30.jpg)
Operadores
Consulta 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 titulo
titulo:extremo
–assunto:esporte Contém o termo extremo no campo titulo e que não contenha esporte no
campo assunto
titulo:extremo
AND NOT
assunto:sports
30
![Page 31: Extração de informações de texto e cálculo de similaridade usando Apache Lucene](https://reader035.vdocuments.site/reader035/viewer/2022081720/55941b391a28ab0a2c8b4674/html5/thumbnails/31.jpg)
Operadores
Consulta Encontra o documento que...
(agil OR extrema)
AND
metodologia
Contém metodologia e deve conter agil ou extrema, todos no campo
padrão (default field)
titulo:"junit in
action" Contém a frase “junit in action” no campo titulo
titulo:"junit
action"~5 Contém os termos junit e action com 5 posições um do outro, no campo
titulo
java* Contém termos que começam com java, tais como javaspaces,
javaservers
java~ Contém termo próximos ao termo java, como lava
31
![Page 32: Extração de informações de texto e cálculo de similaridade usando Apache Lucene](https://reader035.vdocuments.site/reader035/viewer/2022081720/55941b391a28ab0a2c8b4674/html5/thumbnails/32.jpg)
Atividade
1. Baixar o projeto com o esqueleto e os livros da bíblia na
forma de arquivos texto
2. Fazer a indexação da bíblia
3. Fazer a busca que mostra os versículos da Bíblia
correspondentes a consulta
Mateus 01.txt I Samuel 01.txt
Mateus 02.txt I Samuel 02.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 do
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.
...
Gênesis 01.txt
Obs. Cada arquivo possui um capítulo do livro
32
![Page 33: Extração de informações de texto e cálculo de similaridade usando Apache Lucene](https://reader035.vdocuments.site/reader035/viewer/2022081720/55941b391a28ab0a2c8b4674/html5/thumbnails/33.jpg)
Atividade
2. Fazer a indexação da bíblia
• Para permitir a busca por versículo, criar um document por
versículo
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 do
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.
...
Gênesis 01.txt livro
capitulo
versiculo
Document
Gênesis
01
1 No princípio criou Deus os céus e a
terra.
livro
capitulo
versiculo
Document
Gênesis
01
2 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.
*usar o nome do arquivo para preencher os campos
livro e capítulo
33
![Page 34: Extração de informações de texto e cálculo de similaridade usando Apache Lucene](https://reader035.vdocuments.site/reader035/viewer/2022081720/55941b391a28ab0a2c8b4674/html5/thumbnails/34.jpg)
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
![Page 35: Extração de informações de texto e cálculo de similaridade usando Apache Lucene](https://reader035.vdocuments.site/reader035/viewer/2022081720/55941b391a28ab0a2c8b4674/html5/thumbnails/35.jpg)
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