Upload
internet
View
104
Download
0
Embed Size (px)
Citation preview
Universidade Federal de Minas GeraisDepartamento de Ciência da Computação
Compressão de TextosCompressão de Textos
Juliano Palmieri Lage
2/28Implementação de Sistemas de Informação para Web
Por que usar compressão?Por que usar compressão?
Economia de espaço
Economia de rede
Velocidade de acesso
Processamento eficiente
3/28Implementação de Sistemas de Informação para Web
Conceitos Básicos...Conceitos Básicos...
Modelagem– Estática– Semi-estática– Adaptativa
Codificação– Dicionário– Estatística
4/28Implementação de Sistemas de Informação para Web
Conceitos BásicosConceitos Básicos
Desempenho dos métodos– Taxa de Compressão
• (1 – n/u) x 100
– Bits por caracter•cn/u
– Razão de compressão• (n/u) x 100
5/28Implementação de Sistemas de Informação para Web
Exemplos de CompressãoExemplos de Compressão
Prefixos de Redundância Mínima– Huffman
Dicionário– LZ77, LZ78
– Gzip, Compress, bzip2
Codificação Aritimética
6/28Implementação de Sistemas de Informação para Web
Huffman com PalavrasHuffman com Palavras
Integração com RI
Modelo Sem-Espaços
Duas passagens pelo texto:
– Coleta de estatísticas
– Codificação
7/28Implementação de Sistemas de Informação para Web
Exemplo...Exemplo...
“Para cada rosa rosa, uma rosa é uma rosa”
Símbolos– {“para”, “cada”, ”rosa”, “,□”,
“uma”, “é”}Freqüências
– 1, 1, 4, 1, 2, 1
8/28Implementação de Sistemas de Informação para Web
Exemplo...Exemplo...
para:1 cada:1 rosa:4 , □:1 uma:2 é:1
para:1 cada:1
20 1
rosa:4 , □:1 uma:2 é:1
9/28Implementação de Sistemas de Informação para Web
Exemplo...Exemplo...
para:1 cada:1
20 1
rosa:4 , □:1 uma:2é:1
20 1
para:1 cada:1
20 1
, □:1 é:1
20 1
4
rosa:4 uma:2
10
10/28Implementação de Sistemas de Informação para Web
Exemplo...Exemplo...
para:1 cada:1
20 1
, □:1 é:1
20 1
4
rosa:4
uma:2
6
0
0 1
1
11/28Implementação de Sistemas de Informação para Web
ExemploExemplo
para:1 cada:1
20 1
, □:1 é:1
20 1
4
rosa:4
uma:2
6
0
0 1
1
0 1
10
12/28Implementação de Sistemas de Informação para Web
Codificação de HuffmanCodificação de Huffman
Árvore Canônica
Abordagem da árvore
– Trivial
– Ineficiente
Comprimento dos códigos
13/28Implementação de Sistemas de Informação para Web
Algoritmo Eficiente...Algoritmo Eficiente...
Recebe como entrada um vetor
A com as freqüências ordenadas
(não-crescente).
Saída vetor com comprimento
dos códigos (1, 2, 4, 4, 4, 4)
14/28Implementação de Sistemas de Informação para Web
Algoritmo EficienteAlgoritmo Eficiente
Manipulação de vários vetores
logicamente distintos in situ
Divide-se em 3 fases:
– Combinação dos nós
– Profundidade dos nós internos
– Comprimento dos códigos
15/28Implementação de Sistemas de Informação para Web
Primeira Fase...Primeira Fase...
Direita para esquerdaFreqüência é mantida até nó ser
processadoNão precisa de apontador para
pais de nós folha– (0,1,2,3,3) -> (1,2,4,4,4,4)
16/28Implementação de Sistemas de Informação para Web
Primeira fase...Primeira fase...
void calculoHuffman(A, n) { r = n; s = n; for (t = n; t >= 2; t--){ /* Procura posicao */ if (s < 1 || (r > t && A[r] < A[s])){/* No interno */ A[t] = A[r]; A[r] = t; r--; } else { /* No-folha */ A[t] = A[s]; s--; } /* Atualiza Frequencias */ if (s < 1 || (r > t && A[r] < A[s])){ A[t] += A[r]; A[r] = t; r--; } else { A[t] += A[s]; s--; } }
17/28Implementação de Sistemas de Informação para Web
Segunda fase...Segunda fase...
Esquerda para direitaProfundidade dos nós internos
– Raiz = 0– Filhos = Pai+1
18/28Implementação de Sistemas de Informação para Web
Segunda FaseSegunda Fase
{...}A[2] = 0; for (t = 3; t <= n; t++) A[t] = A[A[t]] + 1;
{...}
19/28Implementação de Sistemas de Informação para Web
Terceira Fase...Terceira Fase...
Esquerda pra direitad indica nós disponíveis no nível
h u indica nós utilizados no nível h
20/28Implementação de Sistemas de Informação para Web
Terceira FaseTerceira Fase
d = 1; u = 0; h = 0; r = 2; t = 1; while (d > 0){ while (r <= n && A[r] == d) { u++; r++; } while (d > u) { A[t] = h; t++; d--; } d = 2 * u; h++; u = 0; }
21/28Implementação de Sistemas de Informação para Web
Códigos Canônicos...Códigos Canônicos...
Comprimentos dados pelo algoritmo de Huffman
Códigos de um mesmo comprimento são inteiros consecutivos
22/28Implementação de Sistemas de Informação para Web
Códigos CanônicosCódigos Canônicos
Compressão baseada em duas tabelas de tamanho L
Base: primeiro código do nível
Offset: índice da primeira palavra do nível
23/28Implementação de Sistemas de Informação para Web
CodificaçãoCodificação
Recebe o índice da palavra como parâmetro
Exemplo: 4 (“cada”)
codifica(int i){ l = 1; while (i >= offset[l+1]) l++; codigo = i - offset[l] + base[l]; Escreve(codigo, l);}
24/28Implementação de Sistemas de Informação para Web
DecodificaçãoDecodificação
Retorna o índice da palavra
Exemplo: 1100 (“para”)
int decodifica(){ l = 1; codigo = leBit(entrada); while ((codigo << 1) >= base[l+1]){ codigo <<=1; codigo += leBit(entrada); l++; } return codigo - base[l] + offset[l];}
25/28Implementação de Sistemas de Informação para Web
Huffman com Huffman com BytesBytes
Huffman Pleno– 0x70 0x71 0x4f | 0x71 0x4f
Huffman Sincronizado– 0xf0 0x71 0x4f | 0xf1 0x4f
26/28Implementação de Sistemas de Informação para Web
Pesquisa em Texto Pesquisa em Texto ComprimidoComprimido Casamento exato:
– Busca no vocabulário– Procura direta com padrão comprimido
Casamento aproximado:– Busca aproximada no vocabulário– Marca-se palavras encontradas– Percorre-se o arquivo comprimido e
analisa se chegou em uma palavra marcada
27/28Implementação de Sistemas de Informação para Web
Casamento AproximadoCasamento Aproximado
Máscara de bitsAutômato não-determinista
uma ro* rosa
28/28Implementação de Sistemas de Informação para Web
Dúvidas?Dúvidas?Dúvidas?Dúvidas?