extração de informações de texto e cálculo de similaridade usando apache lucene

35
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

Upload: andre-luis-schwerz

Post on 01-Jul-2015

2.912 views

Category:

Education


0 download

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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