compresia informatiei textuale

116
ANALIZA ALGORITMILOR PENTRU COMPRESIA INFORMAŢIEI TEXTUALE ŞI A EFICIENŢEI PROGRAMELOR DE ARHIVARE CUPRINS ABREVIERI........................................................ 3 LISTA TABELELOR ŞI GRAFICELOR....................................4 ADNOTARE......................................................... 6 CUVINTE-CHEIE.................................................... 6 INTRODUCERE...................................................... 8 CAPITOLUL 1. METODE DE COMPRESIE................................10 1.2. ALGORITMI ENTROPICI.......................................13 1.2.1. CODAREA BINARĂ HUFFMAN STATICĂ........................15 1.2.2. CODAREA BINARĂ SHANNON – FANO.........................17 1.2.3. CODAREA BINARĂ HUFFMAN DINAMICĂ (ADAPTIVĂ)............18 1.2.4. COMPRESIA ARITMETICĂ..................................19 1.3. ALGORITMI PE BAZĂ DE DICŢIONAR............................25 1.3.1. ALGORITMUL LZ77....................................... 28 1.3.2. ALGORITMUL LZ78....................................... 31 1.3.3. ALGORITMUL LZW........................................ 33 CAPITOLUL 2. COMPRESIA FIŞIERELOR DE UZ GENERAL.................37 2.1 WinRAR.....................................................37 2.2 WinZIP.....................................................38 2.3. 7-Zip FILE MANAGER........................................39 2.3.1. ZIP................................................... 40 2.3.2. FORMATUL 7z........................................... 41 2.3.3. LZMA.................................................. 41 2.4. POWER ARCHIVER 2009.......................................42 2.5. COMPARAREA EFICIENŢEI PROGRAMELOR DE ARHIVARE.............42 CAPITOLUL 3. COMPRESIA FIŞIERELOR DIGITIZATE....................43

Upload: mariana-rusu

Post on 31-Oct-2015

522 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: compresia informatiei textuale

ANALIZA ALGORITMILOR PENTRU COMPRESIA INFORMAŢIEI TEXTUALE

ŞI A EFICIENŢEI PROGRAMELOR DE ARHIVARE

CUPRINS

ABREVIERI.........................................................................................................................................3

LISTA TABELELOR ŞI GRAFICELOR............................................................................................4

ADNOTARE........................................................................................................................................6

CUVINTE-CHEIE...............................................................................................................................6

INTRODUCERE..................................................................................................................................8

CAPITOLUL 1. METODE DE COMPRESIE..................................................................................10

1.2. ALGORITMI ENTROPICI.....................................................................................................13

1.2.1. CODAREA BINARĂ HUFFMAN STATICĂ................................................................15

1.2.2. CODAREA BINARĂ SHANNON – FANO...................................................................17

1.2.3. CODAREA BINARĂ HUFFMAN DINAMICĂ (ADAPTIVĂ)....................................18

1.2.4. COMPRESIA ARITMETICĂ.........................................................................................19

1.3. ALGORITMI PE BAZĂ DE DICŢIONAR............................................................................25

1.3.1. ALGORITMUL LZ77......................................................................................................28

1.3.2. ALGORITMUL LZ78......................................................................................................31

1.3.3. ALGORITMUL LZW......................................................................................................33

CAPITOLUL 2. COMPRESIA FIŞIERELOR DE UZ GENERAL..................................................37

2.1 WinRAR...................................................................................................................................37

2.2 WinZIP.....................................................................................................................................38

2.3. 7-Zip FILE MANAGER.........................................................................................................39

2.3.1. ZIP....................................................................................................................................40

2.3.2. FORMATUL 7z...............................................................................................................41

2.3.3. LZMA...............................................................................................................................41

2.4. POWER ARCHIVER 2009.....................................................................................................42

2.5. COMPARAREA EFICIENŢEI PROGRAMELOR DE ARHIVARE...................................42

CAPITOLUL 3. COMPRESIA FIŞIERELOR DIGITIZATE...........................................................43

3.1. COLECŢIILE DIGITALE – O NOUĂ POSIBILITATE DE ACCES LA INFORMAŢIE...43

3.2. FORMATELE UZUALE ALE FIŞIERELOR SCANATE....................................................47

3.3. DjVu: UN SISTEM DE COMPRESIE TIP IMAGINE PENTRU DISTRIBUIREA

DOCUMENTELOR NUMERICE.................................................................................................48

3.4. EFICIENŢA TEHNICII DE COMPRESIEI DjVu.................................................................52

Page 2: compresia informatiei textuale

3.4.1. REZULTATE: IW44 PENTRU IMAGINI NATURALE...............................................54

3.4.2. REZULTATE: JB2 PENTRU IMAGINI ÎN DOUĂ NUANŢE......................................54

3.4.3. REZULTATE: DjVu PENTRU DOCUMENTELE COLOR..........................................56

CAPITOLUL 4. IMPLEMENTĂRI PRACTICE..............................................................................58

4.1. ALGORITMUL HUFFMAN STATIC (ALGORITM ENTROPIC)......................................58

4.1.1. CODUL SURSĂ AL ALGORITMULUI HUFFMAN ÎN VISUAL C++.......................59

4.2. ALGORITMUL LZW (ALGORITM PE BAZĂ DE DICŢIONAR).....................................64

4.2.1. CODUL SURSĂ AL ALGORITMULUI LZW ÎN VISUAL C++..................................65

CONCLUZIE.....................................................................................................................................74

BIBLIOGRAFIE................................................................................................................................76

2

Page 3: compresia informatiei textuale

ABREVIERI

ACM Association for Computing Machinery

ACRL Association of College & Research Libraries

ALA American Library Association

BMP Windows bitmap

CD-ROM Compact Disk read-only memory

CNI Coalition for Networked Information

DARPA Defence Advanced Research Projects Agency

DjVu déjà vu format

DLF Digital Library Federation

DLI Digital Library Initiatives

dpi dots per inch

EBCOT Embedded Block Coding with Optimal Truncation

EZW Embedded Zerotree Wavelet

GIF Graphics Interchange Format

GPL General Public License

IEEE Institute of Electrical and Electronics Engineers

IFLA International Federation of Library Associations

IW44 Wavelet based compression algorithm

JB2 bi-level image compression algorithm

JBIG Joint Bi-level Image Experts Group

JISC Joint Information Systems Committee, U.K

JPEG Joint Photographic Experts Group

LZW Lempel-Ziv-Welch

MMR Min–Min-Roughness algorithm

MMR Modified Modified READ (READ is Relative Element Address Designate codes)

NASA National Aeronautics and Space Administration

NSF National Science Foundation, U.S

ODLIS Online Dictionary for Library and Information Science

PDF Portable Document Format

RGB Modelul de culori Red-Green-Blue

SPIHT Set Partitioning in Hierarchical Trees

TIFF Tagged Image File Format

WDL World Digital Library

3

Page 4: compresia informatiei textuale

LISTA TABELELOR ŞI GRAFICELOR

Figura 1.1.1. Structura compresiei statice fără pierdere de informaţie..............................................12

Figura 1.1.2. Structura compresiei adaptive fără pierdere de informaţie (lossless compression)......12

Figura 1.2.1.1. Procedeul de codare Huffman...........................................................................16

Figura 1.2.2.1. Procedeul de codare Shannon – Fano.......................................................................18

Figura 1.2.4.1. Procesul de codificare aritmetică...............................................................................22

Figura 1.2.4.2. Procesul de decodificare aritmetică...........................................................................23

Tabelul 1.3.1. Formarea dicţionarului................................................................................................26

Tabelul 1.3.2. Cele mai frecvente 30 de perechi de caractere dintr-un document de 41.364 caractere

............................................................................................................................................................27

Tabelul 1.3.3. Cele mai frecvente 30 de perechi de caractere dintr-un program C de 65.983 caractere

............................................................................................................................................................27

Figura 1.3.1.1. Procedeul codării algoritmului LZ77.........................................................................29

Figura 1.3.1.2. Poziţionarea iniţială a secvenţei în fereastră pentru LZ77.........................................29

Figura 1.3.1.3. Deplasarea ferestrei cu o poziţie pentru căutarea unei asemănări.............................29

Figura 1.3.1.4. Deplasarea ferestrei cu l+1 poziţii pentru căutarea unei noi asemănări.....................30

Figura 1.3.1.5. Decodarea primului triplet.........................................................................................30

Figura 1.3.1.6. Decodarea celui de-al doilea triplet...........................................................................30

Figura 1.3.1.7. Decodarea ultimului triplet........................................................................................30

Figura 1.3.2.1. Procedeul codării algoritmului LZ78.........................................................................31

Tabelul 1.3.2.1. Formarea dicţionarului aplicând algoritmul LZ78...................................................32

Tabelul 1.3.3.1. Exemplu de dicţionar iniţial pentru codarea LWZ...................................................33

Tabelul 1.3.3.2. Exemplu de dicţionar complet pentru codarea LZW...............................................34

Tabelul 1.3.3.3. Procedeul de decodare LZW....................................................................................35

Tabelul 1.3.3.4. Exemplu de codare LZW ........................................................................................35

Tabelul 2.3.1. Formatele suportate (compatibile) ale aplicaţiei 7-ZIP...............................................39

Tabelul 2.3.2.1. Metodele integrate curent în 7z................................................................................41

Tabelul 2.5.1. Compararea eficienţei programelor de arhivare..........................................................42

Figura 3.3.1. Divizarea prim-plan/fundal ..........................................................................................49

Figura 3.3.1.1. Proiecţiile succesive converg către un punct de intersecţie a două subspaţii convexe

reprezentând (a) imagini de potrivire a imaginii iniţiale în afara măştii, şi (b) imagini ale căror

coeficienţi mascaţi wavelet sunt zero.................................................................................................51

Figura 3.4. Descărcarea fişierului printr-un modem de 56 K: decompresia progresivă mai întâi a

textului, apoi a fundalului cu o creştere continuă a calităţii ..............................................................53

4

Page 5: compresia informatiei textuale

Tabelul 3.4.1.1. Raportul semnal/zgomot obţinut cu diferite metode de compresie..........................54

Tabelul 3.4.2.1. Comparaţii între MMR/G4 şi JB2 după mărimea fişierelor.....................................55

Tabelul 3.4.2.2. Comparaţii între MMR/G4 şi JB2 după rata de compresie......................................55

Tabelul 3.4.2.3. Rata de compresie a JB2 în raport cu rata de compresie relativă a G4...................56

Tabelul 3.4.2.4. Comparaţii între MMR/G4 şi JB2 după mărimea medie a unei pagini....................56

Tabelul 3.4.3.1. Mărimea fişierelor (în KB) obţinute la digitizare utilizând diferiţi algoritmi..........56

Tabelul 3.4.3.2. Rezultatele compresiei utilizând diferiţi algoritmi ..................................................57

5

Page 6: compresia informatiei textuale

ADNOTARE

Compresia datelor se ocupă cu reprezentarea informaţiei într-o formă compactă. Acest lucru se

realizează prin identificarea şi extragerea redundanţei din date.

Modelarea statistică a unei surse discrete de informaţie constă în asocierea unei probabilităţi de

apariţie a fiecărui simbol al alfabetului sursei urmată apoi de atribuirea de cuvinte de cod cu un

număr mai mic de biţi cuvintelor cu o probabilitate de apariţie mai mare. Din această categorie fac

parte codificarea Shannon-Fano, codificarea Huffman statică şi dinamică, codificarea aritmetică.

Aceşti algoritmi sunt descrişi în capitolul 1.

Metodele de compresie bazate pe modelarea lingvistică a surselor discrete au la bază ideea de a

construi un dicţionar din cuvinte ale limbajului asociat sursei. Ulterior inserării unui cuvânt în

dicţionar în cazul oricărei apariţii a cuvântului acesta se înlocuieşte cu o informaţie despre poziţia sa

în dicţionar. Din această categorie fac parte algoritmii LZ77, LZ78, LZW, o descriere mai detaliată

este în capitolul 1 al tezei date.

Un compresor de date este o aplicaţie care, pe baza unuia sau mai multor algoritmi de

compresie, diminuează spaţiul necesar stocării informaţiei utile conţinute de un anumit set de date.

Pentru orice compresor de date este necesară condiţia de existenţă a cel puţin unui decompresor

care, pe baza informaţiilor furnizate de compresor, să poată reconstitui informaţia care a fost

comprimată. În cazul în care nu există un decompresor, atunci datele comprimate devin inutile

pentru utilizator deoarece acesta nu mai are acces la informaţia stocată în arhivă (o arhivă

reprezintă rezultatul obţinut în urma utilizării unui compresor). Aplicaţiile de arhivare de uz general

sunt tratate în capitolul 2.

Apariţia necesităţii digitizării publicaţiilor de patrimoniu, a manuscriselor etc. impune crearea

unei tehnici de compresie pentru fişierele scanate. Stocarea acestor fişiere în format DjVu care în

acest moment permite cel mai bun raport de compresie/calitate a fişierului standard este o

posibilitate analizată în această lucrare în capitolul 3.

Ultimul capitol conţine implementările practice ale algoritmilor Huffman static şi LZW.

CUVINTE-CHEIE

Compresia datelor, algoritmi, codare statică, codare adaptivă, Huffman, Shannon-Fano, tehnici

de dicţionar, LZW, arhivatori, DjVu.

6

Page 7: compresia informatiei textuale

ABSTRACT

Data compression deals with the representation of information in a compact form. This is

achieved by identifying and extracting the redundancy from the data.

Statistical modelling of discrete sources of information is a combination of probabilities of each

symbol of the source alphabet followed by assigning code words with a fewer bits to the words with

a higher probability of occurrence. In this category is included Shannon-Fano coding, static and

dynamic Huffman coding, arithmetic coding. These algorithms are described in the Chapter 1.

Compression methods based on language modelling of discrete sources based on the idea of

building a dictionary of words associated with the source language. Subsequently inserting a word

in the dictionary for any occurrences of this word is replaced with information about its position in

the dictionary. In this category take part algorithms like LZ77, LZ78, LZW, a more detailed

description is in the Chapter 1 of this thesis.

A data compression is an application which on the basis of one or several compression

algorithms reduces storage space needed useful information contained in a data set. For any data

compression is necessary condition of existence of at least one decompresor, on the basis of

information supplied by the compressor can reconstruct information that has been compressed. If

there is no a decompresor, then compressed data become unnecessary for the user because this has

no access to the information stored in the archive (an archive is the result of the using a

compressor). Archiving applications of general using are treated in the Chapter 2.

The appearance of the necessity to digitize the patrimony publications, manuscripts, etc. it

requires the creation of a compression technique for the scanned files. Storing these files in DjVu

format that currently allows as the best report compression / quality of the standard file is a

possibility examined in the chapter 3 of this thesis.

The final chapter contains practical implementations of the static Huffman and LZW

algorithms.

KEYWORDS

Data compression, algorithms, static coding, adaptive coding, Huffman, Shannon-Fano,

dictionary techniques, LZW, archivers, DjVu.

7

Page 8: compresia informatiei textuale

INTRODUCERE

Compresia de date este ansamblul prelucrărilor ce se aplică unor date în scopul reducerii

dimensiunii reprezentării acestora fără a pierde informaţie importantă. Diminuarea poate fi obţinută

fie prin aplicarea unui algoritm fără pierdere, în acest caz datele originale sunt reobţinute la

decompresie, fie prin aplicarea unui algoritm cu pierdere, în acest caz datele recuperate după

compresie reprezintă o reconstruire satisfăcătoare a datelor originale. Reducerea volumului de date

permite stocarea mai multor informaţii pe un singur produs media, sau ia mai puţin timp pentru a le

transfera în reţea. În unele cazuri, volumul de date este prea mare, încât aproape e imposibil de

prelucrat şi reprezentat fără a le compresa.

Compresia informaţiei textuale necesită algoritmi fără pierdere, deoarece se schimbă sensul

informaţiei. Dacă la compresia sunetelor, imaginilor, secvenţelor video se admit careva pierderi de

informaţie, uneori chiar se cere suprimarea datelor ce nu pot fi percepute de om şi se ajunge la un

raport de compresie de 50:1, în ceea ce priveşte compresia unui text se poate obţine un raport de

aproximativ 2:1.

Raportul de compresie este egal cu raportul dintre dimensiunea reprezentării datelor în lipsa

compresiei şi dimensiunea reprezentării datelor obţinute în urma ei.

Sunt multe tehnologii de compresie a informaţiei textuale, dar trebuie de ţinut cont că trebuie de

reconstruit aceasta informaţie, căci altfel nu au nici o valoare datele comprimate. Iar faptul că

datele trebuie recuperate 100% face dificilă această misiune.

Codul Morse – o metodă veche de compresie nu este utilizat în prezent decât în situaţii foarte

rare, telegramele sunt neglijate odată cu venirea mesajelor electronice şi a Internetului. Rutele

poştale sunt înlocuite cu legături prin satelit de mare debit, cu o creştere a criptării. Chiar şi tipul

mesajelor s-a schimbat. De la scrisori oficiale telegrafice noi am trecut la o comunicare mai bogată:

documente, texte, imagini, sunet, muzică şi video. Apariţia Internetului şi în general a sistemelor

multimedia a transformat enorm modul nostru de comunicare. Noi trăim într-o societate numerică.

Noi comunicăm utilizând telefoane mobile numerice, noi trimitem mesaje prin poşta electronică.

Noi putem citi o carte care se află într-o bibliotecă la celălalt capăt al lumii vizitând site-ul ei web

(bibliotecă virtuală). Putem să avem o colecţie respectabilă de cărţi stocată pe un USB flash de

mărimea unei brichete.

Nu este necesar de a relata despre modul în care tehnologiile informaţionale transformă modul

nostru de a trăi, de a aborda relaţiile interpersonale, voi insista doar asupra faptului că aceste

transformări sunt rezultatul reuşitelor tehnologice bazate pe schimbul eficace al informaţiei. Acest

schimb nu poate avea loc dacă utilizăm date în forma lor brută. De fapt, toate aceste date, care sunt

la baza revoluţiei numerice, sunt în stare brută, prea voluminoase pentru a fi prelucrate aşa cum sunt

8

Page 9: compresia informatiei textuale

ele, cu toate că tehnologiile de stocare şi de telecomunicaţie s-au ameliorat foarte mult. Pentru a nu

încărca reţelele, trebuie să comprimăm imaginile, sunetul şi video într-un mod eficace.

E ştiut faptul că şi codurile s-au schimbat. Nu mai utilizăm punctele, liniile şi pauzele codului

Morse, noi manipulăm bitul. În prezent codurile noi sunt elaborate cu ajutorul biţilor. Un bit este

unitatea de bază a informaţiei.

Majoritatea imaginilor, în stare necompresată au mărimea de sute de kilo-octeţi, uneori chiar şi

zeci de mega-octeţi. O piesă muzicală numerică de calitate compact-disc, „cântăreşte” zeci de

mega-octeţi. Video de calitate medie, măsoară sute de mega-octeţi pe minută. Chiar şi o simplă

conversaţie telefonică, utilizând aceeaşi bandă a sistemelor telefonice actuale, cere aproximativ 8

kilo-octeţi pe secundă, pentru a fi de calitate satisfăcătoare.

În lucrarea dată sunt analizaţi doar algoritmii de compresie textuală, motivaţia fiind specialitatea

finisată: „Informatică şi Limbi Moderne Aplicate” (Licenţa în Informatică - 4 ani), ce presupune

cunoştinţe practice ample despre prelucrarea textelor.

Metodele de compresie sunt desfăşurate în primul capitol, este dat câte un exemplu pentru o

înţelegere mai sigură a materialului expus. Capitolul II conţine informaţii despre programele de

arhivare, compatibilitatea lor cu SO, eficienţa compresiei obţinută.

În următorul capitol sunt descrise succint tendinţele internaţionale în ceea ce priveşte crearea

bibliotecilor digitale ce răspund cerinţelor de informare ale utilizatorilor secolului XXI. Sunt

prezentate cele două componente din care se constituie bibliotecile digitale: colecţiile digitale

obţinute prin digitizarea moştenirii culturale şi ştiinţifice a omenirii pentru extinderea accesului la

aceasta şi colecţiile digitale create direct în format electronic, în special în universităţi, cu scopul de

oferi accesul rapid la informaţia academică, ştiinţifică, educaţională.

Capitolul III conţine informaţie şi despre formatul DjVu utilizat pentru cărţile digitale stocate în

biblioteci virtuale.

Ultimul capitol conţine rezultatele implementărilor practice ale algoritmilor Huffman (algoritm

entropic) şi LZW (bazat pe dicţionar) cât şi explicarea codului sursă elaborat în C++.

9

Page 10: compresia informatiei textuale

CAPITOLUL 1. METODE DE COMPRESIE

1.1. CONCEPTE GENERALE DESPRE COMPRESIA DATELOR

Noţiunea de comprimare a datelor a apărut din necesitatea evidentă de a atinge rate mari de

transfer în reţele sau de a stoca o cantitate cât mai mare de informaţii folosind cât mai puţin spaţiu.

Compresia datelor este necesară în zilele noastre şi este foarte des folosită, mai ales în domeniul

aplicaţiilor multimedia.

Un compresor de date este o aplicaţie care, pe baza unuia sau mai multor algoritmi de

compresie, diminuează spaţiul necesar stocării informaţiei utile conţinute de un anumit set de date.

Pentru orice compresor de date este necesară condiţia de existenţă a cel puţin unui decompresor

care, pe baza informaţiilor furnizate de compresor, să poată reconstitui informaţia care a fost

comprimată. În cazul în care nu există un decompresor, atunci datele comprimate devin inutile

pentru utilizator deoarece acesta nu mai are acces la informaţia stocată în arhivă (o arhivă

reprezintă rezultatul obţinut în urma utilizării unui compresor).

Un compresor de date este format din următoarele elemente:

- una sau mai multe surse de informaţie;

- unul sau mai mulţi algoritmi de compresie;

- una sau mai multe transformări.

Sursa de informaţie pentru un compresor poate fi constituită de unul sau mai multe fişiere sau de

un flux de date care a fost transmis compresorului prin intermediul unei reţele. Datele arhivate

urmează să fie stocate într-o arhivă care urmează să fie păstrată local sau urmează să fie transmisă

mai departe.

Există două categorii principale de algoritmi pentru compresia datelor:

1. algoritmi de compresie fără pierderi de date

1.1. algoritmi entropici de compresie a datelor (algoritmi care elimină redundanţa din cadrul

seturilor de date):

- algoritmul Huffman

- algoritmul Shannon-Fano

- algoritmi de compresie aritmetică (acesta este cel mai performant algoritm entropic

cunoscut).

1.2. algoritmi bazaţi pe dicţionare

- Lempel Ziff 77 (LZ77), Lempel Ziff 78 (LZ78)

- variante ale algoritmilor din categoria LZ

1.3. transformări fără pierderi de date

- Run Length Encoding (RLE)

10

Page 11: compresia informatiei textuale

- Burrow-Wheeler Transform (BWT)

- transformarea delta

2. algoritmi de compresie cu pierderi de date

2.1. algoritmi folosiţi pentru compresia audio care se bazează pe proprietăţile undelor sonore şi

perceperea lor de către om;

2.2. algoritmi utilizaţi pentru compresia imaginilor digitale;

2.3. algoritmi utilizaţi pentru compresia datelor video.

Algoritmii de compresie aparţinând celei de-a doua clase (cea cu pierderi de date) se folosesc

împreună cu cei din prima pentru atingerea unor rate mari de compresie [14].

Metodele de compresie text pot fi împărţite în doua categorii: statistice şi ne-statistice.

Metodele statistice utilizează un model probabilistic al sursei de informaţie. Astfel de coduri sunt

Shannon-Fano sau Huffman. Metodele ne-statistice utilizează alte principii de codare cum sunt cele

bazate pe dicţionare, deci nu folosesc probabilităţile simbolurilor.

In cazul metodelor statistice, un punct important în compresia datelor fără pierdere de

informaţie este dat de posibilitatea organizării/descompunerii compresiei în două funcţii: modelare

şi codificare. Metoda statistică are la bază folosirea probabilităţilor simbolurilor în stabilirea

cuvintelor de cod. Daca modelul sursei este stabilit înaintea etapei de codare, şi rămâne neschimbat

în timpul codării, metoda de compresie este una statică. Algoritmul de compresie este unul

„mecanic” prin înlocuirea fiecărui simbol la sursei cu cuvântul de cod corespunzător, şi transmiterea

acestuia pe canal. Metodele statice presupun transmiterea pe canal a informaţiilor despre modelului

sursei şi/sau a codului folosit, astfel încât decodorul să poate efectua operaţia de decodare. Canalul

de comunicaţie se considera fără erori.

O metodă statică este aceea în care transformarea mulţimii mesajelor în cuvinte de cod este

fixată înainte de începerea transmisiei, astfel încât un mesaj dat este reprezentat prin acelaşi cuvânt

de cod de fiecare data când apare în mesajul global. Un exemplu de codare statică, bazată de

cuvinte de cod, este codarea Huffman (statică). Aici asignarea cuvintelor la mesajele sursei este

bazată pe probabilităţile cu care mesajele sursei apar în mesajul global. Mesajele care apar mai

frecvent sunt reprezentate prin cuvinte de cod mai scurte; mesajele cu probabilităţi mici sunt

reprezentate de cuvinte de cod mai lungi.

La fiecare pas de codare este necesar să se estimeze probabilităţile de utilizare a simbolurilor

sursei. Codorul preia distribuţia de probabilitate şi stabileşte codul folosit pentru compresie. Se

estimează probabilităţile de utilizare a simbolurilor sursei. Codorul preia distribuţia de probabilitate

şi stabileşte codul folosit pentru compresie.

11

Page 12: compresia informatiei textuale

Figura 1.1.1. Structura compresiei statice fără pierdere de informaţie

Figura 1.1.2. Structura compresiei adaptive fără pierdere de informaţie (lossless compression)

Un cod este dinamic (dynamic) dacă codarea mulţimii mesajelor sursei primare se schimbă în

timp. De exemplu, codarea Huffman dinamică presupune estimarea probabilităţilor de apariţie în

timpul codării, în timp ce mesajul este procesat. Asignarea cuvintelor de cod mesajului de transmis

(de codificat) se bazează pe frecvenţele de apariţie la fiecare moment de timp. Un mesaj x poate fi

reprezentat printr-un cuvânt de cod scurt la începutul transmisiei pentru că apare frecvent la

începutul transmisiei, chiar dacă probabilitatea sa de apariţie raportată la întreg ansamblu este mică.

Mai târziu, cuvintele de cod scurte pot fi asignate altor mesaje dacă frecvenţa de apariţie se

schimbă.

Codurile dinamice se mai numesc şi coduri adaptive, care va fi folosit mai departe, întrucât ele

se adaptează la schimbările mesajului în timp. Toate metodele adaptive sunt metode într-un singur

pas: numai o singura trecere (scan) a realizării sursei este necesară. În opoziţie, codarea Huffman

statică este în doi paşi: un pas pentru determinarea probabilităţilor şi determinarea codului, şi – al

12

Page 13: compresia informatiei textuale

doilea par, pentru codare. Metodele într-un singur pas sunt mai rapide. În plus, în cazul metodelor

statice, codul determinat la primul pas trebuie transmis decodorului, împreună cu mesajul codat.

Codul se poate transmite la începutul fiecărei transmisii sau acelaşi cod poate fi folosit pentru mai

multe transmisii.

În metodele adaptive, codorul defineşte şi redefineşte dinamic cuvintele de cod, în timpul

transmisiei. Decodorul trebui să definească şi să redefinească codarea în acelaşi mod, în esenţa prin

„învăţarea” cuvintelor de cod în momentul recepţionării acestora. Dificultatea primară a utilizării

codării adaptive este necesitatea folosirii unui buffer între sursă şi canal. Reţelele de date alocă,

deci, resurse de comunicaţie sursei, în sensul alocării de memorie (buffere) ca parte a sistemului de

comunicaţie.

În final există şi metode hibride, care nu sunt complet statice sau complet dinamice. Într-un

astfel de caz simplu, emiţătorul şi receptorul folosesc o mulţime de coduri statice (codebooks). La

începutul fiecărei transmisii, emiţătorul alege şi trebuie să transmită numărul (numele,

identificatorul) codului folosit.

Compresia textelor este un subset al compresiei datelor şi se ocupă cu acei algoritmi care au

proprietatea ca toată informaţia prezentă în fişierul original, fişier necompresat, este prezentă în

fişierul comprimat şi deci în fişierul expandat. Nu se acceptă o pierdere de informaţie, chiar dacă

algoritmul de compresie poate adăuga informaţie redundantă necesară pentru a efectua în bune

condiţii decompresia (expandarea). Aceste tehnici garantează obţinerea unui fişier expandat identic

cu cel original, existent înaintea compresiei. Aceşti algoritmi se numesc fără pierderi ( lossless),

reversibili sau fără zgomot (noiseless).

Termenul text trebuie interpretat în sens larg. Este clar că un text poate fi scris în limbaj natural

sau poate fi generat de translatoare (aşa cum fac diverse compilatoare). Un text poate fi considerat

că o imagine (rezultată dintr-o scanare, aşa cum este cazul telefaxului) sau alte tipuri de structuri ce

furnizează date în fişiere liniare.

1.2. ALGORITMI ENTROPICI

Majoritatea surselor de informaţie din domeniul calculatoarelor şi al aplicaţiilor internet sunt

discrete. Pentru a descrie o sursă discretă fără memorie (SDFM) sunt necesare două mărimi:

alfabetul sursei şi probabilităţile de furnizare a fiecărui simbol:

; (1.2.1.)

13

Page 14: compresia informatiei textuale

Dacă numărul de simboluri este finit, sursa se numeşte discretă. Dacă la un moment dat se emite

sigur un simbol atunci sursa este completă. Sursa este fără memorie dacă evenimentele sk sunt

independente, adică furnizarea unui simbol la un moment dat nu depinde de simbolurile furnizate

anterior. Totalitatea simbolurilor unei surse formează alfabetul sursei. Orice succesiune finită de

simboluri, în particular un singur simbol, se numeşte cuvânt. Totalitatea cuvintelor formate cu un

anumit alfabet se numeşte limbaj.

Informaţia furnizată de un simbol al sursei este:

[biţi] (1.2.2)

Entropia este informaţia medie pe simbol sau, altfel formulat, este incertitudinea medie asupra

simbolurilor sursei S, sau informaţia medie furnizată de un simbol.

[bit/simbol] (1.2.3)

Noţiunea de informaţie trebuie legată şi de timp, întrucât, cel puţin din punct de vedere al

utilizatorului informaţiei, nu este indiferent dacă furnizarea unui simbol are loc într-o oră sau într-

un an. În acest sens, se defineşte debitul de informaţie al unei surse discrete.

Definiţie - Debitul de informaţie cantitatea medie de informaţie furnizată în unitatea de timp.

(1.2.4)

unde este durata medie de furnizare a unui simbol:

(1.2.5)

Definiţie: Redundanţa unei surse discrete de informaţie este diferenţa dintre valoarea maximă

posibilă a entropiei şi entropia sa:

R(S)= max{H(S)} - H(S) biti / simbol (1.2.6)

In cadrul compresiei se are în vedere sistemul de transmitere a informaţiei din figura 1.1.1.

Procesul de transformare a mesajelor sursei într-un mesaj codat se numeşte codare (coding sau

encoding, în engleza). Algoritmul care construieşte transformarea se numeşte codor (encoder, în

engleza). Decodorul realizează transformarea inversă, generând mesajul în forma sa originală.

Canalul se consideră fără erori, deci este canal fără perturbaţii. Alfabetul codului este, în

general, X={xk | k=1,2,...,D}. Pentru cazul compresiei sa va considera cazul binar.

14

Page 15: compresia informatiei textuale

Codificarea a apărut ca o necesitate de schimbare a formei de prezentare a informaţiei în scopul

prelucrării sau transmiterii acesteia. Codificarea poate fi uniformă (bloc), dacă se foloseşte aceeaşi

lungime a cuvintelor de cod, sau neuniformă (variabilă), când lungimea cuvintelor de cod nu este

constantă. Operaţia inversă codificării se numeşte decodificare, adică transformarea inversă ce

permite obţinerea formei iniţiale de reprezentare a informaţiei.

1.2.1. CODAREA BINARĂ HUFFMAN STATICĂ

Acest procedeu se bazează pe ideea de a partiţiona mulţimea mesajelor

sursei S = {s1, s2 ,..., sN} în submulţimile S0 şi S1 , astfel încât suma probabilităţilor

mesajelor incluse în S0 să fie cât mai apropiată de suma probabilităţilor

mesajelor incluse în S1. La rândul lor, submulţimile S0 şi S1 pot fi partiţionate în

submulţimile S00 şi S01 , respectiv S10 şi S11 astfel încât suma probabilităţilor

mesajelor incluse în cele patru submulţimi să fie cât mai apropiate posibil.

Procedeul se continuă în mod similar până când se obţin submulţimi ce conţin

un singur mesaj.

În felul acesta, pentru orice distribuţie a sursei S ce urmează a fi codată se

va obţine un cod compact, adică lungimi medii ale cuvintelor de cod ce nu mai

pot fi micşorate prin nici un alt

procedeu de codare.

Pentru ca partiţiile să satisfacă condiţiile menţionate, se procedează astfel:

1. Se ordonează mulţimea mesajelor sursei S în ordinea descrescătoare a

probabilităţilor, obţinându-se astfel mulţimea ordonată R0 = {s1, s2, …, sN} ,

cu p(s1) ≥ p(s2) ≥ … p(sN), cu schimbarea eventuală a indicilor mesajelor

pentru realizarea ordonării respective;

2. Se reunesc ultimele două mesaje (de probabilităţile cele mai mici) într-un

nou mesaj, notat cu r1, căruia i se alocă o probabilitate egală cu suma

probabilităţilor mesajelor componente.

Se ordonează din nou mesajele în ordinea descrescătoare a

probabilităţilor, formându-se astfel prima sursă restrânsă R0 = {s1, s2,…,r1,…}

, cu p(s1) ≥ p(s2) ≥ … p(r1) ≥ ….

3. Se reunesc ultimele două mesaje din sursa restrânsă R1 într-un nou mesaj r2, de probabilitate

egală cu suma probabilităţilor mesajelor componente. Se ordonează mesajele în ordine

descrescătoare, formându-se astfel sursa restrânsă R2. În mod analog, din R2 se formează

sursa restrânsă R3 şi aşa mai departe, până când se obţine o sursă restrânsă formată numai

15

Page 16: compresia informatiei textuale

din două mesaje, Rn = {rn, rn-1}, cu p(rn) ≥ p(rn-1). De fapt, rn va fi S0 şi rn-1 va fi S1 sau

invers.

Din modul de formare a surselor restrânse Ri, rezultă că mulţimea S a mesajelor poate fi

partiţionată în două submulţimi rn şi rn-1 astfel încât probabilităţile p(rn) şi p(rn-1) sunt cele

mai apropiate posibil. La rândul lor, submulţimile rn şi rn-1, pot fi partiţionate în alte două

submulţimi, de probabilităţile cele mai apropiate posibil. Partiţionările se continuă până se

obţin submulţimi care conţin un singur mesaj.

4. Cuvintele de cod corespunzătoare fiecărui mesaj se obţin astfel:

- submulţimii rn i se alocă simbolul "0" (sau "1");

- submulţimii rn-1, i se alocă simbolul "1" (sau "0");

- la fiecare partiţionare se alocă arbitrar celor două submulţimi "0" sau "1", operaţia

continuându-se până se obţin submulţimi ce conţin un singur mesaj sk, k = .

Deoarece alocarea lui "0" şi "1" este arbitrară la fiecare partiţionare, rezultă că unei surse S i se

pot ataşa o multitudine de coduri instantanee, toate, însă, având aceeaşi lungime medie a cuvintelor

de cod, care nu mai poate fi micşorată prin nici un alt procedeu de codare a mesajelor luate

individual.

Dacă sursa primară S poate furniza N mesaje, atunci submulţimea restrânsă R1, va avea N-1

mesaje, submulţimea restrânsă R2 va conţine N-2 mesaje şi aşa mai departe, ultima submulţime

restrânsă Rn va conţine N − n mesaje, care sunt rn şi rn-1, adică se poate scrie:

N − n = 2 => n = N − 2 (1.2.1.1)

Dacă submulţimii rn i se alocă simbolul "0" şi submulţimii rn-1 simbolul "1", celor N-2

partiţionări putându-li-se aloca arbitrar "0" sau "1", rezultă un total de 2N−2 posibilităţi de codare.

Dacă, însă, submulţimii rn i se alocă simbolul "1", iar submulţimii rn-1 simbolul "0", mai rezultă 2N−2

posibilităţi de codare. Rezultă, deci, că prin acest procedeu de codare se pot realiza 2N−2 + 2N−2 = 2N−1

coduri instantanee, toate având toate aceeaşi lungime medie a cuvintelor de cod.

Prin definiţie, se numeşte cod compact, codul care realizează lungimea medie minimă a

cuvintelor de cod. Deoarece prin procedeul de codare Huffman se obţine cea mai mică lungime

medie a cuvintelor de cod, înseamnă că prin acest procedeu se obţin coduri instantanee compacte.

Evident, un cod absolut optimal este şi compact, reciproca nefiind totdeauna valabilă [9].

16

Page 17: compresia informatiei textuale

Exemplu: MARIA ARE MERE

a. b. c.

Figura 1.2.1.1. Procedeul de codare Huffman

1.2.2. CODAREA BINARĂ SHANNON – FANO

Acest procedeu se aplică de obicei în cazurile particulare în care probabilităţile de furnizare ale

mesajelor sunt puteri întregi pozitive ale lui (1/2), adică, de forma:

p(sk)= , (1.2.2.1)

unde lk este un număr întreg pozitiv.

Dacă relaţia (1.2.2.1) este satisfăcută, mulţimea S = {s1, s2 ,..., sN} a mesajelor sursei discrete de

informaţie ce urmează a fi codată poate fi partiţionată în două submulţimi S0 şi S1, astfel încât suma

probabilităţilor mesajelor incluse în S0, notată cu p(S0), să fie egală cu suma probabilităţilor

mesajelor incluse în S1, notată cu p(S1). Sursa S fiind totdeauna completă, se poate scrie:

(1.2.2.2)

Submulţimile S0 şi S1 se pot partiţiona la rândul lor în S00 şi S01, respectiv în S10 şi S11, astfel

încât suma probabilităţilor mesajelor incluse în cele patru submulţimi să fie aceeaşi, adică se poate

scrie relaţia:

p(S00) = p(S01) = p(S10) = p(S11) = (1.2.2.3)

Se procedează în mod analog până se obţin submulţimi care conţin un singur mesaj. Se observă

că fiecare submulţime are suma probabilităţilor mesajelor incluse egală cu o putere întreagă a lui

(1/2). Puterea întreagă este egală cu numărul indicilor submulţimii respective Dacă submulţimea

conţine un singur mesaj, sk, şi are un număr de indici egal cu lk, atunci se poate scrie:

(1.2.2.4)

17

Page 18: compresia informatiei textuale

de unde rezultă necesitatea ca sursa S ce urmează a fi codată să-şi furnizeze mesajele cu

probabilităţi egale cu 1/2 la o putere întreagă, pozitivă.

Sursa fiind completă, se poate scrie:

(1.2.2.5)

Înlocuind (1.2.2.4) în (1.2.2.5), rezultă:

(1.2.2.6)

Cuvintele de cod se vor obţine, atunci, astfel:

1. Se atribuie simbolul "0" submulţimii 0 S şi simbolul "1" submulţimii 1 S , (sau invers), astfel

că toate cuvintele corespunzătoare mesajelor incluse în S0 vor începe cu "0" şi toate

cuvintele corespunzătoare mesajelor incluse în S1 , vor începe cu "1" (sau invers);

2. Se alocă submulţimilor S00 şi S10 ca al doilea mesaj "0", iar submulţimilor S01 şi S11 ca al

doilea mesaj "1" (sau invers). În felul acesta, cuvintele de cod corespunzătoare mesajelor

incluse în S vor începe cu 00, cuvintele de cod corespunzătoare

mesajelor incluse în S10 vor începe cu 10 şi aşa mai departe, cuvintele

de cod corespunzătoare mesajelor induse în S11 vor începe cu 11.

3. Operaţia se continuă în acelaşi mod, până când în fiecare submulţime

rămâne un singur mesaj, căruia îi va corespunde cuvântul de cod

format din şirul de indici ai submulţimii respective.

Deoarece la fiecare partiţionare în două submulţimi atribuirea mesajelor

"0" şi "1" este arbitrară, rezultă că prin acest procedeu se pot obţine o

multitudine de coduri instantanee, dar toate absolut optimale.

În principiu, procedeul de codare descris s-ar putea aplica în general,

adică şi atunci când relaţia (1.2.2.6) nu este satisfăcută. În acest caz,

partiţionările în submulţimi trebuie efectuate astfel încât suma

probabilităţilor mesajelor incluse în submulţimile respective să fie cât mai

apropiate. Atribuind simbolurile "0" şi "1" ca în procedeul descris, se obţin

totdeauna coduri instantanee.

Cu cât sumele probabilităţilor mesajelor componente ale submulţimilor

respective vor fi mai apropiate, cu atât lungimea medie a cuvintelor de cod

va fi mai mică [14].

18

Page 19: compresia informatiei textuale

a. b. c. d.

Figura 1.2.2.1. Procedeul de codare Shannon – Fano

1.2.3. CODAREA BINARĂ HUFFMAN DINAMICĂ (ADAPTIVĂ)

Procedeul de codare binară Huffman descris anterior necesită cunoaşterea probabilităţilor cu

care sursa îşi furnizează mesajele. În literatura de specialitate această situaţie este cunoscută şi sub

denumirea de codare Huffman statică. În cazul în care probabilităţile de furnizare a mesajelor nu

sunt cunoscute, se foloseşte codarea Huffman dinamică sau adaptivă.

În descrierea codării Huffman dinamice sau adaptive se vor folosi următoarele notaţii şi noţiuni:

- Nodurile terminale sau externe din graful arborescent se vor numi frunze, corespunzând

mesajelor sursei;

- Cuvântul de cod pentru un mesaj se obţine parcurgând arborele de la rădăcină la frunza

corespunzătoare simbolului. Prin convenţie, zero se va aloca unei ramuri din stânga şi unu,

unei ramuri din dreapta;

- Nodurile de la extremităţile ramurilor care pleacă dintr-un nod reprezintă fiii sau copiii

nodului respectiv, numit nod părinte;

- Ponderea unui nod extern este numărul de apariţii a simbolului corespunzător frunzei

respective până la acel moment;

- Ponderea unui nod intern este suma ponderilor fiilor nodului respectiv;

- Dacă sursa ce urmează a fi codată furnizează n mesaje, în graf există 2n+1 noduri interne şi

externe, numerotate în continuare y1, …,y2n+1. Dacă xj este ponderea nodului cu numărul yj,

trebuie să existe relaţia x1 ≤ x2 ≤ …≤ x2n+1 ;

- Nodurile y2j−1 şi y2j sunt fii ai aceluiaşi nod părinte, iar numărul de ordine al părintelui este

mai mare decât y2j−1 şi y2j.

Ultimele două caracteristici se numesc de fraternitate şi orice arbore care are această proprietate

este un arbore Huffman. În codarea Huffman dinamică, nici emiţătorul, nici receptorul nu cunosc

statistica sursei la începerea transmisiei, astfel încât arborii de la transmisie şi recepţie constau

dintr-un singur nod corespunzător mesajelor încă netransmise, de pondere zero. Pe parcursul

transmisiei, nodurile corespunzătoare mesajelor transmise sunt adăugate arborelui, care este

19

Page 20: compresia informatiei textuale

reconfigurat pe baza unui procedeu de actualizare. Înaintea începerii transmiterii se stabileşte un

cod pentru fiecare mesaj, după cum urmează:

Dacă sursa furnizează mesajele s1, s2, ..., sN, se determină parametrii e şi r, astfel încât N =

2e + r, 0 ≤ r < 2e. Mesajul sk este codat prin reprezentarea pe e +1 biţi a lui k −1, dacă 1≤ k ≤ 2r, în

caz contrar, sk este reprezentarea pe e biţi a lui k − r −1. De exemplu, pentru N = 26→r =10 şi e =

4→s1 = 00000, s2 = 00001,..., s22=1011.

1.2.4. COMPRESIA ARITMETICĂ

Cea mai eficientă metodă entropică de compresie a datelor care elimină

aproape complet redundanţa unei surse de informaţie este compresia

aritmetică.

Algoritmul de compresie. Compresia aritmetică a fost descoperită de

către cercetătorii Peter Elias, Jorma J. Rissanen şi Richard C. Pasco. Ideea care

stă la baza acestei metode de compresie este aceea de codifica un şir de

simboluri folosind un singur cod şi nu câte un cod pentru fiecare simbol în

parte. De fapt, orice şir de simboluri generat de o sursă de informaţie este

codificat

folosind un număr real cuprins în intervalul [0, 1).

Datorită faptului că această metodă de compresie este entropică avem

nevoie de probabilităţile pi (0 i < m, unde m este numărul de simboluri pe

care le poate genera o sursă de informaţie S) de apariţie ale simbolurilor.

Similar algoritmului Huffman se pot construi variantele statică, semi-statică

şi dinamică ale algoritmului de compresie aritmetică.

În cazul variantei semistatice probabilităţile se calculează pe baza

simbolurilor generate de sursa de informaţie S, fiind nevoie de două parcurgeri

ale şirului de simboluri la fel ca în cazul algoritmului Huffman.

Considerăm un interval [a, b) [0, 1), b > a. Fiecărui simbol care poate fi

generat de o sursă de informaţie S i se ataşează un subinterval al lui [a, b) cu

proprietatea că lungimea subintervalului corespunzător unui simbol este direct

proporţională cu probabilitatea de apariţie a simbolului respectiv şi oricare

două subintervale corespunzătoare la două simboluri distincte nu au puncte de

intersecţie.

Fie Pi probabilitatea cumulată a simbolului Ai, P0 = 0 şi Pi = p0 + ...+ pi-1, 0

i < m, şi fie l = b - a lungimea intervalului [a, b). Din faptul că suma tuturor

20

Page 21: compresia informatiei textuale

probabilităţilor de apariţie ale simbolurilor Ai, 0 i < m este 1, rezultă că Pi

[0, 1).

Fiecărui simbol Ai i se va ataşa intervalul [a + l · Pi , a + l · (Pi + pi)).

Lungimea subintervalului corespunzător unui simbol Ai este egală cu l · pi.

În cazul în care o sursă de informaţie nu generează toate simbolurile pe care

le poate genera, atunci probabilitatea de apariţie a unor simboluri poate fi 0

deci, lungimea subintervalelor ataşate simbolurilor care nu sunt generate este

0, caz în care avem intervale degenerate, şi, dacă pi este 0 şi pi+1 este diferit de

0, atunci intersecţia dintre subintervalele corespunzătoare celor două simboluri

este diferită de mulţimea vidă şi nu mai sunt respectate condiţiile enunţate mai

sus. Dacă se elimină subintervalele de lungime 0, atunci condiţiile sunt

respectate.

Algoritmul de compresie aritmetică se bazează pe acest ă împărţire a unui

interval.

Faptul că avem intervale degenerate nu va influenţa funcţionalitatea

algoritmului, deoarece o sursă de informaţie nu va genera niciodată simboluri

care au probabilitatea de apariţie 0.

Algoritmul de codificare constă în alegerea unui subinterval al intervalului

[0, 1) corespunzător primului simbol generat de o sursă S şi apoi, ca nou

interval se consideră subintervalul ales şi se alege subintervalul corespunzător

celui de-al doilea simbol.

Algoritmul de compresie aritmetică folosit pentru a codifica un şir de

simboluri generat de o sursă de informaţie S este următorul:

1. considerăm intervalul care are extremitatea din stânga a şi lungimea l;

2. fie pi probabilităţile de apariţie ale simbolurilor care pot fi generate de o

sursă de informaţie S;

3. fie Pi probabilităţile cumulate ale simbolurilor;

4. pentru fiecare simbol Ai generat de sursa de informaţie S execută:

- a a + l · Pi;

- l l · pi;

5. rezultat a + l / 2.

În ciclul repetitiv prezentat anterior se schimbă intervalul iniţial cu

subintervalul corespunzător simbolului generat de sursa de informaţie S.

21

Page 22: compresia informatiei textuale

Datorită faptului că intervalele ataşate simbolurilor care au probabilitatea de

apariţie diferită de 0 sunt disjuncte, fiecare simbol este unic determinat de

orice număr care aparţine subintervalului corespunzător.

În teorie se foloseşte ca interval iniţial intervalul [0, 1), deci cu capătul din

stânga 0 şi lungimea 1.

După parcurgerea şirului de simboluri generat de o sursă de informaţie se

transmite un număr real din intervalul [0, 1) care reprezintă codificarea şirului

de simboluri. Numărul real trebuie transmis cu o precizie foarte mare. Acest

număr este dat, de obicei, de mijlocul ultimului interval calculat cu ajutorul

algoritmului prezentat anterior: a + l/2.

Algoritmul de codificare mai poate fi construit folosind limitele inferioară şi

superioară ale unui interval în locul limitei inferioare şi lungimii intervalului. În

acest caz, după linia în care se calculează lungimea intervalului se adaugă linia

b a + l.

Dacă intervalul iniţial este [0, 1), atunci precizia cu care trebuie calculată

limita din stânga pentru un simbol cu probabilitatea pi, 0 i < m, este de -log2

pibiţi.

Dacă analizăm modul de construire al numărului real plecând de la

intervalul [0; 1), atunci precizia cu care trebuie transmis numărul care

reprezintă mijlocul ultimului interval calculat este de biţi,

unde n reprezintă numărul de simboluri generate de sursa S.

Se poate observa foarte uşor că diferenţa dintre entropia şirului generat de

sursa de informaţie S şi numărul mediu de biţi necesari transmiterii unui simbol

este foarte mică (mai mică de 1 bit).

De exemplu, fie o sursă de informaţie S care poate genera simbolurile 'a', 'b'

şi 'c' cu probabilităţile 1/2, 1/4 şi 1/4.

În figura 1.2.4.1. se poate observa modul de codificare a şirului de simboluri

'abac'. Precizia cu care trebuie transmis rezultatul este de 7 biţi (rezultatul este

0,3046875 = 0,01001112 ceea ce înseamnă că se transmit biţii 0100111,

deoarece numărul este cuprins între 0 şi 1 şi ne interesează doar porţiunea

care se află după virgulă).

22

Page 23: compresia informatiei textuale

Figura 1.2.4.1. Procesul de codificare aritmetică

Pe lângă rezultatul obţinut în urma codificării mai trebuie transmis

dicţionarul care este format din probabilităţile de apariţie ale simbolurilor care

pot fi generate de sursa de informaţie S.

Motivul pentru care rezultatul îl reprezintă mijlocul ultimului interval

calculat, şi deci o creştere a preciziei cu un bit, este acela că în practică există

situaţii în care reprezentarea în baza 2 a celor două limite ale intervalului,

folosind aceeaşi precizie, sunt egale pentru că microprocesoarele existente

realizează operaţii cu numere reale cu o precizie finită de până la 80 de biţi.

Din punct de vedere teoretic este suficient ca rezultatul să fie constituit de

limita inferioară a ultimului interval găsit, calculată cu precizia de biţi,

deoarece, bazându-ne pe cele enunţate anterior, un simbol căruia i s-a ataşat

intervalul [a, b) este unic determinat de orice număr real care aparţine

intervalului.

Algoritmul de decompresie. Pentru a decodifica un număr real, cuprins

între 0 şi 1, a cărui lungime în biţi se cunoaşte, trebuie să avem probabilităţile

de apariţie ale simbolurilor care au fost folosite în procesul de codificare şi

numărul total n al simbolurilor care au fost codificate.

23

Page 24: compresia informatiei textuale

Figura 1.2.4.2. Procesul de decodificare aritmetică

La începutul procesului de decodificare considerăm intervalul [a, a + l),

unde a = 0 şi l = 1. Fiecărui simbol îi corespunde un subinterval al acestui

interval.

În continuare se caută subintervalul căruia îi aparţine numărul care trebuie

decodificat. După ce s-a găsit acest subinterval se transmite simbolul

corespunzător acestuia şi noul interval devine cel găsit. Acest pas se execută

până în momentul în care am decodificat n simboluri.

Dacă nu se transmite numărul n de simboluri care au fost codificate, în

momentul compresiei alfabetul sursei S de informaţie se poate extinde cu un

simbol suplimentar care are semnificaţia de sfârşitul codificării care se va

codifica după ce sursa S nu mai generează simboluri. În concluzie, în momentul

în care numărul se va afla în subintervalul corespunzător simbolului de sfârşit

de codificare, decodificarea se va încheia.

În figura 1.2.4.2. se poate observa modul de decodificare a numărului

0,3046875 pentru alfabetul format din simbolurile 'a', 'b' şi 'c', care au

probabilităţile 1/2, 1/4 şi 1/4, şi numărul de simboluri care au fost codificate n

= 4.

La primul pas se observă că numărul rez aparţine subintervalului [0, 0,5),

subinterval corespunzător simbolului 'a', deci acest simbol se va transmite şi

noul interval va deveni [0, 0,5).

24

Page 25: compresia informatiei textuale

La al doilea pas numărul rez aparţine subintervalului [0,25, 0,375) care

corespunde simbolului 'b', acest simbol se va transmite şi noul interval este

[0,25, 0,375).

La al treilea pas numărul rez aparţine subintervalului [0,25, 0,3125) care

corespunde simbolului 'a', acest simbol se va transmite şi noul interval este

[0,25, 0,3125).

La al patrulea pas numărul rez aparţine subintervalului [0,296875, 0,3125)

care corespunde simbolului 'c', acest simbol se va transmite şi noul interval

este [0,296875, 0,3125). În acest moment se încheie procesul de decodifica

decodificare deoarece au fost decodificate n = 4 simboluri. În timpul

decodificării a fost transmis şirul de simboluri 'abac'.

Detalii de implementare. Datorită faptului că pentru date de dimensiuni

mari precizia cu care trebuie transmis rezultatul devine foarte mare,

calculatoarele nu deţin resurse suficiente pentru a efectua operaţii cu numere

reale cu precizie mare. De exemplu, există situaţii când trebuie folosită o

precizie de 8 · 105 biţi sau chiar mai mare, în timp ce calculatoarele moderne

au o precizie de cel mult 128 de biţi. În acest caz, algoritmii prezentaţi anterior

nu se pot utiliza în practică.

Toate implementările performante ale acestui algoritm nu utilizează operaţii

cu numere reale, ci folosesc operaţii cu numere întregi reprezentate pe 16 sau

32 de biţi pentru a evita erorile de calcul care apar când se efectuează operaţii

cu numere reale reprezentate în virgulă mobilă. În unele implementări, cele

două operaţii de înmulţire, care apar în algoritmii prezentaţi, au fost înlocuite

cu adunări şi deplasări pe biţi. Cu toate că s-a obţinut o scădere a timpului de

execuţie pentru date de dimensiuni mari, aceşti algoritmi nu mai codifică

informaţia la fel de eficient. În practică se folosesc implementări ale algoritmilor

de codificare şi decodificare mult mai performante bazate pe folosirea

noţiunilor de aritmetică legate de modul de calcul folosind baze de numeraţie

puteri ale lui 2 (de obicei se lucrează în bazele 28 sau 216) în funcţie de tipul

de calculator şi sistem de operare pe care se va folosi programul de

compresie/decompresie.

Compresia aritmetică se foloseşte în combinaţie cu alte metode şi se obţine

o reducere considerabilă a conţinutului unui fişier sau a datelor transmise

printr-o reţea de

25

Page 26: compresia informatiei textuale

calculatoare (internet, reţea locală etc.).

Această metodă de compresie a datelor nu este foarte răspândită deoarece

compania IBM deţine patente de inventator asupra câtorva algoritmi

performanţi de compresie aritmetică.

Majoritatea programelor de compresie bazate pe codificarea aritmetică

folosesc modelul cvasi-aritmetic. În cadrul acestui model, probabilităţile

cumulate se recalculează în momentul în care cea mai mare dintre probabilităţi

atinge o valoare prag Prg, şi nu după fiecare simbol generat de o sursă de

informaţie. Acest lucru duce la o scădere a timpului necesar unui program de

compresie pentru a codifica un şir de simboluri [13].

1.3. ALGORITMI PE BAZĂ DE DICŢIONAR

Tehnicile de dicţionar ţin seama de structura datelor pentru a creşte volumul compresiei. Aceste

tehnici (atât cele statice, cât şi cele dinamice) se bazează pe construcţia unei liste cu cele mai

frecvente structuri care apar, numite modele, şi le codează prin transmiterea unui cuvânt care indică

poziţia lor în listă. Aceste metode de codare sunt utile pentru surse care generează un număr mic de

modele cu frecvenţă ridicată, cum sunt textele şi comenzile de calculator.

În multe aplicaţii ieşirea unei surse este formată din secvenţe de mesaje care formează modele

care se repetă. Un exemplu clasic este un text în care anumite expresii sau cuvinte (modele) revin

constant, în timp ce alte modele apar foarte rar. Esenţa codării pe bază de dicţionar constă în

întocmirea unei liste cu cele mai frecvente modele, acestea fiind codate prin indicarea poziţiei lor în

listă, cunoscută sub numele de index. Astfel, intrarea în codor se împarte în două părţi:

- cu modele cu apariţie frecventă;

- cu modele cu apariţie rară.

Pentru ca această tehnică să fie eficientă, clasa modelelor frecvente şi, implicit, mărimea

dicţionarului, trebuie să fie mult mai mică decât numărul total de modele.

De exemplu, dacă se presupune existenţa a 32 de caractere (litere şi semne de punctuaţie) şi se

codează caracterele individual, fiecare fiind egal probabile, ar fi necesari 5 biţi/caracter. Dacă se

presupun modele formate din 4 caractere, ar rezulta 324=2048576 modele, necesitând 20 biţi/model.

Dacă se presupune că 256 de modele sunt mai frecvente, acestea se grupează într-un dicţionar.

Pentru codarea fiecărui model din cele 256 sunt necesari 8 biţi. Pentru transmiterea unui model care

există în dicţionar, se va transmite un bit de semnalizare (fie acesta 0), urmat de un index de 8 biţi,

26

Page 27: compresia informatiei textuale

care identifică cuvântul din dicţionar. Dacă cuvântul nu este în dicţionar se trimite un bit de

semnalizare (fie acesta 1), urmat de 20 de biţi care codează modelul. Dacă modelul nu este în

dicţionar, se trimit mai mulţi biţi decât în schema originală (adică 21 în loc de 20), iar dacă este în

dicţionar, se transmit 9 biţi în loc de 20.

Eficienţa tehnicii depinde de procentul cuvintelor care se află în dicţionar. Dacă probabilitatea

unui model din dicţionar este p şi, evident, 1-p este probabilitatea ca modelul să nu fie în dicţionar,

atunci numărul mediu de biţi/model este

R=9p+21(1-p)=21-12p (1.3.1)

Pentru ca schema de codare să fie eficientă, R trebuie să fie mai mic decât 20, ceea ce se

întâmplă pentru p ≥ 0,08(3). Dacă toate modelele ar fi egal probabile, probabilitatea fiecăruia este

de aproximativ 0,00025.

În practică se doreşte o rată cât mai mică, ceea ce conduce la condiţia ca p să fie cât mai mare.

Aceasta înseamnă că modelele trebuie selectate atent dintre cele mai frecvente, ceea ce impune o

bună cunoaştere a structurii sursei.

În funcţie de cunoştinţele disponibile pentru construcţia dicţionarului, se poate folosi o codare

statică sau una dinamică.

Tehnica de codare bazată pe dicţionar static este potrivită când sunt disponibile cunoştinţe a

priori despre sursă.

O tehnică de dicţionar static este codarea digram. Dicţionarul este format din toate literele

alfabetului sursei şi cele mai frecvente perechi de două litere, numite digrame. De exemplu, se

presupune că s-a construit un dicţionar de mărime 256, format din 95 caractere ASCII şi 161

digrame care sunt cele mai frecvent utilizate perechi de două caractere. Se codează apoi cele 256 de

modele pe 8 biţi corespunzând celor 95 de caractere ASCII şi celor 161 de digrame. Dacă se

doreşte codarea unei secvenţe de caractere ASCII se citesc primele două caractere din secvenţă şi

se caută dacă există în dicţionar. Dacă da, indexul digramei este codat şi transmis. Dacă nu, primul

caracter al perechii este transmis prin codul corespunzător indexului caracterului, iar al doilea

caracter devine primul caracter al digramei următoare. Codorul mai citeşte un caracter pentru a

completa digrama şi procedura se repetă.

Exemplu:.

Fie sursa cu alfabetul S={a, b , c, d, r} . Pe baza cunoaşterii sursei, se construieşte dicţionarul

din Tabelul 1.3.1.

Tabelul 1.3.1. Formarea dicţionarului

27

Page 28: compresia informatiei textuale

Se presupune că se doreşte a coda secvenţa a b r a c a d a b r a.

Deoarece digrama ab este în dicţionar, aceasta se codează cu 101, apoi se citeşte ra, care nu

există în dicţionar, se codează r cu 100, apoi se citeşte ac, care se codează cu 110. Continuând, se

obţine: 101 100 110 111 101 100 000.

Dacă s-ar transmite pentru fiecare din cele 11 simboluri ale sursei câte 3 biţi (deoarece sunt 5

simboluri diferite), ar rezulta 33 biţi. Prin folosirea acestui dicţionar s-au transmis 7⋅3 = 21

simboluri.

Tabelul 1.3.2. Cele mai frecvente 30 de perechi de caractere dintr-un document de 41.364

caractere

Pereche Număr de

apariţii

Pereche Număr de

apariţii

eb 1128 ar 314

bt 828 at 313

bb 823 bw 309

th 817 te 296

he 712 bs 295

in 512 db 272

sb 494 bo 266

er 433 io 257

ba 425 co 256

tb 401 re 247

en 392 b$ 246

on 385 rb 239

nb 353 di 230

ti 322 ic 229

bi 317 ct 226

Tabelul 1.3.3. Cele mai frecvente 30 de perechi de caractere dintr-un program C de 65.983

caractere

28

Page 29: compresia informatiei textuale

Continuarea Tabelului 1.3.3.

Se observă că cele două tabele sunt foarte diferite. Este uşor de observat că un dicţionar

proiectat pentru compresia documentelor LATEX nu va fi foarte eficient pentru compresia unui

program C, putând conduce la o extensie în loc de compresie.

Frecvent se doreşte a se dispune de tehnici de compresie care să fie capabile să comprime

ieşirea mai multor tipuri de surse, fără cunoaşterea prealabilă a statisticii sursei. Pentru asemenea

aplicaţii se folosesc tehnici de adaptare a dicţionarului la caracteristicile sursei.

Există două tehnici de dicţionar adaptiv, LZ77 şi LZ78, care se datorează lui Jacob Ziv şi

Abraham Lempel, pe care se bazează cele mai multe metode de compresie cu dicţionar adaptiv[14].

1.3.1. ALGORITMUL LZ77

În metoda LZ77 dicţionarul este o porţiune din secvenţa codată anterior. Codorul examinează

secvenţa de intrare printr-o fereastră glisantă, care constă din două părţi:

- un buffer de căutare, care conţine o porţiune din secvenţa tocmai codată;

- un registru care conţine următoarea porţiune a secvenţei ce urmează a fi codată.

În Figura 1.3.1.1, se consideră pentru simplitate că bufferul conţine 8 simboluri, iar registrul, 7,

în practică acestea fiind mult mai mari.

29

Page 30: compresia informatiei textuale

Pentru codarea secvenţei din registru, codorul mută un pointer de căutare înapoi prin buffer,

până găseşte începutul celei mai lungi asemănări cu începutul secvenţei stocate în registru. Distanţa

dintre pointer şi registru se numeşte offset. Numărul simbolurilor consecutive din bufferul de

căutare şi din registru care coincid cu simbolurile din registru, începând cu primul caracter se

numeşte lungimea secvenţei sau a asemănării. Dacă în registru mai există coincidenţe între

caracterele deja codate şi cele ce urmează a fi codate, începând cu primul caracter din registru,

lungimea secvenţei se poate prelungi în acesta. Odată găsită această lungime, codorul codează

secvenţa cu tripletul <o,l,c> , unde o – offsetul, l – lungimea şi c – cuvântul de cod corespunzător

simbolului din registru la care s-a oprit asemănarea.

Figura 1.3.1.1. Procedeul codării algoritmului LZ77

Pentru exemplul din Figura 1.3.1.1. o= 7, l= 4, c= 4. Motivul transmiterii celui de-al treilea

element din triplet este de a evita situaţia când simbolul din registru nu este în buffer. În acest caz o

= 0, l = 0 şi c este codul simbolului însuşi.

Dacă mărimea bufferului de căutare este S , mărimea ferestrei W şi mărimea alfabetului sursei

este A, numărul de biţi necesari codării unui triplet este [log2S]+[log2W]+log2A]. Al doilea este

[log2W], şi nu [log2W-S],deoarece lungimea asemănării poate depăşi dimensiunea bufferului de

căutare.

În exemplul următor sunt evidenţiate situaţiile în care:

- nu există nici o potrivire a caracterului ce urmează a fi codat în fereastră;

- există potrivire;

- secvenţa potrivită se extinde şi în registru.

Fie secvenţa c a b r a c a d a b r a r r a r r a d… care se codează cu metoda prezentată anterior.

Se presupun S=7, W=13. Poziţionarea iniţială a secvenţei în fereastră este dată în Fig. 1.3.1.2.

Secvenţa din bufferul de căutare se transmite în clar.

Figura 1.3.1.2. Poziţionarea iniţială a secvenţei în fereastră pentru LZ77

Pentru nu se găseşte nici o asemănare în bufferul de căutare şi se transmite <0,0,c(d)>. Fereastra

se deplasează cu o poziţie, ca în Figura 1.3.1.3.

30

Page 31: compresia informatiei textuale

Figura 1.3.1.3. Deplasarea ferestrei cu o poziţie pentru căutarea unei asemănări

Căutând în buffer, se găseste potrivire cu a la un offset de 2 (cu l=1), de 4 (l=1) şi de 7, când

lungimea asemănării este 4. Se transmite tripletul <7,4,c(r)> . Se mută fereastra cu 5 caractere, care

reprezintă lungimea asemănării (l=4) + caracterul codat în clar c(r), ca în Figura 1.3.1.4.

Figura 1.3.1.4. Deplasarea ferestrei cu l+1 poziţii pentru căutarea unei noi asemănări

Acum se găseşte o asemănare pentru r la o=1 (l=1) la o=3 (l=3) în buffer, dar prelungind

căutarea şi în registru se obţine lungimea asemănării l=5 şi se transmite <3,5,c(d)> . În acest caz

fereastra se mută cu 6 caractere.

Decodarea. Se presupune că s-a decodat secvenţa c a b r a c a şi s-au recepţionat tripletele

<0,0,c(d)>, <7,4,c(r)>, <3,5,c(d)> . Primul triplet este simplu de decodat, nu există nici o asemănare

în secvenţa decodată şi următorul simbol este d. Secvenţa decodată este acum:

Figura 1.3.1.5. Decodarea primului triplet

Primul element din al doilea triplet este 7, care spune unde se plasează pointerul şi apoi se copie

4 caractere din acel punct.

Figura 1.3.1.6. Decodarea celui de-al doilea triplet

31

Page 32: compresia informatiei textuale

Secvenţa decodată este c a b r a c a d a b r a r. În final se decodează ultimul triplet. Se merge

înapoi cu 3 poziţii şi se copie 5 caractere începând cu acel punct.

Figura 1.3.1.7. Decodarea ultimului triplet

Se observă că asemănarea începe numai în bufferul de căutare, dar se poate extinde şi în

registru. Dacă ultimul caracter din registru ar fi fost r în loc de d, urmat de mai multe repetări de r

a r, întreaga secvenţă de r a r -uri ar fi putut fi codată cu un singur triplet.

Algoritmul LZ77 este o schemă adaptivă foarte simplă, care nu necesită cunoaşterea a priori a

sursei. Autorii algoritmului au arătat că performanţa algoritmului tinde asimptotic la cel mai bun

rezultat ce poate fi obţinut folosind o schemă care cunoaşte în întregime statistica sursei.

În practică există modalităţi de îmbunătăţire a performanţelor algoritmului LZ77. Cea mai

simplă modificare a algoritmului LZ77 şi una dintre cele mai folosite este de a elimina folosirea

unui triplet pentru a coda un singur caracter, ceea ce este foarte ineficient, în special când există un

număr mare de caractere care apar rar. Modificarea pentru eliminarea acestei ineficienţe este de a

adăuga un bit de semnalizare (flag) care să indice dacă ceea ce urmează este cuvânt de cod pentru

un singur simbol. Folosind acest flag, se elimină necesitatea celui de-al treilea element din triplet.

Rămâne de transmis o pereche de valori corespunzătoare offsetului şi lungimii. Acest algoritm este

cunoscut sub denumirea de LZSS.

Dintre arhivatorii uzuali care folosesc algoritmul LZ77, urmat de o codare cu lungime variabilă

sunt PKZip, Zip, LHarc, ARJ [14].

1.3.2. ALGORITMUL LZ78

Algoritmul LZ77 a presupus implicit că modele asemănătoare apar apropiate unele de altele,

folosind această structură a secvenţei stocate în buffer ca dicţionar pentru codare. Aceasta înseamnă

că orice model care apare pe o durată mai mare decât fereastra codorului, nu va fi captat. Cea mai

defavorabilă situaţie este cea în care secvenţa de codat este periodică, cu perioada mai mare decât

bufferul de căutare.

Alegerea lungimii bufferului se face în funcţie de statistica datelor ce urmează a fi codate.

Pentru exemplificare, se presupune că secvenţa de caractere are perioada 9, aşa cum se arată în

Figura 1.3.2.1.

32

Page 33: compresia informatiei textuale

Figura 1.3.2.1. Procedeul codării algoritmului LZ78

În situaţia considerată bufferul are lungimea 8, astfel încât nici un nou simbol nu se potriveşte

cu vreunul din buffer şi va fi reprezentat separat. Cum aceasta implică transmiterea mai multor

simboluri (1 bit de flag pentru LZSS şi un triplet pentru LZ77), rezultatul este o extensie, în loc de

compresie. Dacă, însă, bufferul de căutare era mai lung cu o celulă, secvenţa era comprimată

semnificativ.

Deşi aceasta este o situaţie extremă, sunt circumstanţe mai puţin drastice în care mărimea

limitată a bufferului de căutare ar putea constitui un dezavantaj. Algoritmul LZ78 rezolvă această

problemă, prin renunţarea la bufferul de căutare şi întocmirea unui dicţionar explicit. Acest

dicţionar trebuie construit atât la emisie cât şi la recepţie în acelaşi mod. Intrarea este codată cu un

dublet <i,c>, unde:

i - este indexul corespunzător apariţiei în dicţionar;

c – este codul caracterului ce urmează după secvenţa găsită în dicţionar.

Indexul 0 se foloseşte în cazul negăsirii vreunei asemănări. Fiecare nouă apariţie în dicţionar

este un nou simbol concatenat cu o apariţie deja existentă în dicţionar.

Exemplu: Să se codeze secvenţa d a b b a b/ d a b b a b/ d a b b a b/ d a b b a b/ d u u b/ d u u

b/ d u u. În secvenţa considerată caracterul b/ semnifică spaţiu. Iniţial dicţionarul este gol. Primele

trei ieşiri ale codorului, până la repetarea unuia din caracterele deja codate, sunt codate cu valoarea

indexului egal cu 0, astfel: <0,c(d)>, <0,c(a)>, <0,c(b)> .

Dicţionar iniţial este

Index apariţie

1 d

2 a

3 b

al patrulea simbol este b, care este al treilea element din dicţionar. Dacă se adaugă următorul

simbol, se obţine ba, care nu este în dicţionar, aşa încât se codează aceste 2 simboluri ca <3, 2> şi

se adaugă ca al patrulea element în dicţionar. Continuând astfel, se obţine dicţionarul din Tabelul

1.3.2.1.

Tabelul 1.3.2.1. Formarea dicţionarului aplicând algoritmul LZ78

33

Page 34: compresia informatiei textuale

Se observă că apariţiile din dicţionar devin din ce în ce mai lungi şi dacă acestea se repetă des,

(cum se întâmplă într-un cântec, de exemplu) după un timp, întreaga secvenţă ar putea fi o apariţie

în dicţionar.

Deşi algoritmul LZ78 are abilitatea de a capta modele şi de a le păstra, el are şi dezavantaje

serioase. Cum se vede din exemplu, dicţionarul poate creşte oricât de mult. În practică se doreşte

creşterea dicţionarului până la un anumit moment şi apoi fie simplificarea, fie tratarea lui ca un

dicţionar fix.

1.3.3. ALGORITMUL LZW

Cea mai cunoscută modificare a algoritmului, cunoscută sub numele de varianta LZW, este

făcută de Welch, care a propus o tehnică care înlătură necesitatea de codare a celui de-al doilea

element al perechii < i,c> . Pentru aceasta, dicţionarul trebuie încărcat cu toate literele alfabetului

sursei. În timpul codării are loc şi completarea dicţionarului, astfel: după ce se citeşte prima literă,

al cărei “model”, fie acesta m, se găseşte în dicţionar, se concatenează aceasta cu cea de-a doua

literă, fie aceasta a, pentru a forma un nou model, m*a (* - concatenare). Acest model nu se

găseşte în dicţionar, aşa că se codează m cu indexul din dicţionar şi se adaugă modelul m*a în

dicţionar, la indexul care urmează literelor alfabetului iniţial. Se începe apoi un nou model cu litera

a. Cum aceasta este în dicţionar, se concatenează cu următoarea literă din secvenţa de codat, fie

aceasta b, pentru a forma modelul a*b care se trece în dicţionar la indexul următor, şi aşa mai

departe. Dacă în procesul de completare a dicţionarului se ajunge la un model deja existent în

dicţionar, se concatenează acesta cu caracterul următor, pentru a forma un nou model care se înscrie

în dicţionar şi procesul continuă în acelaşi mod.

În general, dacă prin adăugarea unei litere, a, la un model existent, m, rezultă modelul m*a care

nu este în dicţionar, atunci indexul lui m este transmis la receptor, modelul m*a este adăugat la

dicţionar şi se începe un alt model cu litera a.

34

Page 35: compresia informatiei textuale

Se foloseşte aceeaşi secvenţă utilizată în exemplul anterior: d a b b a b/ d a b b a b/ d a b b a b/

d a b b a b/ d u u b/ d u u b/ d u u şi se codează cu algoritmul LWZ. Se presupune că alfabetul

sursei este {b/, a, b, d, u } şi dicţionarul iniţial este dat în Tabelul 1.3.3.1.

Tabelul 1.3.3.1. Exemplu de dicţionar iniţial pentru codarea LWZ

Codorul întâlneşte întâi litera d. Acest “model” este în dicţionar, aşa că se concateneaza cu litera

următoare formând da. Acest model nu este în dicţionar, aşa că se codează d cu indexul 4 din

dicţionar, se adaugă modelul da în dicţionar la indexul 6 şi se începe un nou model plecând de la

litera a. Cum a este în dicţionar, se concatenează următorul simbol b, pentru a forma modelul

ab, care nefiind în dicţionar, se introduce la indexul 7 şi se începe construcţia unui nou model cu

litera b. Se continuă în acest mod, construind modele de 2 litere până se întâlneşte litera d în a doua

secvenţă d a b b a. În acest moment, ieşirea din codor constă în întregime din indici ai dicţionarului

iniţial, adică 4 2 3 3 2 1 (la a 12-a apariţie în dicţionar). Următorul simbol este a care, concatenat cu

d, conduce la modelul da care este în dicţionar la poziţia 6, aşa că se citeşte următorul simbol, b,

obţinând modelul dab care nu este în dicţionar şi se include la poziţia 12 şi se începe un nou model

de la b. De asemenea, se codează da cu 6. Lungimea apariţiilor în dicţionar creşte pe măsură ce

are loc codarea. Cu cât apariţiile în dicţionar sunt mai lungi, cu atât dicţionarul captează mai mult

din structura secvenţei. Dicţionarul complet pentru codarea secvenţei din exemplu este dat în

Tabelul 1.3.3.2.

Tabelul 1.3.3.2. Exemplu de dicţionar complet pentru codarea LZW

35

Page 36: compresia informatiei textuale

Secvenţa codată este:

4 2 3 3 2 1 6 8 10 12 9 11 7 16 4 5 5 11 21 23 5

Decodarea. Se va decoda secvenţa anterioară, care este intrarea în decodor. Decodorul

porneşte cu acelaşi dicţionar iniţial ca şi codorul. Indexul 4 corespunde literei d, aşa că se

decodează prima literă din secvenţă şi, pentru a simula codorul, se construieşte următorul

element din dicţionar, după cum urmează: Se începe cu prima literă decodată d, care există în

dicţionar, aşa că aceasta nu se mai adăugă. Următoarea intrare este 2, care corespunde lui a. Se

decodează a şi se concatenează cu d, pentru a forma da, al şaselea element care se adaugă în

dicţionar. Următorul model va începe cu a. Următoarele patru intrări 3 3 2 1 corespund literelor

b b a b/ şi generează modelele ab, bb, ba şi ab/ care se trec în dicţionar. Următoarea intrare este

6, care este indexul pentru da şi, prin urmare, se decodează un d şi un a. Întâi se concatenează d

la modelul existent, b/ , şi se formează b/ d. Cum acesta nu există în dicţionar, se introduce la

poziţia 11. Noul model va începe cu d. Anterior s-a decodat a care, concatenat cu d, a dat da,

care este în dicţionar, aşa că se decodează următoarea intrare, care este 8, corespunzător lui bb.

Se decodează primul b şi se concatenează la modelul da pentru a obţine dab, la poziţia 12, apoi

se începe un nou model cu litera b. Decodând al doilea b şi concatenându-l la noul model,

rezultă modelul bb, care există în dicţionar, aşa că se decodează următorul element din secvenţă.

Procedeul se continuă în mod similar, până la decodarea întregii secvenţe, pe bază

dicţionarului construit arătat în Tabelul 1.3.3.3.

Tabelul 1.3.3.3. Procedeul de decodare LZW

Index Apariţie Index Apariţie Index Apariţie

1 b/ 9 a 18 abb

2 a 10 a b/ 19 ba b/ d

3 b 11 b/ d 20 uu

4 d 12 dab 21 uu

5 u 13 bba 22 u b/

6 da 14 a b/ d 23 b/ du

7 ab 15 dabb 24 uu b/

8 bb 16 ba b/ 25 b/ duu

17 bda

Decodorul LZW trebuie să conţină o operaţie de excepţie pentru a rezolva cazul particular al

decodării unui index care nu are o apariţie completă în dicţionarul decodorului [14].

36

Page 37: compresia informatiei textuale

Exemplu de codare LZW: MARIA ARE MERE

Tabelul 1.3.3.4. Exemplu de codare LZW [11]

a.

b.

c.

37

Page 38: compresia informatiei textuale

CAPITOLUL 2. COMPRESIA FIŞIERELOR DE UZ GENERAL

2.1 WinRAR

WinRAR este versiunea de 32 biţi a arhivatorului RAR pentru Windows – un instrument

puternic care permite de a crea, gestiona şi controla fişierele arhivelor. Există mai multe versiuni de

RAR, pentru diverse medii: Windows, Linux, FreeBSD, DOS, OS/2, MacOS X [18].

Există două versiuni de RAR pentru Windows :

- Versiune cu o interfaţă grafică – WinRAR.exe;

- Versiune linie de comandă (mod text) – RAR.exe.

Caracteristicile aplicaţiei WinRAR:

- Suport complet a arhivatorilor RAR şi ZIP 2.0;

- Super-puternic, algoritm de compresie specific;

- Algoritmi speciali optimizaţi pentru compresia de texte, audio, grafice, execuţii

32biţi şi 64 biţi Intel.

- Interfaţă de mediu incluzând facilitatea de a rula-plasa şi un asistent;

- Interfaţă pentru linia de comandă;

- Gestionarea altor arhive decât RAR (7Z, ACE, ARJ, BZ2, CAB, GZ, ISO, JAR,

LZH, TAR, UUE, Z) ;

- Arhivare „solidă” a cărei rată de compresie e mărită de la 10% pînă la 50% în raport

cu metodele obişnuite. (O arhivă „solidă” este o arhivă compactă cu o metodă specială de

compresie, care prelucrează toate fişierele în arhivă printr-un flux de date continuu.

Arhivele „solide” sunt suportate doar de formatul de arhivare RAR, această metodă nu e

suportată de arhivele ZIP.);

- Arhive multivolum;

- Crearea arhivelor cu auto-extragere (chiar şi multi-volum) utilizând modulele SFX

prin eroare sau în opţiune;

- Recuperarea arhivelor defectate;

- Recuperarea volumelor reconstruind părţile lipsă a arhivelor multi-volum;

- Alte funcţii de serviciu, precum criptarea, comentariile arhivelor, revista de erori, etc.

Numărul fişierelor ce poate fi adăugat la o arhivă depinde de cantitatea memoriei disponibile şi

de lungimea numelor fişierelor. Fiecare fişier arhivat într-o arhivă RAR consumă aproximativ 128

octeţi din memorie. De exemplu, este recomandat de avut 128 Mo dacă aveţi de compresat un

milion de fişiere. WinRAR a fost testat cu mai mult de 1 milion de fişiere.

38

Page 39: compresia informatiei textuale

Mărimea unei arhive RAR sau a unui fişier de arhivat într-o arhivă RAR, este limitată la 8 589

934 591 Go (9 223 372 036 854 775 807 octeţi). Remarcaţi că pentru a crea arhive mai mari de 4

Go, trebuie să utilizaţi NTFS, căci sistemele vechi nu suportă fişiere aşa mari.

Mărimea unei arhive ZIP sau a unui fişier de arhivat într-o arhivă ZIP, este limitat la 2 Go.

În general, formatul unei arhive RAR este cu mult mai performant pentru sarcini dificile ce

necesită un foarte mare număr de fişiere ce ocupă mulţi giga-octeţi pe disc.

2.2 WinZIP

WinZip permite de a utiliza fişiere ZIP şi alte formate de compresie beneficiind de utilizarea

flexibilă a sistemului Windows [20].

Câteva din funcţionalităţile lui WinZip:

1. Integrare transparentă în Windows: WinZip se integrează perfect în postul de lucru şi de

Exolorare Windows. E posibil de a utiliza funcţia Rulează/Deplasează fişierului între WinZip şi

Explorator sau de a compresa şi a decompresa fişierele direct în Explorator.

2. Internet: WinZip integrează o sarcină de formate de fişiere din cele mai curente de pe

Internet: RAR, BZ2, BZ, TBZ, TBZ2, TAR, gzip, UUencode, XXencode, BinHex et MIME. Mai

mult, programele externe asigură acceptarea fişierelor ARJ, LZH şi ARC. WinZip permite accesul

practic la toate fişierele compresate şi codate ce pot fi descărcate de pe Internet.

3. Instalarea automată a majorităţii programelor soft distribuite în fişierele Zip: dacă o

arhivă conţine un program de configurare sau de instalare, funcţia de instalare a WinZip permite de

a decompresa fişierele, de a lansa programul de instalare şi de a şterge fişierele temporare.

4. Asistent WinZip: această funcţie ca opţiune utilizează interfaţa standard şi familiară a

„asistenţilor” pentru a simplifica compresia, decompresia şi instalarea programelor distribuite sub

forma de arhive Zip. Asistentul WinZip se adresează utilizatorilor calculatoarelor personale care

descoperă arhivele Zip, de asemenea şi utilizatorilor ocazionali.

5. Dosarele preferate Zip: WinZip oferă posibilitatea de a organiza arhivele Zip sub forma

unei liste selectate pe dată, care facilitează localizarea lor, independent de locul lor de provenienţă

sau de destinaţie. Spre deosebire de fereastra de dialog standardă de Deschidere a arhivei, fereastra

de dialog Dosare Zip favorizează tratarea conţinutului mai multor dosare ca şi când ar fi un singur

dosar. O funcţie de căutare permite localizarea tuturor arhivelor Zip împrăştiate pe hard disc.

6. Suport extins de fişiere: WinZip preia formatul de fişier Zip &4biţi, ceea ce elimină toate

restricţiile practice legate de mărimea arhivelor, de asemenea si de numărul şi mărimea fişierelor

compresate într-o arhivă. Capacitatea de arhivare nu este limitată decât de resursele sistemului.

39

Page 40: compresia informatiei textuale

7. Criptare avansată: tehnologia de criptare AES 128 biţi şi 256 biţi a lui WinZip nu permite

consultarea neautorizată a conţinutului documentelor.

8. Crearea de fişiere cu auto-extragere: WinZip Self-Extractor Ediţie personală este

furnizată cu WinZip. Fişierele cu auto-extragere sunt idealul pentru a expedia fişiere compresate

cuiva care nu utilizează sau nu vrea sa utilizeze nici un program de compresie.

9. Zip şi E-mail: WinZip permite compresia fişierelor sau a mapelor şi de a le trimite, prin

poşta electronică.

WinZip© 11.1 este versiunea cea mai recentă (WinZip 11.0) şi e compatibilă cu Windows

Vista®. În afara funcţionalităţilor introduse în WinZip 11.0, WinZip 11.1:

este certificat pentru Windows Vista;

conţine o bară de instrumente şi de icon-uri de program Vista;

conţine o interfaţă de stilul Explorator Vista;

este compatibil cu Windows Vista şi XP 64 biţi, de asemenea şi cu Windows Vista,

XP şi 2000 32 biţi.

2.3. 7-Zip FILE MANAGER

7-Zip File Manager este un program pentru manipularea fişierelor şi mapelor [15].

Tabelul 2.3.1. Formatele suportate (compatibile) ale aplicaţiei 7-ZIP

Format Compressing Decompressing Filename Extensions7z X X 7z

ZIP X X zipGZIP X X gz gzip tgzBZIP2 X X bz2 bzip2 tbz2 tbzTAR X X tar

LZMA X lzmaRAR X rarCAB X cabARJ X arj

Z X z tazCPIO X cpioRPM X rpmDEB X debLZH X lzh lha

SPLIT X 001 002 ...CHM X chm chw hxs

Continuarea tabelului 2.3.1.ISO X iso

40

Page 41: compresia informatiei textuale

UDF X isoCOMPOUND X msi doc xls ppt

WIM X wim swmDMG X dmgXAR X xarHFS X hfsNSIS X exe

2.3.1. ZIP

7-Zip creează arhive compatibile în întregime cu Zip. Orişicine poate decompresa aceste fişiere

cu orice aplicaţie compatibilă Zip de decompresie. Pe parcursul compresiei 7-Zip poate utiliza una

din următoarele metode de compresie Zip:

0 - Store

8 - Deflate

9 - Deflate64

12 - BZip2

Versiunea curentă 7-Zip poate extrage orice fişier din arhiva Zip care sunt compresate cu una

din următoarele metode:

0 - Store

1 - Shrink

Implode

8 - Deflate

9 - Deflate64

12 - BZip2

Fişierele compresate cu alte metode de compresie Zip pot fi extrase de versiunea curentă a lui 7-

Zip. Dar aceste metode suportate sunt mai populare, de aceea 7-Zip poate decompresa marea

majoritate a arhivelor Zip. Pentru a extrage fişiere compresate cu metode ce nu sunt suportate de 7-

Zip va trebui de utilizat aplicaţii Zip.

7-Zip suportă extensia Zip64 a formatului ZIP.

Versiunea curentă 7-Zip nu susţine arhivele Zip multi-volum.

LZH. 7-Zip e compatibil cu arhivele LZH doar pentru citire, vizualizare şi decompresie. 7-Zip

acceptă metodele -lh0-, -lh4-, -lh5-, -lh6- şi -lh7.

2.3.2. FORMATUL 7z

7z este un nou format de arhivă, asigurând producerea unei rate înalte de compresie.

41

Page 42: compresia informatiei textuale

Principalele caracteristici ale formatului 7z:

Arhitecturi deschise

Rată înaltă de compresie

Criptare puternică AES-256

Abilitate de a utiliza orice metodă de compresie, conversie sau criptare

Suportă fişiere cu mărimea de până la 16000000000 GB

Fişiere cu nume Unicode

Compresie “solidă”

Compresia header-ilor arhivelor

7z este o arhitectură deschisă (cu acces liber), deci poate suporta orice metodă nouă de

compresie.

Tabelul 2.3.2.1. Metodele integrate curent în 7z

Metoda Descriere

LZMA Ameliorarea şi optimizarea versiunii algoritmului LZ77

PPMD PPMdH creat de Dmitry Shkarin cu mici modificări

BCJ Convertor pentru 32-bit x86 executabil

BCJ2 Convertor pentru 32-bit x86 executabil

BZip2 Algorithm standard BWT

Deflate Algorithm standard bazat pe LZ77

2.3.3. LZMA

LZMA este metoda implicită şi generală de comprimare a formatului 7z.

Principalele caracteristici ale metodei LZMA:

Rată înaltă de compresie

Mărime variabilă a dicţionarului (până la 4 GB)

Viteză de compresie: în jur de 1 MB/s pe 2 GHz CPU

Viteză de decompresie: în jur de 10-20 MB/s pe 2 GHz CPU

Necesită volum mic de memorie pentru decompresie (depinde de mărimea dicţionarului)

Mărime mică a codului de decompresie: în jur de 5 KB

Suportă procese multiple şi hiper-procese.

Algoritmul de compresie LZMA este foarte potrivit pentru aplicaţii. Dacă se doreşte utilizarea

codului LZMA, se poate cere pentru consultare codul de program adaptat, şi se poate cere licenţe

de developer de la www.7-zip.org/support.html.

2.4. POWER ARCHIVER 2009

42

Page 43: compresia informatiei textuale

PowerArchiver 2009 are o interfaţă modernă şi ergonomică si suportă practic toate formatele de

compresie şi de codare, de asemenea şi multe instrumente şi opţiuni avansate. Se presupune că

PowerArchiver 2009 este programul de arhivare cel mai complet la ziua de azi [19].

PowerArchiver 2009 conţine toate opţiunile de bază ce sunt aşteptate de la o aplicaţie de

arhivare – permite citirea şi extragerea în mai multe formate, de asemenea şi crearea arhivelor în

mai multe formate, în particular cu 7-zip care este cel mai puternic la momentul actual. Ceea ce

diferenţiază PowerArchiver faţă de aplicaţiile similare ţine de numeroasele sale opţiuni. Mai simplu,

PowerArchiver este o aplicaţie din cele mai inovatoare, şi multe funcţii ce operează în alte

programe soft au apărut cu PowerArchiver, ca extensia Shell, managerul parolei şi codarea

avansată, convertorul de arhivă, instrumentul de extragere multiplă, integrarea FTP, suportul

puternic SFX şi multe alte instrumente ce facilitează sarcina pe tot parcursul aplicaţiei. Nu este

gratuită această aplicaţie.

2.5. COMPARAREA EFICIENŢEI PROGRAMELOR DE ARHIVARE

Numerele în tabela de mai jos sunt date în scopul de comparare şi sunt aproximative[16]. Datele

în % sunt % de la “dimensiunea fişierelor compresate în comparaţie cu dimensiunea fişierelor

necompresate”: cu cât procentul este mai mic, cu atât mai bună e compresia.

Tabelul 2.5.1. Compararea eficienţei programelor de arhivare

Name Text %Text time

(s)Binaries %

Binaries time (s)

Raw images %Raw images time

(s)7-zip 19 18.8 27 59.6 50 36.4bzip2 20 4.7 37 32.8 51 20.0rar (2.01) 23 30.0 36 275.4 58 52.7advzip 24 21.1 37 70.6 57 41.6gzip 25 4.2 39 23.1 60 5.4zip 25 4.3 39 23.3 60 5.7

43

Page 44: compresia informatiei textuale

CAPITOLUL 3. COMPRESIA FIŞIERELOR DIGITIZATE

3.1. COLECŢIILE DIGITALE – O NOUĂ POSIBILITATE DE ACCES LA

INFORMAŢIE

Barierele de spaţiu şi timp în căutarea informaţiei au fost eliminate în era Internetului.

Obiectivul accesului universal la moştenirea culturală poate fi îndeplinit dacă avem în vedere

tehnologia actuală care permite construirea colecţiilor comprehensive.

În ziua de azi, majoritatea publicaţiilor sunt scrise, corectate şi aranjate în pagină cu ajutorul

calculatorului, cu procesoare de texte şi programe de tehnoredactare. Chiar şi versiunea tipărită are

la baza o versiune electronică. Exista numeroase publicaţii electronice multimedia care grupează

diferite tipuri de informaţie pe acelaşi suport, de exemplu o biografie, o bibliografie, fotografii,

imagini animate, video si sunet.

Resursele de informare ce sunt accesate intr-o bibliotecă tradiţională pot fi transpuse în formate

digitale stocate în depozite multimedia şi făcute disponibile prin servicii web.

Resursele digitale pot fi împărţite în doua mari categorii:

- documente care au fost publicate şi există deja pe suport material, ce au fost sau trebuie

digitizate, care formează patrimoniul cultural ştiinţific existent;

- documente care există şi/sau numai în format electronic („born digital”- născute electronic),

care se publică în prezent şi în formă digitală sau numai în formă digitală.

Deci publicaţiile electronice pot fi publicaţii electronice originale sau versiunea digitizată a unui

document scris sau tipărit.

Unii dintre producătorii şi editorii de publicaţii electronice sunt editorii de publicaţii clasice care

îşi diversifică astfel activitatea. Există şi furnizori noi de informaţii electronice care iau naştere

special pentru a oferi asemenea documente. Este cazul editorilor de publicaţii noi în web care nu se

găsesc decât on-line.

Tehnologia a ajuns în punctul în care sunt nu numai fezabile colecţiile digitale, dar sunt mai

puţin costisitoare decât cumpărarea şi stocarea versiunilor materiale, pe suport fizic - hârtie etc.

Conform definiţiei din dicţionarul ODLIS (Online Dictionary for Library and Information

Science) colecţia digitală este o colecţie de documente dintr-o bibliotecă sau arhivă convertite în

format citibil maşină (calculator) pentru conservare sau pentru a oferi acces electronic. Aceasta

include ziare electronice (e-zine), reviste electronice (e-journals), cărţi electronice (e-book), lucrări

de referinţă, baze de date bibliografice, alte resurse web.

Bibliotecile digitale au diverse definiţii care cuprind atât documente tipărite care devin

accesibile electronic prin transformarea lor în format digital, prin digitizare, cât şi materiale născute

44

Page 45: compresia informatiei textuale

în format electronic-digital. Convenţional, exista două posibilităţi: o bibliotecă care conţine material

în formă digitizată şi o bibliotecă care conţine material digital.

Bibliotecile digitale trebuie să se integreze şi să extindă bibliotecile tradiţionale. Ele trebuie să

fie mai mult decât portaluri cu motoare de căutare. Ca orice bibliotecă, trebuie să ofere posibilităţi

de selecţie a resurselor care îndeplinesc criteriile relevante misiunilor sale şi trebuie să ofere

servicii, inclusiv de căutare, care să faciliteze utilizarea resurselor de câtre comunitatea ţintă.

Trebuie sa fie colaborativă, permiţând utilizatorilor să contribuie activ cu cunoştinţe, fie prin

adnotări, review-uri (referate, articole de sinteză), sau pasivă oferind doar posibilitatea de acces la

resurse. În plus, trebuie să fie contextuală, exprimând extinderea web-ului inter-relaţional şi a

nivelelor de cunoştinţe care se extind de-a lungul resurselor primare.

Datorită creării bibliotecilor digitale, cercetările universitare s-au accelerat dramatic, fără a mai

exista limitarea accesului la documentul fizic. În aproape toate bibliotecile, digitizarea este

considerată ca o expunere a colecţiilor sub o alta înfăţişare, ce asigură o funcţionalitate mărită,

comoditate - posibilitatea accesului la documente de acasă, anumite considerente legate de

conservare, agregarea colecţiilor care sunt dispersate fizic şi o considerabilă extindere a accesului.

Începând din anii 90, o activitate experimentată pe scară largă a fost aceea de a concepe proiecte

de realizare a bibliotecii digitale, în special în SUA. Este perioada primei generaţii a bibliotecilor

digitale. Cheltuielile făcute în ultimii 10 ani pentru biblioteci digitale a depăşit câteva sute de

milioane de dolari. Unele fonduri pentru cercetarea în acest domeniu au provenit de la diverse

organizaţii guvernamentale, ca de exemplu în SUA, de la Digital Library Initiatives (DLI).

În 1994, Library of Congress anunţă planul sau de a crea National Digital Library, iar National

Science Foundation (NSF) alături de National Aeronautics and Space Administration (NASA) şi

Defence Advanced Research Projects Agency (DARPA) anunţă că sprijină Digital Libraries

Initiative, un efort de cercetare în care erau implicate câteva mari universităţi pentru a studia

bibliotecile digitale. Scopul era de a oferi acces universal la moştenirea culturală.

Cele mai importante progrese în ceea ce priveşte tehnicile implicate în asemenea proiecte au

fost făcute prin intermediul cercetărilor sponsorizate de U.S. National Science Foundation (NSF) şi

U.K. Joint Information Systems Committee (JISC). În 1999, aceste proiecte au început sa se extindă

internaţional, când NSF a legat programul său de cercetare în biblioteca digitală de activităţile

similare desfăşurate de JISC, rezultând JISCNSF International Digital Library Initiative.

Obiectivele acestui program de 3 ani a fost:

- adunarea colecţiilor de informaţii care nu sunt accesibile sau utilizabile altfel, din cauza

barierelor tehnice, distanţei, mărimii, structurii fragmentare sau alte limitări;

45

Page 46: compresia informatiei textuale

- crearea noii tehnologii şi punerea informaţiei la dispoziţia unui set de utilizatori distribuiţi,

pentru ca aceasta să fie furnizată şi exploatată;

- evaluarea impactului noii tehnologii şi a beneficiilor sale internaţionale.

Numeroase instituţii, organisme, organizaţii, grupuri s-au implicat în dezvoltarea tehnicii şi

tehnologiei digitale, inclusiv Uniunea Europeană, Association for Computing Machinery (ACM),

Institute of Electrical and Electronics Engineers (IEEE), International Federation of Library

Associations (IFLA), American Library Association (ALA), Coalition for Networked Information

(CNI) şi Digital Library Federation (DLF).

Aproape toate bibliotecile îşi declara intenţia de a conserva înlocuitorii digitali pe care îi

creează, iar Biblioteca Congresului s-a angajat şi la conservarea înlocuitorilor creaţi de alte

biblioteci, sub auspiciile programului Bibliotecii Digitale Naţionale. Din ce în ce mai multe

universităţi şi-au pus problema legată de “scholarly communication”, adică crearea, publicarea şi

accesul la informaţia academică, şcolară, curentă, care trece printr-o serioasă criză.

Conform ACRL (Association of College & Research Libraries), “scholarly communication”

este sistemul prin care cercetările şi alte scrieri academice sunt create, evaluate din punct de vedere

al calităţii răspândite în comunitatea academică şi conservate pentru utilizări viitoare. Una din

caracteristicile de bază ale acestor cercetări este ca sunt create ca bunuri publice pentru a facilita

cercetarea şi cunoaşterea. Criza actuală în acest domeniu are la bază faptul că firmele comerciale au

preluat controlul asupra revistelor academice din domeniul ştiinţific, tehnic şi medical.

Industria publicării acestor reviste s-a consolidat şi este dominată de un număr mic de companii

internaţionale. De aceea, preţul revistelor a crescut foarte mult, bibliotecile au fost nevoite sa reducă

numărul titlurilor abonate sau cărţilor cumpărate. În plus, a crescut şi cantitatea informaţiei

academice. Toate acestea au avut ca efect reducerea accesului la învăţământ. Au apărut o serie de

preocupări de rezolvare a acestei crize, iar în acest sens ACRL a definit o serie de principii si

strategii pentru a reforma comunicarea ştiinţifică („Principles and Strategies for the Reform of

Scholarly Communication”). Din ce în ce mai mult, această informaţie este pusă la dispoziţia

cercetătorilor, profesorilor şi studenţilor în format electronic.

Marile companii care au un cuvânt de spus în industria calculatoarelor sau a Internetului au

demarat la concurenţă o serie de proiecte împreună cu marile biblioteci ale lumii. Compania Google

lucrează, în cadrul Google Print Library Project, la scanarea colecţiilor University of Michigan,

Harvard University, Stanford University, The New York Public Library şi Oxford University.

Intenţia era de a face aceste cărţi regăsibile prin Google.

Google a anunţat sponsorizarea proiectului World Digital Library (WDL) al Bibliotecii

Congresului. Şi în Europa există preocupări pentru realizarea resurselor digitale. Astfel, site-ul

46

Page 47: compresia informatiei textuale

European Library îşi propune să fie un portal al bibliotecilor naţionale europene şi găzduieşte

proiectul European Digital Library Treasures (http://www.theeuropeanlibrary.org/portal/index.

htm), unde se prezintă câteva din documentele de patrimoniu ale acestora.

În martie 2005, Parlamentul European a aprobat programul eContentplus

(http://europa.eu.int/information_society/activities/econtentplus/index_en.htm), un program

multianual care doreşte să facă conţinutul digital al Europei mai accesibil, mai utilizabil şi mai

exploatat. Va suporta conţinut multilingv şi un serviciu on-line în Europa. Programul se adresează

unei zone specifice a pieţei care se dezvoltă mai încet şi anume conţinutul geografic, ca şi

component al conţinutului sectorului public, conţinutul educaţional, cultural, ştiinţific şi şcolar.

Programul sprijină coordonarea largă europeană a colecţiilor din biblioteci, muzee, arhive şi

conservarea, păstrarea colecţiilor digitale ca să asigure utilizarea viitoare a bunurilor şcolare

culturale şi ştiinţifice.

În marile universităţi ale lumii şi în din ce în ce mai multe universităţi chiar şi din Europa,

universităţile publică documentele destinate învăţământului în format electronic. Materialele

destinate studenţilor sunt accesibile pe baza de parole, în format electronic. Se dau examene prin

Internet, e-learning -ul este o realitate.

Biblioteci digitale locale, realizate de universităţi, institute de cercetare etc. sunt formate din

resurse electronice ca:

- e-books - cărţi full text (ale profesorilor, cercetătorilor)

- materiale didactice (cursuri, laboratoare, caiete de seminar, teste, întrebări-răspunsuri)

- articole de cercetare (preprinturi)

- reviste ştiinţifice

- conferinţe, congrese, seminarii

- anunţuri, programe, lucrările lor, prezentări, postere etc.

- date de cercetare ale unor contracte de cercetare

- înregistrări audio, video (ale marilor personalităţi din institutele respective)

- colecţii de imagini foto, desene, scheme etc.

În procesul de cercetare ştiinţifică, informaţia este resursa inestimabilă care ajută la progresul

omenirii. În acest proces, oamenii de ştiinţă se bazează pe surse de informare deja existente,

produse de omenire, dar, la rândul lor, produc documente ce pot contribui la progresul ştiinţei, la

informarea altor cercetători, profesori, studenţi.

Apariţia bibliotecii digitale reflectă dezvoltarea învăţământului la distanţă (e-learning),

alternativa virtuală a şcolii tradiţionale. Populaţia studenţească este tot mai mult îndepărtată de

campusul universitar pentru o alternativa de e-learning de-a lungul vieţii (“life long learning”).

47

Page 48: compresia informatiei textuale

Biblioteca trebuie să se dezvolte astfel ca să răspundă noii paradigme educaţionale pe măsură ce

cititorii caută noi cai pentru a regăsi mai uşor resursele de informare oriunde şi oricând. Se impune

stabilirea rolurilor, responsabilităţilor bibliotecilor şi ale altor instituţii în furnizarea accesului

publicului la acest noua tip de informaţie - informaţia digitală [7].

3.2. FORMATELE UZUALE ALE FIŞIERELOR SCANATE

Formatul în care o imagine scanată este salvată poate avea un efect semnificativ, iar mărimea

fişierului are o importanţă deosebită, daca ţinem cont de rezoluţia scannerelor moderne, care pot

crea un fişier imagine pentru un format A4 de 30 MB.

Formate de tip imagine

Când captăm o imagine cu un aparat foto sau cu un scanner, aceasta trebuie memorată într-un

„format de fişier”. Dacă informaţia binară este privită ca vehicul de comunicare, formatul de fişier

poate fi asemuit cu limbajul, sau vehiculul acestei comunicări. Informaţia poate fi citită şi înţeleasă

numai dacă programul recunoaşte formatul respectiv. Imaginile pot fi salvate în diverse formate.

Cele mai frecvent utilizate sunt:

- .jpg – Joint Photographic Experts Group

- .tif – Tagged Image File Format

- .psd – Photoshop Document

- .gif – Graphics Interchange Format.

JPEG - Standardul Industrial pentru compresia imaginilor fotografice cu tonuri continue,

pregătite pentru a fi afişate pe World Wide Web sau pentru a fi stocate atunci când spaţiul este

limitat.

Formatul JPEG foloseşte o „compresie cu pierderi” (datele şi calitatea imaginii sunt sacrificate

pentru a obţine fişiere mai mici atunci când fişierele-imagine sunt închise). Utilizatorul poate

controla valoarea compresiei. Un nivel ridicat de compresie rezultă într-o calitate mai mică a

imaginii şi un fişier de dimensiuni mai mici. Un grad scăzut de compresie conduce la imagini de

calitate mai bună, dar fişierul este mai mare. Se recomandă de folosit formatul de fişier JPEG numai

după ce se finisează de editat imaginea.

TIFF - standardul industrial pentru imaginile destinate publicării (reviste, cărţi etc.) utilizează o

tehnica de compresie „fără pierderi” (nu se pierd date şi nu scade calitatea imaginii) numită

„compresie LZW”. Deşi păstrează calitatea imaginii, tehnica LZW comprimă doar în mică măsură o

imagine.

Photoshop - un format standard utilizat de majoritatea programelor de prelucrare a imaginii. O

imagine compusă din straturi (layers) poate fi salvată ca document Photoshop. Un document

48

Page 49: compresia informatiei textuale

Photoshop este păstrat, de obicei, ca fişier de referinţă, din care deriva toate celelalte fişiere, în

funcţie de necesităţile impuse de dispozitivul de afişare.

Imaginea de fereastră (BMP - Windows bitmap) este cea mai mare, deoarece imaginea este

înregistrată cu toate culorile fără compresia acestora sau în 256 culori prin-o simplă comprimare a

codurilor de rulare. În cele mai multe cazuri trebuie evitat acest format.

Formatul GIF înregistrează imagini folosind culoarea indexată. 256 de culori sunt disponibile în

fiecare imagine. Un tabel al valorilor RGB pentru fiecare index al culorilor este înregistrat în

fişierul imagine. GIF este mai mic decât alte formate de fişier, deoarece intensitatea culorii este

scăzută, făcând o alegere bună în folosirea materialului pe Internet.

Trecerea de la formatul de tip imagine la formatul text se face cu ajutorul unui program de

recunoaştere de text. Unul dintre cele mai prietenoase, eficiente şi folosite programe de

recunoaştere de text este Abby Finereader.

Jaws for Windows este cel mai popular cititor de ecran pentru nevăzători. El permite acestora sa

folosească computerul în scopuri variate, de la instrument de lucru la locul de munca la mijloc de

recreare sau comunicare cu alţii.

În ceea ce priveşte stocarea documentelor şi compresia acestora se preferă utilizarea

programului DjVu şi a formatului PDF.

DjVu este o tehnologie de compresie a imaginilor optimizată pentru documentele scanate.

Cărţile în acest format sunt de 3 până la 8 ori mai mici decât echivalentul lor PDF.

Tehnologiile electronice actuale permit ca aceleaşi operaţii de stocare şi transmitere a

informaţiei să asigure o mai buna operativitate, flexibilitate, accesibilitate, adresabilitate, un mai

bun raport cantitate de informaţie transmisă/preţ. Suporturile de difuzare sunt CD-uri, dischete sau

Internetul, fiecare dintre ei având costuri foarte mici în raport cu hârtia tipărită.

Problemele privind depozitarea materialelor conservate şi prezervate digital sunt similare cu

cele privind digitizarea şi ridică semne de întrebare în ceea ce priveşte situaţiile financiare,

organizaţionale, tehnice şi legale [10].

3.3. DjVu: UN SISTEM DE COMPRESIE TIP IMAGINE PENTRU DISTRIBUIREA

DOCUMENTELOR NUMERICE

Un fişier DjVu reprezintă o pagină tipică a unei reviste în culori, scanată cu 300 dpi (dots per

inch) ce necesită 40-80 KB. Una din ideile esenţiale ale tehnologiei de compresie DjVu constă în

descompunerea imaginii într-un prim-plan ce conţine obiecte delimitate cu contururi evidenţiate

(text, figuri, scheme) şi un fundal ce conţine restul imaginii (fotografii, textura paginii). Pentru

compresia fiecărui plan pot fi utilizate diferite tehnici. Metodele uzuale de compresie a imaginilor

sunt concepute fie pentru imagini naturale conţinând puţine contururi (JPEG), fie imagini pentru

49

Page 50: compresia informatiei textuale

documente alb-negru, în întregime compuse din contururi puternic evidenţiate (Group 3,

MMR/Group 41, şi JBIG). Sistemul DjVu integrează două noi tehnici: JB2 şi IW44 pentru a

codifica diverse planuri [3].

Figura 3.3.1. Divizarea prim-plan/fundal [2]

Algoritmul de separare prim-plan/fundal produce 3 ieşiri: o mască în două nuanţe de rezoluţie

înaltă (în general de 300 dpi), o imagine color reprezentând fundalul cu o rezoluţie medie (în

general de 100 dpi), şi o structură care codifică culoarea obiectelor din prim-plan. Dacă un pixel al

măştii este zero, pixelul ce corespunde imaginii reconstruite ia culoarea extrasă a imaginii de fundal

în locul corespunzător, daca nu - ia o culoare definită de prim-plan.

Masca este codificată cu un nou algoritm de imagine în două nuanţe, numit JB2, care este de

fapt un descendent al propunerii originale a AT&T pentru standardul JBIG-2. algoritmul consta în

identificarea formelor individuale care compun imaginea şi de a le grupa în categorii similare.

Formele reprezentative a fiecărei clase sunt codificate utilizând o metodă similară standardului

JBIG. Fiecare pixel al formei este codificat cu ajutorul unei tehnici de codificare aritmetică adaptivă

numită ZP-Coder. Codificatorul aritmetic utilizează un context format de pixelii vecini transmişi 1 Un set de standarde pentru fax publicat de ITU-T în 1984. Grupa IV, faxuri extrem de specializate şi relativ scumpe pentru sisteme computaţionale concepute să utilizeze circuite digitale în vederea îmbunătăţirii calităţii şi a vitezei de transmitere, de la 64 kbps. Grupa IV, faxuri, de asemenea, este compatibilă cu grupa III şi se poate conecta la circuite analogice.

50

Page 51: compresia informatiei textuale

deja pentru a prezice valoarea pixelului ce trebuie codificat, şi pentru a transmite valoarea sa

utilizând un număr optimal de biţi. Formele, altele decât prototipul ce aparţine unei clase sunt

codificate utilizând un context mărit care include valoarea pixelilor formei prototipului. Aceasta

strategie reduce numărul de biţi utilizaţi, deoarece majoritatea pixelilor sunt similari pixelilor

formei prototipului. Foarte rar se cere reconstruirea exactă a imaginii originale, de aceea ratele de

compresie pot fi semnificativ mărite înlocuind aceste forme cu forma prototipului a căror diferenţe

sunt suficient de slabe pentru a fi sesizate. Poziţiile în care trebuie să fie afişate formele în imagine

sunt, de asemenea, codificate aritmetic. Codificatorul adaptiv ZP-Coder este foarte rapid şi

furnizează rate de compresie medii situate cu aproximare de 5% faţă de limita teoretică a lui

Shannon. În cazul când documentul conţine mai multe pagini, este avantajos de a construi un

dicţionar cu forme prototip partajate între pagini, şi un dicţionar propriu fiecărei pagini care conţine

forme care nu apar decât în pagina considerată. JB2 utilizează o metodă foarte rapidă pentru a face

aceasta.

Pentru imaginea de fundal, DjVu utilizează un algoritm de compresie wavelet, numit IW44, care

prezintă mai multe avantaje importante faţă de alte metode de compresie a imaginii naturale. În

primul rând, IW44 utilizează o transformată wavelet bazată pe metoda de „lifting” care e foarte

rapidă2. În al doilea rând această transformată este implementată în aşa mod încât ea necesită

multiplicare, bazându-se exclusiv pe adăugări şi decalaje. Aceasta reduce mult timpul de calcul. În

al treilea rând, structura datelor interne a imaginilor IW44 permite ameliorarea progresivă a

coeficienţilor wavelet pe măsura recepţiei lor, utilizând o cantitate de memorie proporţională

numărului de coeficienţi ne nuli (şi nu a numărului de pixeli). Această structură de date permite, în

orice moment, în timpul sau după transmitere, de a reconstrui un segment oarecare al imaginii, cu o

rezoluţie oarecare. Aceasta permite de a reconstrui doar o parte a imaginii afişate la ecran. În sfârşit,

tehnica de mascare prin proiectări succesive permite evitarea cheltuielilor de biţi pentru codificarea

regiunilor de pe fundal care sunt invizibile căci sunt acoperite de obiectele situate în prim-plan.

Algoritmul IW44 utilizează de asemenea ZP-Coder pentru codificarea finală a datelor.

Culoarea obiectelor din prim-plan poate fi codificată prin două metode diferite. Prima metodă

constă din identificarea unei culori unice pentru fiecare formă ce apare în mască, şi a o codifica cu

ajutorul lui ZP-Coder. Aceasta furnizează un cod foarte compact, dar necesită o segmentare aproape

perfectă, şi nu funcţionează decât dacă componentele din prim-plan sunt uniform colorate. A doua

metodă constă în utilizarea IW44 pentru codificarea unei imagini de rezoluţie foarte joasă (în

general de 25 dpi sau 1 p/mm). Interpretarea imaginii din prim-plan este exact simetrică celei de pe

2 Bell (T.C), Clearz (J.G.) et Witten (I.H), Text Compression, Prentice-Hall, 1990.

51

Page 52: compresia informatiei textuale

fundal: masca utilizează de bază „canalul Alpha” pentru a mixa imaginile de pe fundal şi cele din

prim-plan. A doua metodă este similară sugestiilor standardului MRC-T.443.

3.3.1. ALGORITMUL DE SEGMENTARE

Prima fază de segmentare prim-plan/fundal e bazată pe Câmpul Markov Causa bidimensional, a

cărui stări reprezintă prim-planul şi fundalul. Fiecare stare descrie local distribuirea pixelilor din

prim-plan sau fundal cu ajutorul unei gaussiene unice determinată de culoarea medie a pixelilor şi

variaţiile lor.

Această fază iniţială realizează de fapt o pre-segmentare pentru a selecta toate obiectele care ar

putea merita sa fie codificate în prim-plan. Drept consecinţă, unele părţi de contrast evidenţiat ale

fotografiilor sau unele urme (linii) ale imprimantei pot fi referite incorect categoriei obiectelor din

prim-plan. O succesiune de filtre euristice sunt apoi aplicate pentru a exclude obiectele care din

greşeală au fost clasificate pentru prim-plan [3].

Figura 3.3.1.1. Proiecţiile succesive converg către un punct de intersecţie a două subspaţii

convexe reprezentând (a) imagini de potrivire a imaginii iniţiale în afara măştii, şi (b) imagini

ale căror coeficienţi mascaţi wavelet sunt zero4.

Criteriile deciziilor implementate de către filtrul principal sunt bazate pe principiul Lungimii

Minimale a Descrierii (Minimum Description Length5). Acest principiu permite minimizarea

numărului de parametrii euristici pentru optimizarea manuală comparând sute de imagini de diferite

tipuri. Este suficient de ştiut dacă se preferă de codificat fiecare candidat ca obiect din prim-plan

sau de pe fundal. Costul codificării asociat fiecărei posibilităţi este obţinut adăugând costul

codificării parametrilor unui model generativ al imaginii compresate şi costul resturilor ce permit

3 Bazer (B.E.), An optimum method for two level rendition of continuous-tone pictures. In: Internal Conference on Communications 1973.4 Léon Bottou, Patrick Haffner, Paul G. Howard, Patrice Simard, Yoshua Bengio and Yann LeCun, High Quality Document Image Compression with DjVu, AT&T Labs, Lincroft, NJ, July 13, 1998

5 W. Niblack, J.Sheinvald, B. Dom and D. Steele, Unsupervised image segmentation using the minimum description length principle. In Proceedings of ICPR 92, 1992

52

Page 53: compresia informatiei textuale

reconstruirea imaginii iniţiale. Posibilitatea ce prezintă costul codificării minime este reţinută.

Codificarea unui candidat pe fundal necesită un model al imaginii de pe fundal. Codificarea unui

candidat ca obiect din prim-plan necesită un model al imaginii din prim-plan, un model al imaginii

de pe fundal situat sub obiectul din prim-plan şi un model al imaginii mască.

Modelul reţinut pentru imaginea de pe fundal presupune că culoarea fiecărui pixel este o medie

a pixelilor celor mai apropiaţi de pe fundal de deasupra şi din partea stângă a pixelului. Modelul

reţinut pentru imaginea din prim-plan presupune o culoare uniformă pentru obiect. Costul

codificării asociate modelului măştii este evaluat euristic pornind de la lungimea perimetrului

obiectului candidat. Modelul de pe fundal autorizează variaţiile continue caracteristice zonelor pe

care dorim să le conservăm pe fundal. Modelul din prim-plan favorizează obiectele bine mărginite

de culoare uniformă.

Cu toate ca s-ar putea dori modele ce ar reproduce mai fin caracteristicile algoritmilor de

codificare utilizaţi de DjVu, aceste trei modele oferă un bon compromis între timpul de execuţie şi

calitatea segmentării. Segmentarea completă a unei imagini color de 300 dpi (pagina unei reviste de

exemplu) are loc în aproximativ 3 secunde.

3.4. EFICIENŢA TEHNICII DE COMPRESIEI DjVu

Déjà vu a fost de la început conceput pentru a stoca imagini scanate conţinând texte sau desene

liniare. Tehnologia sa permite separarea textului de fundal, încărcare progresivă etc. Diferenţa între

DjVu şi PDF vizează în principal faptul că DjVu este de tip raster, iar PDF de tip vector. Acest

lucru înseamnă că un text în PDF poate fi mărit oricât fără alterarea calităţii, în timp ce mărirea

DjVu este limitată.

Trebuie de remarcat faptul că DjVu este un format proprietate şi realizarea de fişiere DjVu nu se

poate realiza decât cu aplicaţia producătorului, pe când PDF este format standardizat, nu este

dependent de proprietar şi este uşor de realizat chiar prin aplicaţii gratuite.

53

Page 54: compresia informatiei textuale

3.1sec/23k: masca (text, 23K) s-a încărcat 4.8sec/35K: fundalul e încă neclar

9.4sec/67K: Încărcarea s-a terminat.

Figura 3.4. Descărcarea fişierului printr-un modem de 56 K: decompresia progresivă mai

întâi a textului, apoi a fundalului cu o creştere continuă a calităţii [2]

54

Page 55: compresia informatiei textuale

3.4.1. REZULTATE: IW44 PENTRU IMAGINI NATURALE

Performanţa lui IW44 este tipică algoritmilor de compresie wavelet a imaginilor, dar a fost

optimizat pentru accelerarea vitezei de decodificare şi minimizarea memoriei utilizate, mai mult

decât pentru maximizarea compresiei. Spaţiul ocupat de o imagine IW44 este în general de la 30%

până la 50% mai mic decât cel al unei imagini JPEG la acelaşi raport semnal/zgomot.

Tabelul 3.4.1.1. prezintă raporturile semnal/zgomot obţinute cu IW44 pentru două imagini test

standard (lena şi goldhill), le compară cu JPEG şi cu alte metode wavelet: EZW, SPIHT şi EBCOT.

Pentru imaginea Lena, IW44 depăşeşte JPEG cu aproximativ 2 dB. IW44 depăşeşte de

asemenea EZW, dar este cu puţin mai puţin optimal faţă de SPIHT şi EBCOT. Aceasta e cauzat de

faptul că arhitectura lui IW44 şi filtrele de undă utilizate sunt optimizate în aşa fel încât să se obţină

o accelerare a vitezei de decodare.

Tabelul 3.4.1.1. Raportul semnal/zgomot obţinut cu diferite metode de compresie

Imagine IW44 JPEG EZW SPIHT EBCOTLenaLenaLena

33.6236.6139.67

31.6734.8437.94

33.1736.2839.55

34.1137.2140.46

34.2837.4340.61

GoldhillGoldhill

30.2532.56

29.2331.03

n/an/a

30.5633.12

n/an/a

3.4.2. REZULTATE: JB2 PENTRU IMAGINI ÎN DOUĂ NUANŢE

Un test independent de compresie „fără pierdere” al imaginilor alb-negru efectuat pe o largă

colecţie de documente a măsurat rata medie de compresie de 26.5 pentru JB2 v2.0. aceasta poate fi

comparată cu rate de 13.5 obţinută pentru MMR/Group 4 şi 19.4 pentru JBIG. Câştiguri mai

importante pentru imaginile ce conţin mult text şi mai mici pentru imaginile ce conţin mai multe

desene.

Tabelele 3.4.2.1.- 3.4.2.4. prezintă rezultatele obţinute de DjVu în două nuanţe şi le compară cu

MMR6/CCITT7-GroupIV. Ratele obţinute de DjVu v3.0. utilizat pentru mai multe pagini cu

dicţionar partajat sunt de 4.5 la 10 ori mai superioare decât MMR/G4. Mărimea medie a unei pagini

este de la 5 până la 11 kilo-octeţi, în funcţie de document.

Utilizând formatul PDF pentru documente alb-negru scanate obţinem mărimi similare ca

MMR/G4, deoarece PDF nu face decât încapsularea documentului MMR/G4 într-un format PDF.

Primele 6 documente din tabel sunt brevete. Documentul Nisp10 este în mod deosebit

interesant, căci este caracteristic unei publicaţii ştiinţifice tipice. Având 1090 pagini, fişierul

6 Modified Modified READ (MMR; READ Relative Element Address Designate codes) – dezvoltat pentru a sprijini utilizarea internaţională a faxurilor, adică, "Grupul 4 aparate de fax".7 Standard dezvoltat de ITU (International Telecommunication Union) în 1984-85 în grupul filială numit apoi The International Telegraph and Telephone Consultative Committee (CCITT) şi azi cunoscut ca ITU-T (International Telecommunication Union-Telecommunication Standardization Sector).

55

Page 56: compresia informatiei textuale

TIFF/G4 (sau echivalentul său PDF) are mărimea de aproximativ 76 MB, în DjVu el este redus la

13MB. Mărimea medie a unei pagini este de aproximativ 10KB, ceea ce permite prevederea unei

stocări a 60000 de pagini pe un CD-ROM (aproximativ 50 de volume de acest tip).

Fişierul Snowbird este diferit de celelalte prin faptul că el nu a fost digitalizat de pe hârtie, dar

convertit direct de la un fişier PostScript. Convertit în TIFF/G4 el ocupă 10.7 MB, compresat cu

DjVu cu dicţionar partajat, el este redus la 728 KB [3].

Tabelul 3.4.2.1. Comparaţii între MMR/G4 şi JB2 după mărimea fişierelor

Tabelul 3.4.2.2. Comparaţii între MMR/G4 şi JB2 după rata de compresie

Tabelul 3.4.2.3. Rata de compresie a JB2 în raport cu rata de compresie relativă a G4

56

Page 57: compresia informatiei textuale

Tabelul 3.4.2.4. Comparaţii între MMR/G4 şi JB2 după mărimea medie a unei pagini

3.4.3. REZULTATE: DjVu PENTRU DOCUMENTELE COLOR

La compresia unui document în culori, sistemul DjVu cu separarea prim-plan/fundal ajunge la

rate de 300:1 şi 1000:1. Tabelul 3.4.3.1. arată mărimile fişierelor DjVu corespunzătoare unor

documente digitalizate în culori cu 300 dpi. Documentele obişnuite ocupă între 30KB şi 80 KB.

Tabelul 3.4.3.1. Mărimea fişierelor (în KB) obţinute la digitizare utilizând diferiţi algoritmi

Tabelul 3.4.3.2. Rezultatele compresiei utilizând diferiţi algoritmi [2]

57

Page 58: compresia informatiei textuale

Descrierea imaginii

Detaliul imaginii

neprelucrat

JPEG,300 dpi,

quality 20

JPEG,100dpi,

size=DjVu

IW44,300dpi,

size=DjVu

DjVucompressed

Magazine Add% image= 56

ads-freehand-30020640K 292K 70:1 50K 412:1 61K 338:1 52K 396:1

Brattain Notebook% image= 22brattain-0001

9534K 116K 82:1 17K 560:1 20K 476:1 19K 501:1Scientific Article

% image= 46graham-001 22013K 383K 57:1 41K 536:1 43K 511:1 38K 579:1

Newspaper Article% image= 50lrr-wpost-1 12990K 250K 51:1 38K 341:1 42K 309:1 40K 324:1

Cross-Section ofJupiter

% image= 73planets-jupiter 24405K 284K 85:1 47K 519:1 52K 469:1 47K 519:1

XVIIIth Century book

% image= 45cuisine-p006 12128K 206K 58:1 35K 346:1 39K 310:1 37K 327:1

US FirstAmendment% image= 30usa-amend1 31059K 388K 80:1 77K 403:1 78K 398:1 73K 425:1

Pornind de la o imagine a unui document de 300 dpi şi 24bits/pixel, segmentarea produce trei sub-imagini: masca în două nuanţe (1bit/pixel) care este de 24 de ori mai mică decât imaginea originală, imaginea de pe fundal (100dpi) este de 3 x 3 = 9 ori mai mică, imaginea din prim-plan (25 dpi) este de 12 x 12 =144 ori mai mică decât originalul. Adunând mărimile necompresate ale acestor sub-imagini, obţinem o rată de compresie de 6.25:1 în raport cu imaginea originală.

Un mare număr de exemple pot fi consultate on-line din biblioteca digitală DjVu la adresa http://www.djvu.org.

58

Page 59: compresia informatiei textuale

CAPITOLUL 4. IMPLEMENTĂRI PRACTICE

4.1. ALGORITMUL HUFFMAN STATIC (ALGORITM ENTROPIC)

Algoritmul Huffman ia ca intrare o lista de ponderi ne-negative {w(1), ... ,w(n) } şi

construieşte un arbore binar complet (un arbore binar este complet daca fiecare nod are zero sau 2

ramificaţii), ale cărui frunze sunt numerotate cu ponderi. Ponderile reprezintă probabilităţile

asociate simbolurilor sursei. Iniţial arborele are numai doua noduri, cele corespunzătoare ponderilor

celor mai mici. La fiecare pas în algoritm, cele mai mici ponderi definesc un nou nod cu ponderea

w(i)+w(j) şi a cărui rădăcina (root) are doi sub-arbori, reprezentaţi de w(i) si w(j). Ponderile w(i) si

w(j) sunt indepartate din lista şi locul lor este preluat de w(i)+w(j). Procesul continua până când se

obţine o listă cu o singură valoare [9].

Observaţii:

Pentru marcarea sfârşitului de mesaj comprimat se foloseşte un simbol auxiliar cu semnificaţie

de sfârşit de mesaj comprimat. Fie acesta END. In acest fel, numărul total de simboluri ce trebuie

reprezentate este: 256 (de la codul ASCII) + 1 (pentru END). Rezultă un număr de 257 simboluri

pentru care este nevoie de k >= log2 257 = 8.005 -> 9 simboluri binare.

Simbolul END codificat binar pe 9 biţi este: “1.0000.0000”. Pentru a obţine coduri pe 9

simboluri binare pentru caracterele ce au cod ASCII, se va pune un 0 în faţa codului ASCII pe 8

biţi. De exemplu, codul ASCII al lui “A” este 41H = 0100.0001 iar codul binar pe 9 biţi va fi

“0.0100.0001”.

Pentru codarea arborelui se parcurge arborele de sus în jos şi, apoi, de la stânga la dreapta prin

scrierea tuturor nodurilor, astfel:

- daca nodul nu este frunză (nod terminal) atunci se scrie 0 altfel 1;

- daca nodul este frunză se scrie, apoi, codul simbolului corespunzător nodului

considerat;

Există mai multe soluţii de a parcurge sigur un astfel de arbore:

1. Odată considerat un nod se taie cu un X;

2. La considerarea unui nod care nu este terminal se considera că – de fapt – au apărut două

noduri fii: unul spre stânga şi unul spre dreapta.

3. Se consideră un traseu de parcurgere al grafului, aşa cum este prezentat în figura de mai jos,

şi se scriu numai nodurile corespunzătoare pantei negative a traseului.

4. La codificarea mesajului, la sfârşitul mesajului, se pune codul lui END rezultat din arborele

de codare, delimitându-se astfel sfârşitul mesajului codat.

5. La codarea arborelui se pot folosi două metode de evidenţiere a sfârşitului codului arborelui:

59

Page 60: compresia informatiei textuale

- Să se forţeze ca simbolul END sa fie tot timpul ultimul caracter din dreapta al grafului de

codare. La apariţia codului acestuia, bin(END,9) se decide ca s-a terminat de scris arborele;

- Pentru arbore se defineşte, în mod normal, o structură de date cu trei câmpuri: nod şi cei doi

fii. După scrierea valorilor unui fiu, mai devreme sau mai târziu, se va citi şi nodul pereche,

astfel încât, se poate calcula a priori numărul de valori ce trebuie scrise pentru a parcurge în

mod independent arborele de codare.

4.1.1. CODUL SURSĂ AL ALGORITMULUI HUFFMAN ÎN VISUAL C++

//Building the Tree in encoding

void En_Decode::BuildHufTree()

{

int NodeCounter = 256;

int i;

for (i = 0; i < NodeCounter; i++)

{

OurTree[i].parent = -1;

OurTree[i].right = -1;

OurTree[i].left = -1;

}

while (1)

{

int MinFreq0 = -1;

int MinFreq1 = -1;

for (i = 0; i < NodeCounter; i++)

{

if (i != MinFreq0)

{

if (OurTree[i].freq > 0 && OurTree[i].parent == -1)

{

if (MinFreq0 == -1 || OurTree[i].freq < OurTree[MinFreq0].freq)

{

if (MinFreq1 == -1 || OurTree[i].freq < OurTree[MinFreq1].freq)

MinFreq1 = MinFreq0;

MinFreq0 = i;

60

Page 61: compresia informatiei textuale

}

else if (MinFreq1 == -1 || OurTree[i].freq < OurTree[MinFreq1].freq)

MinFreq1 = i;

}

}

}

if (MinFreq1 == -1)

{

NumOfRootNode = MinFreq0;

break;

}

//Combine two nodes to form a parent node

OurTree[MinFreq0].parent = NodeCounter;

OurTree[MinFreq1].parent = NodeCounter;

OurTree[NodeCounter].freq = OurTree[MinFreq0].freq + OurTree[MinFreq1].freq;

OurTree[NodeCounter].right = MinFreq0;

OurTree[NodeCounter].left = MinFreq1;

OurTree[NodeCounter].parent = -1;

NodeCounter++;

}

}

//Decode Data

void En_Decode::Output1Bit(int bit)

{

if (BitCounter == 8 || bit == -1)

{

while (BitCounter < 8)

{

BitContainer <<= 1;

BitCounter += 1;

}

out_file.put(BitContainer);

BitCounter = 0;

}

61

Page 62: compresia informatiei textuale

BitContainer = (BitContainer << 1) | bit;

BitCounter++;

}

void En_Decode::Compress1Byte(int node, int child)

{

if (OurTree[node].parent != -1)

Compress1Byte(OurTree[node].parent, node);

if (child != -1)

{

if (child == OurTree[node].right)

Output1Bit(0);

else if(child == OurTree[node].left)

Output1Bit(1);

}

}

void En_Decode::Encode()

{

char c;

unsigned char uc;

int idx;

FREQCOUNTER OrigBytes = 0;

int ActiveSymbs = 0;

while (!in_file.eof())

{

in_file.get(c);

uc = static_cast<unsigned char>(c);

if (OurTree[uc].freq == 0)

{

ActiveSymbs++;

}

OurTree[uc].freq++;

OrigBytes++;

62

Page 63: compresia informatiei textuale

}

out_file.write(reinterpret_cast<const char *>(&OrigBytes), sizeof(FREQCOUNTER));

out_file.write(reinterpret_cast<const char *>(&ActiveSymbs), sizeof(ActiveSymbs));

for (idx = 0; idx < 256; idx++)

{

if (OurTree[idx].freq > 0)

{

uc = static_cast<char>(idx);

out_file.put(uc);

out_file.write(reinterpret_cast<const char *>(&OurTree[idx].freq), sizeof(FREQCOUNTER));

}

}

BuildHufTree();

temp_file.seekg(0, std::ios::beg);

while(1)

{

temp_file.get(c);

if (temp_file.eof())

break;

uc = static_cast<unsigned char>(c);

Compress1Byte(uc, -1);

}

Output1Bit(-1);

}

void En_Decode::Decode()

{

FREQCOUNTER OrigBytes = 0;

int ActiveSymbs = 0;

in_file.read(reinterpret_cast<char *>(&OrigBytes), sizeof(FREQCOUNTER));

in_file.read(reinterpret_cast<char *>(&ActiveSymbs), sizeof(int));

char c;

63

Page 64: compresia informatiei textuale

unsigned char uc;

while (ActiveSymbs--)

{

in_file.get(c);

uc = static_cast<unsigned char>(c);

in_file.read(reinterpret_cast<char *>(&OurTree[uc].freq), sizeof(FREQCOUNTER));

}

BuildHufTree();

while (OrigBytes--)

{

int NumOfTgtSymb;

NumOfTgtSymb = NumOfRootNode;

while (OurTree[NumOfTgtSymb].right != -1)

{

if (BitCounter == 0)

{

in_file.get(c);

BitContainer = static_cast<unsigned char>(c);

if (in_file.eof())

return;

BitCounter = 8;

}

if (BitContainer & 0x80)

NumOfTgtSymb = OurTree[NumOfTgtSymb].left;

else

NumOfTgtSymb = OurTree[NumOfTgtSymb].right;

BitContainer <<= 1;

BitCounter--;

}

out_file.write(reinterpret_cast<const char *>(&NumOfTgtSymb), sizeof(char));

}

}

64

Page 65: compresia informatiei textuale

4.2. ALGORITMUL LZW (ALGORITM PE BAZĂ DE DICŢIONAR)

Algoritmul LZW încearcă totdeauna să genereze coduri pentru şiruri deja

cunoscute. Şi de fiecare dată când este generat un cod nou, un sir nou se

adaugă în tabelul de şiruri [5].

ALGORITM DE CODARE LZW:

1. STRING = get input character

2. WHILE there are still input characters DO

3.     CHARACTER = get input character

4.     IF STRING+CHARACTER is in the string table then

5.         STRING = STRING+character

6.     ELSE

7.         output the code for STRING

8.         add STRING+CHARACTER to the string table

9.         STRING = CHARACTER

10.     END of IF

11. END of WHILE

12. output the code for STRING

Algoritmul pereche, cel de decomprimare are rolul de a prelua secvenţa de coduri rezultată la

comprimare şi de a utiliza acele coduri pentru reconstituirea şirului codificat prin operaţia de

comprimare. Un motiv în plus pentru a aprecia eficienta algoritmului LZW rezidă în faptul că la

decomprimare nu este necesară cunoaşterea/transmiterea prealabilă a tabelului de echivalente şiruri-

coduri.

Tabelul acesta poate fi (re)construit exact aşa cum a fost construit la comprimare, utilizând

numai intrările (codurile) primite. Această tratare este posibilă deoarece algoritmul de comprimare

generează componentele şir şi caracter din tabel totdeauna înainte de a le utiliza în secvenţa de

ieşire. Aceasta înseamnă că datele comprimate nu sunt supraîncărcate cu tabele de translaţie de mari

dimensiuni.

ALGORITM DE DECODARE LZW:

1. Read OLD_CODE

2. output OLD_CODE

65

Page 66: compresia informatiei textuale

3. CHARACTER = OLD_CODE

4. WHILE there are still input characters DO

5.     Read NEW_CODE

6.     IF NEW_CODE is not in the translation table THEN

7.         STRING = get translation of OLD_CODE

8.         STRING = STRING+CHARACTER

9.     ELSE

10.         STRING = get translation of NEW_CODE

11.     END of IF

12.     output STRING

13.     CHARACTER = first character in STRING

14.     add OLD_CODE + CHARACTER to the translation table

15.     OLD_CODE = NEW_CODE

16. END of WHILE

4.2.1. CODUL SURSĂ AL ALGORITMULUI LZW ÎN VISUAL C++

// Construction/Destruction

void CLZWCompression::Init()

{

m_dictionary = NULL;

m_SavedData = 0;

m_TotalBits = 0;

m_MaxBits = 9;

}

CLZWCompression::~CLZWCompression()

{

ClearDictionary();

}

//This function was added to send log information to the view

void CLZWCompression::Log(CString data)

{

//Put something inside the log if exist

if (p_Log != NULL)

p_Log->Add(data);

66

Page 67: compresia informatiei textuale

}

//Create a new dictionary

void CLZWCompression::CreateDictionary()

{

Log("Creating dictionary!");

m_dictionary = new CDictionary;

}

//Remove the existing dictionary

void CLZWCompression::ClearDictionary()

{

if (m_dictionary != NULL)

{

Log("Clear dictionary!");

delete[] m_dictionary;

m_dictionary = NULL;

}

}

BOOL CLZWCompression::Compress(CFile &source, CFile &destination)

{

long prefix = 0;

long result = 0;

BYTE readByte = 0;

unsigned long filetotal = 0;

CString logString;

DWORD resAdd = 256;

//Initialize the necessary data

Init();

//Get the total file size

filetotal = source.GetLength();

//Create the dictionary (if not created already)

67

Page 68: compresia informatiei textuale

if (m_dictionary == NULL)

{

CreateDictionary();

}

//Read the first byte from the file

source.Read(&prefix, 1);

//Go over the rest of the file and read it

while (source.GetPosition() < filetotal)

{

//Read the second byte

source.Read(&readByte, 1);

//Check if the prefix and readByte combination exist in the dictionary

result = m_dictionary->GetEntry(prefix, readByte);

//If not exist

if (result == -1)

{

//Add the new combination

resAdd = m_dictionary->AddEntry(prefix, readByte);

//Calculate the new bit size needed to encode the file

CalculateBitSize(resAdd);

//To show a log in the view

logString.Format("Adding combination of %d and %d to dictionary to entry %d.",

prefix, readByte, resAdd);

Log(logString);

//Send the prefix for compression in to the destination file

CompressData(destination, prefix);

//Set the prefix as the readByte

68

Page 69: compresia informatiei textuale

prefix = readByte;

//Initiate the result

result = -1;

}

else

{

//Set the prefix as the result

prefix = result;

readByte = 0;

}

}

//Compress the remaining information in the refix into the destination file

CompressData(destination, prefix);

//Close the destination file

CloseCompressedFile(destination);

//Remove the existing dictionary

ClearDictionary();

return TRUE;

}

void CLZWCompression::CompressData(CFile &dest, long toSave)

{

DWORD writeData = 0;

//Move the data you want to write few bits to the left

//and combine it with the already existing data in the buffer

m_SavedData |= (DWORD) toSave << (32 - m_MaxBits - m_TotalBits);

//Add the new added number of bits to the total bits counter

m_TotalBits += m_MaxBits;

//Check if it's possible to enter the data to the file

69

Page 70: compresia informatiei textuale

//(over and equal a byte of data)

while (m_TotalBits >= 8)

{

//Get the byte we want to write

writeData = m_SavedData;

writeData >>= 24;

dest.Write(&writeData, 1);

//remove the byte from the buffer

m_SavedData <<= 8;

//Remove the byte from the counter

m_TotalBits -= 8;

}

}

BOOL CLZWCompression::Decompress(CFile &source, CFile &destination)

{

DWORD prefix = 0, data = 0;

CString logString;

CByteArray decodeString;

BYTE writeData = 0, character = 0;

int counter = 0;

Init();

//Create the dictionary (if not already created)

if (m_dictionary == NULL)

{

CreateDictionary();

}

//Get the first prefix information

prefix = DecompressData(source);

70

Page 71: compresia informatiei textuale

//Save the prefix as the last used character (since we're writing it in the destination file)

character = (BYTE)prefix;

//Write the prefix in the destination file (the first byte inside a LZW copressed file is always

//the first byte of the original file)

destination.Write(&prefix, 1);

//While the recieve data is not the maximum bit data possible

while ((data = DecompressData(source)) != m_MaxCode[m_MaxBits])

{

//Check if the code exist in the dictionary

//if not

if (!m_dictionary->IsCodeExist(data))

{

//Get the last used character into the decod buffer

decodeString.Add((BYTE)character);

//Decode the existing prefix into a known string of data

m_dictionary->GetBytesFromCode(&decodeString, prefix);

}

else

{

//Decode the data into the decode buffer

m_dictionary->GetBytesFromCode(&decodeString, data);

//Get the last letter inside the data, as the last used letter

character = decodeString.GetAt(decodeString.GetSize() - 1);

}

//Go over the decode buffer, from the end to the start,

//and write the information into the destination file

counter = decodeString.GetSize();

while (counter > 0)

{

writeData = (BYTE)decodeString.GetAt(--counter);

destination.Write(&writeData, 1);

71

Page 72: compresia informatiei textuale

//To show a log in the view

logString.Format("Adding character code %d with know visualisation of: %s"

writeData, convertASCIIToText(writeData));

//logString.Format("Adding byte %d to file.", writeData);

Log(logString);

}

//Clear the decode buffer

decodeString.RemoveAll();

//Add the new combination into the dictionary

m_dictionary->AddEntry(prefix, (BYTE)character);

//Calculate the new buffer size to read now

CalculateBitSize(m_dictionary->GetMaxCode()+1);

//Set the new prefix to use

prefix = data;

}

return TRUE;

}

// Decompress Data

DWORD CLZWCompression::DecompressData(CFile &source)

{

DWORD returnValue;

BYTE readByte = 0;

//If the source file still contains information

if (source.GetPosition() < source.GetLength())

{

//check if the number of bits in the read buffer is >= 24

while (m_TotalBits <= 24)

{

//Read one byte

72

Page 73: compresia informatiei textuale

source.Read(&readByte, 1);

//Add the byte to the read buffer

m_SavedData |= (DWORD) readByte << (24 - m_TotalBits);

//Add byte to the bit counter

m_TotalBits += 8;

}

}

else

{

//If there is no more data, and there are no more bits to read

//while the file is over, then return the maximum bit number

//to end the decompression process

if (m_SavedData == 0 && m_TotalBits == 0)

return m_MaxCode[m_MaxBits];

}

//calculate the return information

returnValue = m_SavedData >> (32 - m_MaxBits);

//Remove the returned information from the buffer

m_SavedData <<= m_MaxBits;

//Remove the return information bit size from the bit counter

m_TotalBits -= m_MaxBits;

//Return the data

return returnValue;

}

void CLZWCompression::CloseCompressedFile(CFile &source)

{

//Insert to the file the maximum number of bit (for signaling the end of the compression/

//decompression)

CompressData(source, m_MaxCode[m_MaxBits]);

//Flash the rest of the file with 0

CompressData(source, 0);

73

Page 74: compresia informatiei textuale

}

void CLZWCompression::CalculateBitSize(DWORD value)

{

//Check the value of the parameter against the Maximum number possible

//and then returns the counter

//This can also be acheived by right shifting the value until we get 0

//and counting the number of times we doing it.

BYTE counter;

for (counter = 0; counter < 32; counter++)

{

if (value <= m_MaxCode[counter])

break;

}

m_MaxBits = counter;

if (m_MaxBits < 9)

m_MaxBits = 9;

}

//Added for using the log from the application

BOOL CLZWCompression::CompressWithLog(CFile &source, CFile &destination, CStringArray

*pLog)

{

p_Log = pLog;

return Compress(source, destination);

}

BOOL CLZWCompression::DecompressWithLog(CFile &source, CFile &destination,

CStringArray *pLog)

{

p_Log = pLog;

return Decompress(source, destination);

}

CONCLUZIE

74

Page 75: compresia informatiei textuale

Compresia se realizează prin schimbarea modului de reprezentare a datelor având deci de a face

cu un caz particular de codare. Această codare se face în raport cu un anumit model al datelor, se

căută modelul optimal. Eficienţa compresiei obţinută cu o metodă oarecare poate fi apreciată prin

raportul de compresie – raportul dintre dimensiunea reprezentării datelor în lipsa compresiei şi

dimensiunea reprezentării datelor obţinute în urma compresiei.

Cea mai generală clasificare a metodelor de compresie se face după eroarea de refacere a

datelor. În raport cu acest criteriu distingem două categorii mari de metode: metode fără pierderi –

în care datele se refac în totalitate şi metode cu pierderi – în care datele se refac în limita unor erori

considerate acceptabile.

În funcţie de modul cum evoluează în timp modelul sursei de date, metodele de compresie se

pot diviza în metode statice (în care modelul este fix, nu evoluează în timp ce este construit apriori,

pe baza unor mesaje considerate tipice), semistatice (în care modelul este construit înaintea codării

pe baza datelor ce urmează să fie comprimate şi este nemodificat pe durata acesteia) şi dinamice (în

care compresia începe la o anumită stare a modelului, aceeaşi atât în cazul comprimării cât şi în cel

al decomprimării).

Modelarea statistică a unei surse discrete de informaţie constă în asocierea unei probabilităţi de

apariţie a fiecărui simbol al alfabetului sursei urmată apoi de atribuirea de cuvinte de cod cu un

număr mai mic de biţi cuvintelor cu o probabilitate de apariţie mai mare. Din această categorie fac

parte codificarea Shannon-Fano, codificarea Huffman statică şi dinamică, codificarea aritmetică.

Metodele de compresie bazate pe modelarea lingvistică a surselor discrete au la bază ideea de a

construi un dicţionar din cuvinte ale limbajului asociat sursei. Ulterior inserării unui cuvânt în

dicţionar în cazul oricărei apariţii a cuvântului acesta se înlocuieşte cu o informaţie despre poziţia sa

în dicţionar. Din această categorie fac parte algoritmii LZ77, LZ78, LZW.

În lucrul cu fişiere de dimensiuni mari este important sa se poată asigura compresia datelor

astfel încât acestea să ocupe un spaţiu de stocare minim. Pentru prelucrarea datelor respective,

acestea trebuie însa restaurate în forma decomprimată, recunoscută de aplicatiile care gestionează

acele tipuri de informatii.

Aplicaţiile au rolul de a facilita munca utilizatorului cu arhive de fişiere (arhivele sunt fişiere

care contin alte fisiere, comprimate prin intermediul unui algoritm de compresie). Procesul de

compresie reduce dimensiunile fisierelor astfel încât să ocupe un spaţiu minim sau să poată fi

copiate pe suporturi de capacitate mică şi transmise în reţea în timp real.

WinRAR este versiunea de 32 biţi a arhivatorului RAR pentru Windows – un instrument

puternic care permite de a crea, gestiona şi controla fişierele arhivelor. Numărul fişierelor ce poate

fi adăugat la o arhivă depinde de cantitatea memoriei disponibile şi de lungimea numelor fişierelor.

75

Page 76: compresia informatiei textuale

Mărimea unei arhive RAR sau a unui fişier de arhivat într-o arhivă RAR, este limitată la 8 589 934

591 Go.

WinZip se integrează perfect în postul de lucru şi de explorare Windows. WinZip integrează o

sarcină de formate de fişiere din cele mai curente de pe Internet: RAR, BZ2, BZ, TBZ, TBZ2, TAR,

gzip, UUencode, XXencode, BinHex et MIME. Mai mult, programele externe asigură acceptarea

fişierelor ARJ, LZH şi ARC. WinZip permite accesul practic la toate fişierele compresate şi codate

ce pot fi descărcate de pe Internet.

WinZip preia formatul de fişier Zip &4biţi, ceea ce elimină toate restricţiile practice legate de

mărimea arhivelor, de asemenea şi de numărul şi mărimea fişierelor compresate într-o arhivă.

Capacitatea de arhivare nu este limitată decât de resursele sistemului.

WinZip se caracterizează printr-o criptare avansată: tehnologia de criptare AES 128 biţi şi 256

biţi a lui WinZip nu permite consultarea neautorizată a conţinutului documentelor.

7-Zip creează arhive compatibile în întregime cu Zip. Orişicine poate decompresa aceste

fişiere cu orice aplicaţie compatibilă Zip de decompresie. Fişierele compresate cu alte metode de

compresie Zip pot fi extrase de versiunea curentă a lui 7-Zip. Dar aceste metode suportate sunt mai

populare, de aceea 7-Zip poate decompresa marea majoritate a arhivelor Zip. 7-Zip suportă extensia

Zip64 a formatului ZIP.

PowerArchiver 2009 conţine toate opţiunile de bază ce sunt aşteptate de la o aplicaţie de

arhivare – permite citirea şi extragerea în mai multe formate, de asemenea şi crearea arhivelor în

mai multe formate, în particular cu 7-zip care este cel mai puternic la momentul actual. Ceea ce

diferenţiază PowerArchiver faţă de aplicaţiile similare ţine de numeroasele sale opţiuni.

Apariţia necesităţii digitizării publicaţiilor de patrimoniu, a manuscriselor etc. impune crearea

unei tehnici de compresie pentru fişierele scanate. Stocarea acestor fişiere în format DjVu care în

acest moment permite cel mai bun raport de compresie/calitate a fişierului standard este o

posibilitate analizată în această lucrare. Fişierele .djvu pot fi vizualizate cu ajutorul unui browser

web având plugin-ul corespunzător instalat. Un fişier .tif color de 32 Mb ajunge la 100 Kb în format

djvu fără pierdere semnificativă de rezoluţie.

Un algoritm de compresie poate fi evaluat în funcţie de necesarul de memorie pentru

implementarea algoritmului, viteza algoritmului pe o anumită maşină, raportul de compresie,

calitatea reconstrucţiei. De obicei, ultimele două criterii sunt esenţiale în adoptarea algoritmului de

compresie, iar eficienţa lui este caracterizată de compromisul criteriilor enumerate.

76

Page 77: compresia informatiei textuale

BIBLIOGRAFIE

[1] Bottou Léon, Patrick Haffner and Yann LeCun, Efficient Conversion of Digital Documents to

Multilayer Raster Formats, AT&T Labs – Research.

[2] Bottou Léon, Patrick Haffner, Paul G. Howard, Patrice Simard, Yoshua Bengio and Yann

LeCun, High Quality Document Image Compression with DjVu, AT&T Labs, Lincroft, NJ, July

13, 1998.

[3] Bottou Léon, Patrick Haffner, Yann LeCun, Paul Howard, Pascal Vincent, Bill Riemers, DjVu:

Un Système de Compression d’Images pour la Distribution Réticulaire de Documents

Numérisés, AT&T Labs, Research 100 Schulz Drive, Red Bank, NJ 07701 USA.

[4] Likforman-Sulem Laurence, Apport du traitement des images à la numérisation des documents

manuscrits anciens, Ecole Nationale Supérieure des Télécommunications Département TSI, 46

rue Barrault, 75013 Paris.

[5] Nelson Mark, Data Compression, Dr. Dobb's Journal, October 1st, 1989.

[6] Nelson Mark and Jean-loup Gailly, The Data Compression Book, 2nd edition, M&T Books,

New York, NY,1995.

[7] Ostafe Doina, Biblioteca viitorului - colecţiile digitale, Revista Româna de Biblioteconomie şi

Ştiinţa Informării, Anul 3, nr. 2, 2007, p.15-18.

[8] Pigeon Steven, Contribution à la compression de données, Thèse presentée à la Faculté des arts

et sciences en vue de l’obtention du grade Philosophiæ Doctor (Ph. D.) en Informatique,

Université de Motréal, Décembre 2001.

[9] Radescu Radu, Compresia fara pierderi, Editura MATRIX ROM, Bucuresti, 2003.

[10] Repanovici Angela, Gabriela Mailat, Corina Pop, Valorificarea si protejarea documentelor de

patrimoniu prin digitizare, Revista Româna de Biblioteconomie şi Ştiinţa Informării, nr. 2,

2007, p.27-29.

[11] Roxin Ioan, Daniel Mercier, Multimédia : Les fondamentaux. Introduction à la représentation

numérique, Vuibert, Paris, 2004, p.30-65.

[12] Soroiu Claudiu, Compresia datelor, serial Gazeta de informatică nr.13/1, Cluj-Napoca,

ianuarie 2003.

[13] Soroiu Claudiu, Compresia datelor, serial Gazeta de informatică nr.13/2, Cluj-Napoca,

februarie 2003.

77

Page 78: compresia informatiei textuale

Referinţe web:

[14] Tărniceriu Daniela prof. dr. ing., Cursul de Compresie şi Criptare de la Facultatea de

Electronică şi Telecomunicaţii, Universitatea Tehnică "Gh. Asachi" Iaşi,

http://telecom.etc.tuiasi.ro/pns/cc/, consultat 19.03.2010.

[15] 7-zip Help, www. 7-zip .org , consultat 23.04.2010.

[16] Compararea aplicaţiilor de arhivare, http://en.wikipedia.org/wiki/Comparison_of_file_

archivers, consultat 23.04.2010.

[17] Compresia datelor, http://www.datacompression.info/, consultat 26.04.2010.

[18] Contens WinRAR, http://download.cnet.com/WinRAR-32-bit/3000-2250_4-10007677. html,

consultat 23.04.2010.

[19] PowerArhiver Help, www. powerarchiver .com , consultat 23.04.2010.

[20] ZIP Help, www. winzip .com , consultat 23.04.2010.

78