Title: Representa
1Representação e Compressão de Texto
- Joaquim Macedo
- Departamento de Informática da Universidade do
Minho Faculdade de Engenharia da Universidade
Católica de Angola
2Sumário
- Introdução
- Representação do Texto
- Princípios de compressão de texto
- Redundância Estatística
- Função densidade de probablidade e entropia
- Teorema de Shannon para codificação de fonte sem
ruído - Codificação de Huffman
- Codificação Aritmética
- Compressão baseada em dicionário
- Técnica LZ77
- Técnica LZ782
3Introdução
- O texto é o media mais importante para
representar informação - Media mais antigo para armazenar e transmitir
informação - Maior parte da informação actual é mantida em
texto - Objecto desta aula
- Representação digital de texto e técnicas de
compressão
4Representação de Texto
ASCII (American National Standards Institute
ANSI) American Standard Code for Information
Interchange
O código ASCII é um código de 8 bits para
representação de caracteres. Por exemplo o
código para H é 01001000, para e é 01100101. A
mensagem Hello pode ser representada
como 01001000 01100101 01101100 01101100
01101111 00101110
5Representação de Texto
ASCII table (starting from 32)
6Tabela ASCII
7Tabela ASCII extendida
8Representação de Texto
Código bits Caracteres
ASCII 8 256
Unicode 16 65536
ISO International Organization for
Standardization
9Representação de textoRequisitos de espaço de
armazenamento
- Como o texto é usado extensivamente em muitos
tipos de documentos como livros, jornais e outros
periódicos - É necessário representá-lo eficientemente para
reduzir os requisitos do espaço de armazenamento
10Representação de textoRequisitos de espaço de
armazenamento
- Exemplo 6.1
- Considere um livro com 800 páginas. Cada página
contém em média 40 linha e cada linha 80
caracteres (incluindo espaços). Se o livro for
armazenado em formato digital que espaço de
armazenamento é necessário? - Resposta 2.44 Mbytes
11Representação de textoRequisitos de espaço de
armazenamento
- Um documento típico requer alguns Mbytes de
espaço de armazenamento - É possível representar o mesmo documento usando
menos espaço? - Isso é verdade
- É possível compactar texto sem perder informação!
- Muitos de nós já usaram o winzip (Windows) ou o
gzip (Linux)
12Princípios para Compressão de Texto
- Os textos típicos têm informação redundante
- As técnicas de compressão reduzem ou eliminam
essa redundância - Tipos de redundância
- Estatística
- Probabilidade não uniforme de ocorrência de
caracteres ou símbolos (menos bits ao símbolos de
maior ocorrência) - Conhecimento
- Quando o texto a codificar é limitado em termos
de âmbito, pode ser associado conhecimento comum
ao codificador e descodificador nesse caso é
enviada a informação indispensável para
reconstruir o texto original.
13Redundância Estatística
- Métodos de redução de redundância estatística
- Baseados na teoria de codificação das fontes
- Cada amostra de dados (caracter) tratado com
símbolo gerado por uma fonte de informação - Conjunto de todos símbolos é o alfabeto
- Lida com a compressão de dados gerados por uma
fonte que emite uma sequência de símbolos
escolhidos dum alfabeto finto.
14Teoria de Codificação de Fontes
- 2 conceitos fundamentais
- Entropia
- Medida da informação contida na fonte
- Define a quantidade mínima do débito médio de
bits para reconstrução perfeita dos símbolos da
fonte - Taxa de distorção
- Define um limite inferir no débito médio de bits
para uma dada distorção nos símbolos
reconstruídos.
15Função densidade de probabilidade
16Exemplo 6.2
- Considere a string Xaaabbbbbbccaaabbcbbbb
- Determine o alfabeto
- Determine o histograma e a função densidade de
probabilidade dos caracteres. - Mostre que a soma das probabilidades dos símbolos
do alfabeto é 1.
17Entropia
18EntropiaBlocos de símbolos
19Exemplo 6.3
- Considere a fonte do exemplo anterior. Calcule a
entropia de 1ª e 2ª ordem.
20Teorema de ShannonCodificação de Fontes sem
Ruído
- Considere uma fonte de texto com um alfabeto de
tamanho K e entropia H(S) e a codificação de
blocos de N símbolos da fonte - Para qualquer é possível, escolhendo N
suficientemente grande, construir um código em
que número médio de bits por símbolo - cumpra a seguinte relação
21Teorema de ShannonCodificação de Fontes sem Ruído
- Pode ser mostrado que a entropia é limitada por
22Exemplo 6.4
- Considere uma fonte de informação com alfabeto
a,b,c,d. Os símbolos têm igual probabilidade de
ocorrência. - Calcule a entropia e a redundância da fonte
- Qual o débito de bits médio necessário para
transmitir os símbolos gerados pela fonte? - Conceba um código adequado para os símbolos da
fonte.
23Exemplo 6.5
- Qual a o débito de bits médio para uma fonte de
três símbolos? Qual o débito necessário para a
fonte do exemplo 6.2. Calcule a redundância da
fonte. Quando é que redundância é zero?
24Interpretação do Teorema de Shannon
- O Teorema estabelece que o limite mínimo para o
débito de bits - Mas não nos indica como fazê-lo. É muito difícil
conseguir um débito igual à entropia. - Normalmente é superior de um valor inferior a
delta
25Métodos estatísticos de compressão
- Duas estratégias de codificação
- Huffman
- Atribui um código de bits de comprimento variável
a cada símbolo - Relativamente rápido e acesso aleatório
- Semi-estático versus adaptativo
- Aritmética
- Texto de entrada representado por número reais
entre 0 e 1 - Símbolos de entrada com maiores probabilidades
reduzem menos o intervalo que símbolos com menor
probabilidade e portanto adicionam menos bits ao
código de saída - Mais lento que o de Huffman e a decompressão não
pode começar a meio do ficheiro
26Código de Huffman
- Inventado por Huffman a fazer um trabalho de casa
em 1950.. - Usados em muitos algoritmos de compressão
- gzip, bzip, jpeg (como opção), fax,
- Propriedades
- Gera códigos de prefixo óptimos
- Fácilidade na
- Geração de códigos
- Codificação e descodificação
- Comprimento médioH se as propabilidades forem
potências de 2
27Codificação de Huffman
- Uma frase é codificada substituindo cada um dos
seus símbolos com o respectivo código dado por
uma tabela - A codificação de Huffman gera códigos para um
conjunto de símbolos, dada uma distribuição de
probabilidade dos símbolos - O tipo de código é chamada código de prefixo
- Nenhuma palavra de código é prefixo de outra
palavra de código
28Códigos de Prefixo
- Um código de prefixo é um código de comprimento
variável onde nenhuma palavra de código é prefixo
de outra palavra de código - Exemplo a 0, b 110, c 111, d 10
- Pode ser visto como uma árvore binária com
valores de mensagens nos nós terminais e 0 e 1
nos seus ramos
0
1
0
1
a
0
1
d
b
c
29Códigos de descodificação única
- Um código de comprimento variável atribui uma
sequência de bits (palavra de código) de
comprimento variável a todos valores de mensagem - i.e. a 1, b 01, c 101, d 011
- A sequência de bits 10110 que significa ?
- É aba, ca, ou, ad?
- Um código de descodificação única é um código de
comprimento variável em que as sequências de bits
podem sempre ser decomposta de forma únoca nas
suas palavras de código. -
30Codificação de Huffman
- As palavras de código podem ser armazenadas numa
árvore - Árvore de descodificação
- O algoritmo de Huffman funciona construindo a
árvore de descodificação de baixo para cima
31Codificação de HuffmanAlgoritmo
- Algoritmo
- cria para cada símbolo um nó terminal contendo o
símbolo e a sua propabibilidade. - Os dois nós com as probabilidades mais pequenas
tornam-se irmãos sob um novo nó pai, cuja
probabilidade é a soma da dos filhos - A operação de combinação é repetidad até haver um
único nó raiz. - Todos os ramos de todos nós não terminais são
então etiquetados com 0 1.
32Codificação de Huffman
- A codificação de Huffman é geralmente rápida quer
na codificação como na descodificação desde que a
probabilidade seja estática. - Codificação de Huffman adaptativa é possível mas
ou precisa de muito memória ou é lenta - Acoplada com um modelo baseado em palavras (em
vez dum baseado em caracter), fornece uma boa
compressão.
33Codificação de Huffman
- Frequências de caracter
- A 20 (.20)
- B 9 (.09)
- C 15
- D 11
- E 40
- F 5
- Não há mais caracteres no documento
34Codificação de Huffman
C .15
A .20
D .15
BF .14
E .4
0
1
F .05
B .09
35Codificação de Huffman
- Códigos
- A 010
- B 0000
- C 011
- D 001
- E 1
- F 0001
36Exemplo 6.4
- Determine o código de Huffman para os símbolos da
tabela - Codifique a tring baecedeac!
- Descodifique
- 00011000100110000010111
Símbolo Probabilidade
a 0.2
b 0.1
c 0.2
d 0.1
e 0.3
! 0.1
37Exemplo
- p(a) .1, p(b) .2, p(c ) .2, p(d) .5
a(.1)
b(.2)
d(.5)
c(.2)
(.3)
(.5)
(1.0)
1
0
(.5)
d(.5)
a(.1)
b(.2)
(.3)
c(.2)
1
0
Passo 1
(.3)
c(.2)
a(.1)
b(.2)
0
1
a(.1)
b(.2)
Passo 2
Passo 3
a000, b001, c01, d1
38Codificação e Descodificação
- Codificação Começar no nó terminal da árvore de
huffman e seguir o percurso para a raiz. Inverter
a ordem dos bits e enviar. - Descodificação Começar na raiz da árvore e
seguir o ramo de acordo com o bit recebido.
Quando chegar à um no terminal enviar o símbolo e
regressar à raiz.
(1.0)
1
0
(.5)
d(.5)
Há metodos mais rápidos que podem processar 8 ou
32 bits de cada vez
1
0
(.3)
c(.2)
0
1
a(.1)
b(.2)
39Limitações dos Códigos de Huffman
- Precisa de pelo menos 1 bit para representar a
ocorrência de cada símbolo - Não podemos arranjar um código de Huffman que
gaste 0.5 bits/símbolo - Se a entropia da fonte for menor que 1
bit/simbolo o código de Huffman não é eficiente! - Não se adapta eficientemente a um fonte com
estatísticas variáveis. - Embora haja códigos de Huffman dinâmicos, são
difíceis de concretizar -
40Codificação aritmética
- Outra técnica baseada na entropia
- Maior relação de compressão que a codificação de
Huffman - Pode disponibilizar débito de bits infeiores a 1
- O débito aproxima-se do limite teórico da
entropia da fonte - Técnica de codificação diferente da de Huffman
- Huffman codificação independente por símbolo
- Resultado concatenação do código de cada símbolo
- Aritmética uma palavra de código para toda a
mensagem
41Exemplo
- Considere o alfabeto inglês com 26 letras.
Calcule o número máximo de strings diferentes
com comprimento - 1
- 2
- 100
42Codificação Aritmética
- O código é para todo o texto como um
sub-intervalo da unidade. - Cada símbolo é representado por um sub-intervalo
do intervalo que tem um comprimento proporcional
à probabilidade do símbolo. - O comprimento do intervalo final é o produto das
probabilidades de todos símbolos no texto.
43Codificação Aritmética
Símbolo Probabilidade Gama (para o codificador aritmético)
a 0.2 0,0.2)
b 0.1 0.2,0.3)
c 0.2 0.3,0.5)
d 0.1 0.5,0.6)
e 0.3 0.6,0.9)
! 0.1 0.9,1.0)
44Codificação Aritmética
Sub-intervalo Intervalo binário String de bits gerada
Começar 0,1.0)
b 0.2,0.3) 0.0,0.5) 0
Depois a 0.2,0.22) 0.0,0.25) 0
de a 0.2,0.204) 0.125,0.25) 1
ver d 0.2020,0.2024) 0.1875,0.25) 1
! 0.20236.0.2024) 0.1875,0.21875) 0
45Codificação AritméticaOutro exemplo
_
_
_
.6667
1
.6667
.6667
c
c
1/3
1/4
c
_
.5834
_
c
3/6
2/5
2/3
_
.6334
1/3
b
_
b
.6501
2/4
b
_
1/3
2/6
b
2/5
_
_
.4167
_
.6001
a
1/3
.6390
a
a
a
1/4
1/6
_
_
_
0
1/5
.3333
.6334
.5834
Qualquer valor no intervalo .6334,.6390)
codifica bcca
46Codificação Aritmética Adaptativa
- Podemos assumir
- Probabilidades iguais para todos símbolos no
início - Fazer a contagem dos símbolos para nos
aproximarmos das suas probabilidades reais no
texto - Durante a descodificação
- Usar as mesmas contagens e seguir precisamente os
mesmos sub-intervalos.
47Modelos baseado em dicionário
- Métodos de compressão baseados em dicionário usam
o princípio de substituir substrings num texto
com uma palavra de código que iedntifica essa
substring no dicionário - O dicionário contém uma lista de substrings e uma
palavra de código para cada substring - Normalmente usam-se palavras de código fixas
- Obtem-se mesmo assim uma compressão razoável
48Modelos baseado em dicionário
- Os métodos mais simples de compressão usam
pequenos dicionários - Por exemplo, codificação de digramas
- pares de letras seleccionadas são substituídas
por palavras de código - Um dicionário para o código de caracteres ASCII
pode conter os 128 caracteres bem como 128 pares
de letras mais comuns.
49Modelos baseado em dicionário
- Codificação com digramas
- As palavras de código de saída têm 8 bits cada
- A presença do conjunto completo de caracteres
ASCII assegura que qualquer entrada (ASCII) pode
ser representada. - No melhor dos casos, cada par de caracteres é
substituído por uma palavra de código, reduzindo
de 7 bits/caracter para 4 bits/caracter - No pior dos casos, cada caracter de 7 bits é
expandido para 8 bits
50Modelos baseado em dicionário
- Expansão natural
- Colocar no dicionário sequências com mais
caracteres nomeadamente palavras comuns ou
componentes comuns das palavras. - Um conjunto pré-definido de frases do dicionário
tornam a compressão dependente do domínio - ou se usam fazes muito curtas ou não se consegue
uma boa compressão
51Modelos baseado em dicionário
- Uma maneira de evitar o problema do dicionário
ser desadequado para o texto a manipular é usar
um dicionário semi-estático - construir um novo dicionário para todo texto a
compactar - A sobrecarga de transmitir e armazenar o
dicionário é significativo - A decisão de que frases incluir no dicionário é
um problema difícil de resolver
52Modelos baseado em dicionário
- Solução usar um esquema de dicionário adaptativo
- Codificadores Ziv-Lempel (LZ77 e LZ78)
- Uma substring de texto é substituída por um
apontador para uma ocorrência prévia no texto. - Dicionário todo o texto anterior à posição
corrente. - Palavras de código apontadores.
53Modelos baseado em dicionário
- Ziv-Lempel
- O texto anterior torna-se normalmente um
dicionário muito bom, pois normalmente está no
mesmo estilo e linguagem do texto seguinte. - O dicionário é transmitido implicitamente sem
custo extra, porque o descodificador tem acesso a
todo texto previamente descodificado.
54LZ77
- Vantagens chave
- Relativamente fácil de concretizar
- A descodificação pode ser feita facilmente usando
apenas uma pequena porção de memória. - apropriada quando os recursos necessários para
descodificar devem ser minimizados
55LZ77
- A saída do codificador consiste duma sequência de
triplas , i.e lt3,2,bgt - O primeiro componente da tripla indica quão longe
se deve olhar para o texto previamente
descodificado para encontrar a próxima frase - O segundo componente indica o comprimento da
frase - O terceiro componente dá o próximo caracter da
entrada
56LZ77
- O componente 1 e 2 constituem um apontador para o
texto prévio - O componente 3 só é necessário se o caracter a
ser codificado não ocorreu previamente.
57LZ77
- Codificação
- Para o texto presentemente na entrada
- busca da maior unificação no texto anterior
- devolver a tripla que regista a posição e o
comprimento da unificação - A busca pode devolver um comprimento zero,
situação em que a posição da unificação não é
relevante. - A busca pode ser acelarada indexando o texto
prévio com estruturas de dados adequadas
58LZ77
- Há limitações de quanto para trás o apontador
pode referir e o máximo tamanho da string
referenciada - para texto em inglês, uma janela de poucos
milhares de caracteres - o comprimento da frase tem um máximo de 16
caracteres - Senão gasta-se muito espaço sem benefício
59LZ77
- O programa de descodificação é muito simples, de
forma que pode ser incluído com os dados com
muito pequeno custo - De facto os dados compactados são colocados como
parte do programa de descodificação, que torna os
dados com capacidade de auto-extracção. - Forma comum de distribuição de ficheiros
60Exemplo 6.8
- Considere um dicionário de vinte caracteres (ou
janela deslizante) e uma janela de antevisão de 8
caracteres. A string de entrada é - RYYXXZERTYGJJJASDERRXXREFEERZXYURPP
- Calcule a saída do compressor de texto
-
61LZ78
- Outra técnica base
- Usada por vários compressores de texto muito
eficientes - Em vez de uma janela deslizante de tamanho fixo
como o LZ77 - Constrói um dicionário com as strings que
unificaram previamente. - Não há restrições de distância no texto para
unificação - Aumenta a probabilidade de unificação
62Exemplo 6.9
- O texto a codificar é PUB PUB PUPPY...
- Mostre como se constrói o dicionário e os
primeiros símbolos de saída do compressor.
63Exemplo 6.9
Entrada do Dicionário String adicionada ao Dicionário Índice de saída Caracter Sáida
0
1 P 0 P
2 U 0 U
3 P_ 1 _
4 PU 1 U
5 B 0 B
6 0
7 PUP 4 P
8 PY 1 Y
... .... .... ....
Dicionário
Saída Codificada
64LZW Algorithm
Este algoritmo evita a necessidade de transmitir
o próximo caracter como no algoritmo LZ78. O
dicionário é incializado como todos caracteres do
alfabeto As novas frases são adicionadas ao
dicionário acrescentadando o primeiro caracter
das próximas frases O algoritmo é melhor descrito
usando uma tie
a
c
Alphabet (a,b,c)
b
1
2
3
b
a
c
Text abcabbcabba
4
5
6
b
a
7
8
a
9
Trie
Transmitted message 1234571
65Textabcabbcabba
Text a b..
..b c..
a
c
b
2
3
1
..c a..
..ab . b..
..bc a..
..abb a
1
0
1
0
0
1
1
1
0
0
0
1
1
6
2
0
3
0
1
4
1
a
Final Trie and its Height Balanced Binary
Tree Transmitted Code 123457100100110010101001
1000
9
8
5
7
9
66Resumo
- Foram apresentadas várias técnicas de compressão
sem perdas - Baseadas na entropia
- Também usadas para áudio e imagem
- Baseadas em dicionário
- Usadas por muitos esquemas de compressão de texto
para conseguir altas taxas de compressão