Recuperação de Informação em Bases de Texto
Aula 4
1
Recuperação de Informação em Bases de Texto
• Correcção de erros:
– Nos documentos
– Nas pesquisas
– Palavra a palavra
• análise ortográfica
– “siêntifico” -> “ciêntifico”
– Na contexto da frase ou expressão
• análise sintáctica e semântica
– “O concelho científico reuniu...” -> “O
conselho científico reuniu...
2
Recuperação de Informação em Bases de Texto
• Correcção de erros:
– Metodologia para as pesquisas:
• Corrigir automaticamente e de uma forma
“transparente” para o utilizador;
• Interagir com o utilizador e propôr
alternativas
3
Recuperação de Informação em Bases de Texto
• Correcção de erros:
– Metodologia:
• Necessário existir um léxico de palavras
“correctas”:
– dicionário externo
– palavras existentes em colecções de
dados (web...)
4
Recuperação de Informação em Bases de Texto
• Correcção de erros:
– Metodologia:
• Dada uma palavra e um léxico obter uma
lista das palavras mais “próximas” dessa
palavra:
– distância Levenshtein
– distância “pesada”
– n-gramas comuns
• Normalmente, calcula-se a lista das palavras
dos léxico a uma distância menor do que “k”
da palavra da pesquisa
5
Recuperação de Informação em Bases de Texto
• Correcção de erros:
– distância Levenshtein
• nº mínimo de operações (sobre caracteres)
necessário para converter uma palavra na
outra:
– inserções; remoções; alterações; trocas
de posição
• Ex:
– siêntifico -> ciêntifico – 1 (alteração)
– ciêntiifco -> ciêntifico – 2 (alteração)
– ciêntiifco -> ciêntifico – 1 (troca)
6
Recuperação de Informação em Bases de Texto
• Correcção de erros:
– distância Levenshtein
• Implementação
– O(n1 * n2), sendo n1 e n2 o tamanho das
duas palavras (s1 e s2) a calcular a
distância
– Recorre a programação dinâmica e
necessita de uma matriz de n1*n2
inteiros.
– m[i,j] -> distância entre os primeiros i
caracteres de s1 e os primeiros j
caracteres de s2
7
Recuperação de Informação em Bases de Texto
• distância Levenshtein(s1, s2) =
– int m[strlen(s1),strlen(s2)]; // inicializado a 0;
– for i = 1 to strlen(s1) do m[i,0] = i;
– for j = 1 to strlen(s2) do m[0,j] = j;
– for i = 1 to strlen(s1)
• for j = 1 to strlen(s2)
– m[i,j] = min(m[i-1, j]+1, m[i, j-1]+1,
m[i-1,j-1]+(s1[i]==s2[j]?0:1));
– return(m[strlen(s1),strlen(s2)]
8
Recuperação de Informação em Bases de Texto
""
""
p
r
a
t
o
g
0
1
2
3
4
5
a
1
t
2
a
3
s
4
5
9
Recuperação de Informação em Bases de Texto
""
""
p
r
a
t
o
g
0
1
1 2,1,2
2
3
4
5
a
t
2
a
3
s
4
5
10
Recuperação de Informação em Bases de Texto
""
""
p
r
a
t
o
g
0
1
2
3
4
5
a
1
2
1 2,2,3
t
a
3
s
4
5
11
Recuperação de Informação em Bases de Texto
""
""
p
r
a
t
o
g
0
1
1
1
2 3,2,2
3
4
5
a
t
2
2
a
3
s
4
5
12
Recuperação de Informação em Bases de Texto
""
""
p
r
a
t
o
g
0
1
2
3
4
5
a
1
2
1
2
2 3,2,3
t
a
3
s
4
5
13
Recuperação de Informação em Bases de Texto
""
""
p
r
a
t
o
g
0
1
2
3
4
5
a
1
1
2
3
4
5
t
2
2
2
2
3
4
a
3
3
3
3
2
3
s
4
4
4
3
3
3
5
5
5
4
4
4
14
Recuperação de Informação em Bases de Texto
• Correcção de erros:
– distância “pesada”
• o peso das operações depende dos
caracteres envolvidos:
– a troca de um “m” por um “n” tem um
peso menor do que um “m” por um “a”
• implementação semelhante à distância de
Levenshtein, com adaptações para ter em
conta o peso das operações.
15
Recuperação de Informação em Bases de Texto
• Correcção de erros:
– n-gramas comuns
• Fase 0: Criar um índice “n-gramas ->
termos” que, para cada n-grama, aponta
para a lista das palavras do dicionário que
contêm aquele n-grama;
• Fase 1: Identificar todos os n-gramas da
palavra da pesquisa;
• Fase 2: Usar o índice “n-gramas -> termos”
para obter todas as palavras do dicionário
que têm um n-grama em comum com a
palavra da pesquisa
16
Recuperação de Informação em Bases de Texto
• Correcção de erros:
– n-gramas comuns
• Fase 3: Seleccionar as palavras do dicionário
que têm mais n-gramas comuns com a
palavra da pesquisa.
17
Recuperação de Informação em Bases de Texto
• Correcção de erros:
– n-gramas comuns
• Como definir o valor a partir do qual as
palavras estão próximas?
– Coeficiente Jaccard
» nº de n-gramas comuns / (nº de ngramas distintos)
18
Recuperação de Informação em Bases de Texto
• Correcção de erros:
– n-gramas comuns
• Exemplo, com bigramas:
– concelho -> $c; co; on; nc; ce; el; lh; ho;
o$
– conselho -> $c; co; on; ns; se; el; lh; ho;
o$
– comcelho -> $c; co; om; mc; ce; el; lh; ho;
o$
19
Recuperação de Informação em Bases de Texto
• Correcção de erros:
– n-gramas comuns
• Exemplo, com bigramas:
– concelho -> $c; co; on; nc; ce; el; lh; ho;
o$
– comcelho -> $c; co; om; mc; ce; el; lh; ho;
o$
– 7 bigramas em comum; 4 diferentes
– coeficiente de Jaccard = 7 / 11 = 0.63...
20
Recuperação de Informação em Bases de Texto
• Correcção de erros:
– n-gramas comuns
• Exemplo, com bigramas:
– conselho -> $c; co; on; ns; se; el; lh; ho;
o$
– comcelho -> $c; co; om; mc; ce; el; lh; ho;
o$
– 6 bigramas em comum; 6 diferentes
– coeficiente de Jaccard = 6 / 12 = 0.5
21
Recuperação de Informação em Bases de Texto
• Correcção de erros:
– No contexto de uma frase ou expressão:
• Obter lista de palavras “próxima” para cada
palavra da expressão
– “concelho científico”
» concelho -> concelho, conselho
» científico -> científico
22
Recuperação de Informação em Bases de Texto
• Correcção de erros:
– No contexto de uma frase ou expressão:
• Calcular combinações
– concelho científico
– conselho científico
23
Recuperação de Informação em Bases de Texto
• Correcção de erros:
– No contexto de uma frase ou expressão:
• Calcular combinações
– concelho científico
– conselho científico
24
Recuperação de Informação em Bases de Texto
• Correcção de erros:
– No contexto de uma frase ou expressão:
• Seleccionar a expressão com maior número
de “hits”!
– concelho científico – X hits
– conselho científico – Y > X
• Assume texto do corpus maioritariamente
correcto!
25
Download

Correcção de erros