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

28
Universidade Federal de Minas Gerais Departamento de Ciência da Computação Compressão de Textos Compressão de Textos Juliano Palmieri Lage

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

Page 1: Universidade Federal de Minas Gerais Departamento de Ciência da Computação Compressão de Textos Juliano Palmieri Lage.

Universidade Federal de Minas GeraisDepartamento de Ciência da Computação

Compressão de TextosCompressão de Textos

Juliano Palmieri Lage

Page 2: Universidade Federal de Minas Gerais Departamento de Ciência da Computação Compressã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

Page 3: Universidade Federal de Minas Gerais Departamento de Ciência da Computação Compressão de Textos Juliano Palmieri Lage.

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

Page 4: Universidade Federal de Minas Gerais Departamento de Ciência da Computação Compressão de Textos Juliano Palmieri Lage.

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

Page 5: Universidade Federal de Minas Gerais Departamento de Ciência da Computação Compressão de Textos Juliano Palmieri Lage.

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

Page 6: Universidade Federal de Minas Gerais Departamento de Ciência da Computação Compressão de Textos Juliano Palmieri Lage.

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

Page 7: Universidade Federal de Minas Gerais Departamento de Ciência da Computação Compressão de Textos Juliano Palmieri Lage.

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

Page 8: Universidade Federal de Minas Gerais Departamento de Ciência da Computação Compressão de Textos Juliano Palmieri Lage.

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

Page 9: Universidade Federal de Minas Gerais Departamento de Ciência da Computação Compressão de Textos Juliano Palmieri Lage.

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

Page 10: Universidade Federal de Minas Gerais Departamento de Ciência da Computação Compressão de Textos Juliano Palmieri Lage.

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

Page 11: Universidade Federal de Minas Gerais Departamento de Ciência da Computação Compressão de Textos Juliano Palmieri Lage.

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

Page 12: Universidade Federal de Minas Gerais Departamento de Ciência da Computação Compressão de Textos Juliano Palmieri Lage.

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

Page 13: Universidade Federal de Minas Gerais Departamento de Ciência da Computação Compressão de Textos Juliano Palmieri Lage.

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)

Page 14: Universidade Federal de Minas Gerais Departamento de Ciência da Computação Compressão de Textos Juliano Palmieri Lage.

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

Page 15: Universidade Federal de Minas Gerais Departamento de Ciência da Computação Compressão de Textos Juliano Palmieri Lage.

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)

Page 16: Universidade Federal de Minas Gerais Departamento de Ciência da Computação Compressão de Textos Juliano Palmieri Lage.

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--; } }

Page 17: Universidade Federal de Minas Gerais Departamento de Ciência da Computação Compressão de Textos Juliano Palmieri Lage.

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

Page 18: Universidade Federal de Minas Gerais Departamento de Ciência da Computação Compressão de Textos Juliano Palmieri Lage.

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;

{...}

Page 19: Universidade Federal de Minas Gerais Departamento de Ciência da Computação Compressão de Textos Juliano Palmieri Lage.

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

Page 20: Universidade Federal de Minas Gerais Departamento de Ciência da Computação Compressão de Textos Juliano Palmieri Lage.

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; }

Page 21: Universidade Federal de Minas Gerais Departamento de Ciência da Computação Compressão de Textos Juliano Palmieri Lage.

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

Page 22: Universidade Federal de Minas Gerais Departamento de Ciência da Computação Compressão de Textos Juliano Palmieri Lage.

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

Page 23: Universidade Federal de Minas Gerais Departamento de Ciência da Computação Compressão de Textos Juliano Palmieri Lage.

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);}

Page 24: Universidade Federal de Minas Gerais Departamento de Ciência da Computação Compressão de Textos Juliano Palmieri Lage.

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];}

Page 25: Universidade Federal de Minas Gerais Departamento de Ciência da Computação Compressão de Textos Juliano Palmieri Lage.

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

Page 26: Universidade Federal de Minas Gerais Departamento de Ciência da Computação Compressão de Textos Juliano Palmieri Lage.

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

Page 27: Universidade Federal de Minas Gerais Departamento de Ciência da Computação Compressão de Textos Juliano Palmieri Lage.

27/28Implementação de Sistemas de Informação para Web

Casamento AproximadoCasamento Aproximado

Máscara de bitsAutômato não-determinista

uma ro* rosa

Page 28: Universidade Federal de Minas Gerais Departamento de Ciência da Computação Compressão de Textos Juliano Palmieri Lage.

28/28Implementação de Sistemas de Informação para Web

Dúvidas?Dúvidas?Dúvidas?Dúvidas?