Centro de Informática – Universidade Federal da Paraíba
Ordenação e Recuperação de Dados
Aula 3: Dicionários e Recuperação
Tolerante
Prof. Alexandre Duarte - http://alexandre.ci.ufpb.br
1
Agenda
❶ Revisão
❷ Dicionários
❸ Consultas com coringas
❹ Correção ortográfica e distância de edição
2
Agenda
❶ Revisão
❷ Dicionários
❸ Consultas com coringas
❹ Correção ortográfica e distância de edição
3
Problemas com a tokenization
Quais são os delimitadores ?
Espaços ?
Apóstrofos?
Hifens?
As vezes eles delimitam. As vezes não.
Muitas linguagens não tem espaços em braco (e.g., Chinês)
Algumas linguagens (Alemão, Holandês e Sueco, por
exemplo) não tem espaços em substantivos compostos
(Lebensversicherungsgesellschaftsangestellter)
4
Problemas com classes de equivalências
Um termo é uma classe de equivalência de termos.
Como definimos classes de equivalência?
Números (3/20/91 vs. 20/3/91)
Maiúsculas e minúsculas
Análise morfológica
Problemas com classes de equivalência em diferentes
idiomas
Finlandês: um único verbo pode ter até 12.000 formas
diferentes
Como lidar com acentos, tremas, etc.
5
Índices posicionais
Lista de postings em um índice não posicional: cada posting é
apenas um identificador de documento
Lista de postings em um índice posicional: cada posting é um
identificador de documento e uma lista de posições
Consulta de exemplo: “to1 be2 or3 not4 to5 be6”
TO, 993427:
‹ 1: ‹7, 18, 33, 72, 86, 231›;
2: ‹1, 17, 74, 222, 255›;
4: ‹8, 16, 190, 429, 433›;
5: ‹363, 367›;
7: ‹13, 23, 191›; . . . ›
BE, 178239:
‹ 1: ‹17, 25›;
4: ‹17, 191, 291, 430, 434›;
5: ‹14, 19, 101›; . . . › Documento 4! 7
Índices posicionais
Com um índice posicional podemos responder consultas por
frases
Com um índice posicional podemos responder consultas por
proximidade
8
A seguir
Recuperação tolerante: O que fazer se não há nenhum
documento que satisfaça totalmente a consulta
Consultas com coringas
Correção ortográfica
9
Agenda
❶ Revisão
❷ Dicionários
❸ Consultas com coringas
❹ Correção ortográfica e distância de edição
10
Dicionários
Dicionário: a estrutura de dados utilizada para armazenar o
vocabulário de termos
13
Dicionário como um array de entradas de
tamanho fixo
Para cada termo, preciso armazenar os seguintes itens:
Frequência de documentos
Apontador para a lista de postings
Assuma por enquanto que podemos armazenar esta
informação em uma entrada de tamanho fixo
Assuma que armazenamos estas entradas em um array
14
Dicionário como um array de
entradas de tamanho fixo
Espaço necessário: 20 bytes 4 bytes 4 bytes
Como localizar o termo qi neste array em tempo de consulta?
Ou seja: que estrutura de dados nós utilizamos para localizar em
que entrada qi está armazenado?
15
Estruturas de dados para localização de
termos
Duas classes principais de estruturas de dados: hashes e
árvores
Alguns sistemas utilizam hashes outros utilizam árvores.
Critério para escolher entre usar hash ou usar árvore:
Há um número fixo de termos ou a coleção vai continuar a
crescer ?
Quais são as frequências relativas de acesso para cada um dos
termos?
Qual a estimativa para a quantidade de termos no sistema?
16
Hashes
Cada termo do vocabulário é mapeado (hashed) em um número inteiro.
Tentar evitar colisões
No momento da consulta fazer o seguinte: mapear o termo da consulta,
resolver eventuais colisões, localizar a entrada no array
Pros: Acesso com hash é mais rápido que acesso em árvore.
Acesso em tempo constante.
Cons
Impossível encontrar variações simples (resume vs. résumé)
Impossível fazer busca por prefixo (todos os termos começando com
automat)
É preciso remapear todos os termos periodicamente se o vocabulário
continuar a crescer
17
Árvores
Resolvem o problema da busca por prefixos (encontrar todos
os temos que começam com automat).
Modelo mais simples: árvore binária
Consulta é ligeiramente mais lenta que utilizando hash :
O(logM), onde M é o tamanho do vocabulário.
O(logM) só vale para árvores balanceadas.
Re-balancear uma árvore é uma operação cara.
Árvores B diminuem um pouco o problema de re-
balanceamento.
Definição de uma árvore B: cada nó interno tem um número
de filhos no intervalo [a, b] onde a, b são números inteiros
positivos apropriados e.g., [2, 4]. 18
Agenda
❶ Revisão
❷ Dicionários
❸ Consultas com coringas
❹ Correção ortográfica e distância de edição
21
Consultas com coringas
mon*: encontrar todos os documentos contendo algum
termo começando com mon
Fácil se utilizamos um dicionário com Árvore B: recuperar
todos os termos t no intervalo: mon ≤ t < moo
*mon: encontrar todos os documentos contendo algum
termo terminando com mon
Manter uma árvore adicional com os termos em ordem inversa
Então recuperar todos os termos t no intervalo: nom ≤ t < non
Resultado: Um conjunto de termos que atendem uma
consulta com coringa
Basta então recuperar os documentos que contem algum
desses termos
22
Como lidar com * no meio de um termo
Exemplo: m*nchen
Poderíamos procurar por m* e *nchen na Árvore B e depois achar a
interseção dos dois conjuntos.
Muito caro
Alternativas:
Índice com permuterm
Rotacionar o token para o * sempre ficar no final
Multiplica por 4 o tamanho do índice
Índices com k-grams
Enumera todas as sequências de k caracteres no termo
Ocupa menos espaço que um índice permuterm
Requer uma etapa de filtragem posterior de falsos positivos
Não entraremos em detalhes sobre estas técnicas 23
Agenda
❶ Revisão
❷ Dicionários
❸ Consultas com coringas
❹ Correção ortográfica e distância de edição
24
Correção ortográfica
Dois usos principais
Corrigir documentos durante indexação
Corrigir consultas do usuário
Dois métodos diferentes para correção ortográfica
Correção ortográfica de palavras isoladas
Checa cada palavra individualmente
Não vai corrigir erros que resultem em palavras escritas
corretamente, e.g., an asteroid that fell form the sky
Correção ortográfica sensível ao contexto
Checa as palavras ao redor
Pode corrigir o form/from na frase acima
25
Corrigindo documentos
Não estamos interessados em correção ortográfica de
documentos de forma interativa (e.g., MS Word) neste curso.
Em Recuperação da Informação, correção ortográfica é
utilizada principalmente para documentos escaneados
utilizando OCR (OCR = optical character recognition)
A filosofia geral da Recuperação da Informação é: não altere
os documentos.
26
Corrigindo consultas
Primeiro: correção ortográfica de palavras isoladas
Premissa 1: Exista uma lista de “palavras corretas” na qual pode ser
encontrada a correção para a palavra errada.
Premissa 2: Temos uma forma de calcular a distancia entre uma palavra
incorreta e uma palavra correta.
Uma algoritmo simples de correção ortográfica: retorne a palavra
“correta” que tenha a menor distância para a palavra errada..
Exemple: infromação → informação
Para esta lista de palavras corretas podemos utilizar o próprio vocabulário
que contem todas as palavras que ocorrem na coleção de documentos
Por que isso não seria recomendado?
27
Alternativas a utilizar o vocabulário de
termos
Um dicionário padrão (Michaelis, Aurélio, etc)
Um dicionário específico para sistemas de recuperação da
informação
28
Distância de edição
A distância de edição entre dois strings s1 e s2 é o menor
número de operação básicas que transforma s1 em s2.
Distância de Levenshtein: As operações básicas admissíveis
são inserir, remover e substituir um caractere
Distância de Levenshtein dog-do: 1
Distância de Levenshtein cat-cart: 1
Distância de Levenshtein cat-cut: 1
Distância de Levenshtein cat-act: 2
29
Significado de cada célula de uma matriz de
Levenshtein
Custo de chegar aqui a partir Custo de chegar aqui a partir
do vizinho superior esquerdo de meu vizinho de cima
(copia ou substituição) (remoção)
Custo de chegar aqui a partir O Valor mínimo destes três
do meu vizinho da esquerda possíveis movimentos; a
(inserção) forma mais barata de chegar
aqui
32
Usando a distância de edição para correção
ortográfica
Dada uma consulta, primeiro enumere todas a sequencias de
caracteres que tenham uma dada distância de edição de cada
termo incorreto
Encontre a interseção dessa lista com a lista de termos
corretos
Sugira termos na interseção para o usuário.
33
Exercício
❶ Encontre a matriz de distância de Levenshtein para OSLO –
SNOW
❷ Quais são as operações de edição de Levenshtein que
transformam cat into catcat?
34
Correção ortográfica sensível ao contexto
Nosso exemplo foi: an asteroid that fell form the sky
Como corrigir?
Uma dica: Correção ortográfica baseada em hits
Recupere os termos “corretos” próximos a cada termo da consulta
flew form munich: flea para flew, from para form e munch para
munich
Agora tente todas as possíveis frases resultantes variando uma
palavra por vez
Tentar “flea form munich”
Tentar “flew from munich”
Tentar “flew form munch”
A consulta correta “flew from munich” terá o maior número de
resultados (hits).
80
Correção ortográfica sensível ao contexto
A abordagem baseada em hits que acabamos de citar não é
muito eficiente.
Altenativas mais eficientes se baseiam em coleções de
consultas e não de documentos
81
Questões gerais sobre correção ortográfica
Interface do usuário
automática vs. sugestão de correção
Did you mean só funciona para uma sugestão.
Como lidar com múltiplas possibilidades de correção?
Tradeoff: simplicidade vs. poder
Custo
Correção ortográfica é um processo potencialmente custoso.
Evitar realizar a cada consulta?
Talvez apenas para consultas que resultem em poucos documentos.
Chute: A correção ortográfica das principais ferramentas de busca é
eficiente o suficiente para poder ser executada a cada consulta.
82