Using ontologies and NLP techniques to improve Health Information

Propaganda
Recuperação de Informação em Bases de Texto
Aula 3
1
Recuperação de Informação em Bases de Texto
• Construção dos índices
– Selecção dos documentos
– Identificação dos termos dos documentos
– Processamento dos termos: “normalização”
– Criação da estrutura de dados em que cada
termo está associado à lista dos documentos
onde ocorre.
2
Recuperação de Informação em Bases de Texto
• Selecção dos documentos
– “Granularidade” dos documentos a indexar
• Ficheiro
• Email
– mbox (vários emails)
– email com vários “attachments”
• tar/zip – vários ficheiros
• projecto
– latex
– java
3
Recuperação de Informação em Bases de Texto
• Selecção dos documentos
– Representação binária -> sequência de
caracteres
• Formatos:
– MS Word, Excel
– pdf
– html
• Língua (português; chinês, ...)
• “character set”
4
Recuperação de Informação em Bases de Texto
• Identificação dos termos
– Caracteres (in)válidos
• espaços: “Monte Novo” ?
• sinais de pontuação: “S.L.B” ?
• hífen: “guarda-chuva”;
• apóstrofo: “Vozes d'Africa”
– Números e datas
• 26/3/2009
5
Recuperação de Informação em Bases de Texto
• Selecção de termos
– Exclusão de termos comuns: “stop-words”
• artigos, preposições, etc.
• termos mais frequentes nos documentos
– Problemas
• “Presidente da República” vs “Presidente
AND República” vs “Presidente
República”
• “comboio para Lisboa” vs “comboio de
Lisboa”
6
Recuperação de Informação em Bases de Texto
• Selecção de termos
– Sistemas actuais recorrem a uma lista
muito reduzida de stopwords ou não usam
stopwords!
7
Recuperação de Informação em Bases de Texto
• Normalização de termos
– SLB vs S.L.B vs Sport Lisboa e Benfica
– “re-análise” vs “reanálise”
– “carácter” vs “caracter”
– “acto” vs “ato”
– “texto” vs “textos”
– “(ele) fugiu” vs “(ele ia a) fugir” vs “(ele)
fugia (quando)”
– “carro” vs “automóvel”
8
Recuperação de Informação em Bases de Texto
• Normalização de termos
– Criação de classes de equivalências:
• transformar em minúsculas
• retirar acentos
• usar sinónimos
• usar informação linguística
– singulares/plurais; formas verbais
9
Recuperação de Informação em Bases de Texto
• Normalização de termos
– Lematização
• carro, carros -> carro
• fugiu, fugiram, fugia -> fugir
– Implica conhecimento linguístico,
normalmente acesso a um dicionário
10
Recuperação de Informação em Bases de Texto
• Normalização de termos
– “Stemming” / radicalização
• carro, carros -> carr
• fugiu, fugiram, fugia -> fugi
– Abordagem heurística que trunca as
palavras para obter o seu “radical”
– Problemas:
• carro, carroça, carrinha, ...
11
Recuperação de Informação em Bases de Texto
• Normalização de termos
– Duas abordagens possíveis:
• Indexar pelo representante da classe de
equivalência
– carro, automóvel -> carro
• Expandir a pesquisa
– carro -> carro OR automóvel
12
Recuperação de Informação em Bases de Texto
• Criação de índices
– Operações:
• Inserção de um termo
• Inserção de um “hit” -- termo num
documento
• Pesquisa (operação crítica)
– Obtenção de lista de “hits”
– Intersecção de lista de “hits”
– Reunião de lista de “hits”
13
Recuperação de Informação em Bases de Texto
• Criação de índices
– Como optimizar as operações de pesquisa?
• Acesso ao dicionário
– Tabela de hash, b-trees, etc.
• Operações sobre listas
– operação mais comum e mais crítica:
intersecção
14
Recuperação de Informação em Bases de Texto
• Criação de índices
– Intersecção: apontadores extra
128
41
2
4
8
41
64
128
31
11
1
48
2
3
8
11
17
21
31
15
Recuperação de Informação em Bases de Texto
• Criação de índices
– Intersecção
• Criação de apontadores extra (“skip
pointers”) para permitir saltos “maiores”
• Quantos apontadores extra?
– Heurística: sqrt(length(L))
• Necessário alterar algoritmo de
intersecção de listas!
16
Recuperação de Informação em Bases de Texto
• intersecção_sem_skip_pointers(L1, L2)
• L = {}
• while L1 <> nil and L2 <> nil
– if (docID(first(L1)) = docID(first(L2)))
» add(L, first(L1)); L1++; L2++
– else if (docID(first(L1)) < docID(first(L2)))
» L1++
– else L2++
• return L
17
Recuperação de Informação em Bases de Texto
• intersecção_com_skip_pointers(L1, L2)
• L = {}
• while L1 <> nil and L2 <> nil
– if (docID(first(L1)) = docID(first(L2)))
» add(L, first(L1)); L1++; L2++
– else if (docID(first(L1)) < docID(first(L2)))
» if hasSkip(first(L1)) and
docID(skip(first(L1)))<docID(first(L2))
L1 = skip(first(L1));
» else L1++
– else ... (semelhante para L2)
• return L
18
Recuperação de Informação em Bases de Texto
• Como lidar com expressões multi-palavra?
– “Câmara Municipal”
• Solução:
– Índices bi-palavra
• indexar todas as sequências de duas
palavras dos textos
19
Recuperação de Informação em Bases de Texto
• Como lidar com expressões multi-palavra?
– “Câmara Municipal de Évora”
• Solução (parcial):
– Conjunção de índices bi-palavra
• “câmara municipal” and “municipal de” and
“de évora”
– A solução encontrada não é equivalente à
pergunta inicial!
• “O Presidente da Câmara Municipal de
Lisboa saiu de Évora às 14:00.”
20
Recuperação de Informação em Bases de Texto
• Como lidar com expressões multi-palavra?
– “Câmara Municipal de Évora”
• Solução extendida:
– Índices bi-palavra de nomes próprios
– “Câmara Municipal de Évora” -> “câmara
municipal” and “municipal évora”
– Resolve o problema anterior
• “O Presidente da Câmara Municipal de
Lisboa saiu de Évora às 14:00.”
– Falha para “municipal évora”
21
Recuperação de Informação em Bases de Texto
• Como lidar com expressões multi-palavra?
– “Câmara Municipal de Évora”
• Solução mais geral:
– Índices posicionais
• Dicionário contém:
– termo; nº docs que contêm o termos;
» doc1: pos1, pos2, ...
» doc2: pos1, pos2
» ...
22
Recuperação de Informação em Bases de Texto
• intersecção_pos(L1, L2, k) // termos a distância<k
• L = {}
• while L1 <> nil and L2 <> nil
– if (docID(first(L1)) = docID(first(L2)))
» add(L, merge(first(L1),first(L2),k));
» L1++; L2++
– else if (docID(first(L1)) < docID(first(L2)))
» L1++
– else L2++
• return L
23
Recuperação de Informação em Bases de Texto
• Permite:
– Expressões multi-palavra
• “câmara municipal”
– “câmara” AND/k=1 “municipal
– Operadores de proximidade
• “câmara” NEAR “municipal”
– “câmara” AND/k=5 “municipal
24
Recuperação de Informação em Bases de Texto
• Índices posicionais
– Listas no dicionário com um elemento por cada
ocorrência nos documentos (com a sua posição)
• Aumento na dimensão das estruturas de
dados e nos tempos de resposta!
25
Recuperação de Informação em Bases de Texto
• Abordagem com melhores resultados:
– Mista
• Índices bi-palavra
• Índices posicionais
– Bom desempenho para:
• “Cavaco Silva”
• “Câmara Municipal de Vila Real de Santo
António”
• Suporta operadores de proximidade
26
Recuperação de Informação em Bases de Texto
• Dicionário
– Que estrutura de dados?
• Tabela de hash
• Árvores
27
Recuperação de Informação em Bases de Texto
• Dicionário – estrutura de dados
– Tabela de hash
• Vantagens
– Acesso – O(1)
• Desvantagens
– Pesquisa por prefixo/sufixo
– Ordenação
28
Recuperação de Informação em Bases de Texto
• Dicionário – estrutura de dados
– B-tree
• Vantagens
– Pesquisa por prefixo
• Desvantagens
– Acesso menos eficiente – O(log N)
29
Recuperação de Informação em Bases de Texto
• Dicionário – estrutura de dados: árvore
– Operadores “wildcard”
• “fug*”
– todos os termos >= “fug” e < “fuh”
• “*mente”
– solução: árvore duplicada com termos na
sua forma inversa:
» “mente” -> “etnem”
30
Recuperação de Informação em Bases de Texto
• Dicionário – estrutura de dados: árvore
– Operadores “wildcard”
• “in*mente”
– intersecção dos termos
» “in*” e “*mente”
– Pouco eficiente, dado implicar
intersecção de conjuntos
31
Recuperação de Informação em Bases de Texto
• Dicionário – estrutura de dados: árvore
– Operadores “wildcard”
• Solução mais eficiente:
– Para cada termo, indexar todas as suas
permutações/rotações.
» Ex: jogo -> jogo$ ; ogo$j ; go$jo ;
o$jog
» Pesquisa: j*go -> go$j* ;
32
Recuperação de Informação em Bases de Texto
• Dicionário – estrutura de dados: árvore
– Operadores “wildcard”
• Outra solução eficiente:
– Criar índices de bi-gramas (sequências de
2 caracteres)
» Ex: “jogo” -> “$j”; “jo”; “og”; “go”; o$”
» Construir um índice de bigramas para
termos do dicionário:
» “$j” -> janela; jogo; ...
» “jo” -> jogo; anjo; ...
» ...
33
Recuperação de Informação em Bases de Texto
• Dicionário – estrutura de dados: árvore
– Operadores “wildcard”
• Outra solução eficiente:
– Pesquisa: mam*
– Processamento:
» “$m” and “ma” and “am”
» Filtrar resultados incorrectos:
» “mimam” não é correcto!
34
Recuperação de Informação em Bases de Texto
• Em resumo:
– O suporte a pesquisas com expressões mutipalavra e o uso de operadores mais complexos,
como os de proximidade e wildcards, tem um
custo em termos de complexidade das
estruturas de dados, algoritmos e desempenho
(temporal) dos sistemas de RI.
35
Download