Upload
andre-luis-schwerz
View
2.912
Download
0
Embed Size (px)
DESCRIPTION
Apresentação didática sobre conceitos teóricos e práticos do uso do Apache Lucene. Por fim, uma atividade é proposta.
Citation preview
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
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
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
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
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
Extração de Informações de Texto
Pré-Processamento
Indexação Mineração
Tokenização 1
Normalização 2
Stopwords 3
Stemming 4
6
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
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
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
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
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
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
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
Mineração
• Utilização algoritmos para extrair informações dos dados
estruturados
Pré-Processamento
Indexação Mineração
14
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
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
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
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
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
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
Indexação Pré-
Processamento Indexação Mineração
Field
Field
Field
Document
Index Writer Analyzer
21
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
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
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
Busca Pré-
Processamento Indexação Mineração
• Encontra documentos que são relevantes para a
consulta.
• Rapidez e Classificação
Busca
Resultados
25
Busca Pré-
Processamento Indexação Mineração
Query Parser Analyzer
Busca
Resultados
Consulta
Index
Searcher Resultados
Index Reader
26
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
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
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
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
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
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
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
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
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