O documento descreve os processos de extração de informações de texto e cálculo de similaridade usando Apache Lucene, incluindo tokenização, normalização, remoção de stopwords, stemming, indexação e busca. É apresentado o fluxo completo desde a preparação dos dados até a recuperação dos resultados de uma consulta. Por fim, é proposta uma atividade prática de indexação e busca em textos da bíblia usando o framework Lucene.
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ção
Processamento
1 Tokenização
2 Normalização
3 Stopwords
4 Stemming
6
7. 1 Tokenização
Tokenizaçã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 20
Termos:
[“Pouco”, “se”, “aprende”, “com”, “a”, “vitória”, “mas”, “muito”, “com”, “a”, “derrota”]
7
8. 1 Tokenização
Tokenizaçã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
18. Analisadores
Pré-
Indexação Mineração
Processamento
Analyzer
Reader Tokenizer ... TokenFilter TokenFilter Tokens
public 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
21. Indexação
Pré-
Indexação Mineração
Processamento
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á escrito
config 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
• IndexWriterConfig
IndexWriterConfig(Version matchVersion, Analyzer analyzer)
matchVersion Versão do lucene. Version.LUCENE_35
analyzer Analisador a ser utilizado
22
23. Indexação
Pré-
Indexação Mineração
Processamento
Document
• Document Field
Document()
Field
Métodos
add(Fieldable field) Adiciona o field no documento Field
• Field
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
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 Writer
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));
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 Reader
Busca
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 QueryParser
Query 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
documento
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
30. 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 Contém o termo extremo no campo titulo e que não contenha esporte no
–assunto:esporte campo assunto
titulo:extremo
AND NOT
assunto:sports
30
31. Operadores
Consulta Encontra o documento que...
(agil OR extrema) Contém metodologia e deve conter agil ou extrema, todos no campo
AND padrão (default field)
metodologia
titulo:"junit in Contém a frase “junit in action” no campo titulo
action"
titulo:"junit Contém os termos junit e action com 5 posições um do outro, no campo
action"~5 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
32. 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
Obs. Cada arquivo possui um capítulo do livro
Gênesis 01.txt
I 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 do
I 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.txt
1 No princípio criou Deus os céus e a terra. capitulo 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. 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 Deus
livro 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