Compressão de Textos Juliano Palmieri Lage
Por que usar compressão? Economia de espaço Economia de rede Velocidade de acesso Processamento eficiente Implementação de Sistemas de Informação para Web
Implementação de Sistemas de Informação para Web Conceitos Básicos... Modelagem Estática Semi-estática Adaptativa Codificação Dicionário Estatística Implementação de Sistemas de Informação para Web
Implementação de Sistemas de Informação para Web Conceitos 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 Implementação de Sistemas de Informação para Web
Exemplos de Compressão Prefixos de Redundância Mínima Huffman Dicionário LZ77, LZ78 Gzip, Compress, bzip2 Codificação Aritimética Implementação de Sistemas de Informação para Web
Implementação de Sistemas de Informação para Web Huffman com Palavras Integração com RI Modelo Sem-Espaços Duas passagens pelo texto: Coleta de estatísticas Codificação Implementação de Sistemas de Informação para Web
Implementação de Sistemas de Informação para Web Exemplo... “Para cada rosa rosa, uma rosa é uma rosa” Símbolos {“para”, “cada”, ”rosa”, “,□”, “uma”, “é”} Freqüências 1, 1, 4, 1, 2, 1 Implementação de Sistemas de Informação para Web
Implementação de Sistemas de Informação para Web Exemplo... para:1 cada:1 rosa:4 , □:1 uma:2 é:1 2 1 para:1 cada:1 rosa:4 , □:1 uma:2 é:1 Implementação de Sistemas de Informação para Web
Implementação de Sistemas de Informação para Web Exemplo... 2 2 1 1 para:1 cada:1 rosa:4 , □:1 é:1 uma:2 4 1 2 2 1 1 para:1 cada:1 , □:1 é:1 rosa:4 uma:2 Implementação de Sistemas de Informação para Web
Implementação de Sistemas de Informação para Web Exemplo... 6 1 4 uma:2 1 2 2 1 1 para:1 cada:1 , □:1 é:1 rosa:4 Implementação de Sistemas de Informação para Web
Implementação de Sistemas de Informação para Web Exemplo 10 1 6 rosa:4 1 4 uma:2 1 2 2 1 1 para:1 cada:1 , □:1 é:1 Implementação de Sistemas de Informação para Web
Codificação de Huffman Árvore Canônica Abordagem da árvore Trivial Ineficiente Comprimento dos códigos Implementação de Sistemas de Informação para Web
Implementação de Sistemas de Informação para Web 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) Implementação de Sistemas de Informação para Web
Implementação de Sistemas de Informação para Web Algoritmo 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 Implementação de Sistemas de Informação para Web
Implementação de Sistemas de Informação para Web Primeira Fase... Direita para esquerda Freqüência é mantida até nó ser processado Não precisa de apontador para pais de nós folha (0,1,2,3,3) -> (1,2,4,4,4,4) Implementação de Sistemas de Informação para Web
Implementação de Sistemas de Informação para Web 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]; } else { A[t] += A[s]; Implementação de Sistemas de Informação para Web
Implementação de Sistemas de Informação para Web Segunda fase... Esquerda para direita Profundidade dos nós internos Raiz = 0 Filhos = Pai+1 Implementação de Sistemas de Informação para Web
Implementação de Sistemas de Informação para Web Segunda Fase {...} A[2] = 0; for (t = 3; t <= n; t++) A[t] = A[A[t]] + 1; Implementação de Sistemas de Informação para Web
Implementação de Sistemas de Informação para Web Terceira Fase... Esquerda pra direita d indica nós disponíveis no nível h u indica nós utilizados no nível h Implementação de Sistemas de Informação para Web
Implementação de Sistemas de Informação para Web Terceira 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; Implementação de Sistemas de Informação para Web
Implementação de Sistemas de Informação para Web Códigos Canônicos... Comprimentos dados pelo algoritmo de Huffman Códigos de um mesmo comprimento são inteiros consecutivos Implementação de Sistemas de Informação para Web
Implementação de Sistemas de Informação para Web Có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 Implementação de Sistemas de Informação para Web
Implementação de Sistemas de Informação para Web Codificaçã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); } Implementação de Sistemas de Informação para Web
Implementação de Sistemas de Informação para Web Decodificaçã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]; Implementação de Sistemas de Informação para Web
Implementação de Sistemas de Informação para Web Huffman com Bytes Huffman Pleno 0x70 0x71 0x4f | 0x71 0x4f Huffman Sincronizado 0xf0 0x71 0x4f | 0xf1 0x4f Implementação de Sistemas de Informação para Web
Pesquisa em Texto Comprimido 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 Implementação de Sistemas de Informação para Web
Implementação de Sistemas de Informação para Web Casamento Aproximado Máscara de bits Autômato não-determinista uma ro* rosa Implementação de Sistemas de Informação para Web
Implementação de Sistemas de Informação para Web Dúvidas? Dúvidas? Implementação de Sistemas de Informação para Web