Universidade Federal de Minas Gerais Departamento de Ciência da Computação Compressão de Textos...

Preview:

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?