Care este cel mai bun algoritm de compresie a textului?

Cel mai bun răspuns

Dacă prin „cel mai bun” înțelegeți raportul de compresie, atunci conform Etalon de compresie text mare este CMIX. Singura problemă este că aveți nevoie de un computer cu 32 GB de memorie pentru al rula. Și apoi vor dura 4 zile pentru a comprima sau decomprima 1 GB de text.

La fel ca majoritatea programelor clasate de top, CMIX folosește preprocesarea dicționarului și amestecarea contextului în stil PAQ. Preprocesorul înlocuiește cuvintele cu simboluri de 1 până la 3 biți dintr-un dicționar și efectuează alte prelucrări, cum ar fi înlocuirea literelor mari cu un simbol special și simbolul minuscul corespunzător. De asemenea, poate analiza prefixe și sufixe comune.

Un model de context ia un context (de exemplu, ultimii n biți) și ghicește o probabilitate p că următorul bit va fi 0 sau 1. Rezultatul este alimentat către un codor aritmetic, care codifică bitul foarte aproape de limita Shannon a log2 1 / p biți. Prin urmare, raportul de compresie depinde în totalitate de cât de bine este estimat p . Un algoritm de amestecare a contextului face predicții foarte precise prin combinarea predicțiilor multor modele independente. CMIX folosește câteva sute de modele, motiv pentru care necesită atât de mult timp și memorie. Motivul pentru care există atât de multe modele este că există multe contexte posibile diferite, multe modalități de a converti un context la o predicție, multe modalități de a actualiza modelul și multe modalități de a combina în mod adaptiv predicțiile altor modele și de a le selecta pe cele mai bune o ierarhie a mixerelor. Mixerele de context practice ar putea folosi 2 până la 20 de modele, sacrificând o anumită compresie pentru simplitate și utilizare.

Cele mai bune compresoare se apropie de de înțelegere text. Ele modelează structura lexicală, semantică și gramaticală a limbajului. De exemplu, dicționarul este organizat prin gruparea cuvintelor corelate, cum ar fi mamă cu tată și luni cu marți . Acest lucru duce la coduri de dicționar care diferă doar în biții mici. Apoi, unele dintre modelele de context vor scădea biții mici, permițând compresorului să prezică L-am văzut pe tatăl meu luni după ce am văzut Am văzut-o pe mama marți .

Detaliile tehnice pot fi destul de implicate. Dacă sunteți interesat să aflați mai multe, consultați Compresia datelor explicată .

Răspuns

Presupunând că vorbiți despre pierderi compresie (textele pot fi comprimate cu limbaj SMS de exemplu), este bine cunoscut faptul că nu puteți comprima fără pierderi „orice” fișier binar. Cu alte cuvinte, unele fișiere vor avea dimensiunea lor mărită. Acest lucru se datorează fișierelor antet coder și matematicii de bază ale bijecțiilor imposibile între [0, …, N] și [0, …, N-1], sau principiului Dirichlet pigeon-hole (Schubfachprinzip). A se vedea http://en.wikipedia.org/wiki/Pigeonhole\_principle

După cum sa menționat anterior, „cel mai bun” se referă, în general, la un anumit raport mediu de compresie @ Sam-Jp. Setul de caractere al textelor (de exemplu; ascii 7 sau 8 biți contează) și tipul lor sunt importante. „Cea mai bună compresie” pentru fișierele text scrise în limbaj uman pur se comportă diferit în fișierele postscript, rtf, doc sau chiar în format pdf ale conținutului de text, deoarece unele formate încapsulează deja compresia. În consecință, „cel mai bun” în raport de compresie depinde de conținutul bazei de date, de omogenitate și de tipologia fișierelor text, așa cum se vede compresia textului în limba engleză dată în link-ul @ Igor-Carron: http://www.maximumcompression.com/data/text.php

Speed ​​@ Jonathan-Hseu este, de asemenea, destul de important. În funcție de aplicația dvs. (de la arhivare la interacțiunile bazei de date @ Daniel-Lemire), una se concentrează fie pe viteza de compresie sau decompresie (de obicei comprimă o dată, decomprimă multe), fie pe ambele.

Dar alte caracteristici pot fi evaluate ca bine, mai ales odată cu apariția unor seturi de date uriașe și a diverselor sisteme de achiziție: -performanță de acces aleatoriu sau capacitate de căutare în fișiere comprimate-rezistență la erori (rezistență la biți corupți) -capacitate online, adică posibilitatea de a comprima eficient fluxul de date pe măsură ce vine comprimarea textelor structurate nu numai într-o ordine raster, ci în copaci, grafice -complicitate scăzută sau eficiență energetică a codificatorului sau a decodificatorului sau ambele -paralelizare posibilă -posibilitatea codificării distribuite (lucru de compresie partajat la diferite noduri ale unei rețele)

În cele din urmă, chiar și pentru text, se poate gândi din caseta fără pierderi. Și ne întoarcem la SMS-urile citate anterior, unde sensul este important, dar poate nu ortografia corectă, vezi de ex.Kaufman & Klein, Compresie semi-fără pierderi http://www.computer.org/portal/web/csdl/doi/10.1109/DCC.2004.1281520

Ca de obicei, întrebarea „cel mai bun” se rezolvă în rafinarea întrebării scopului real, în definirea suplimentară valori de calitate și ponderare adecvată a acestor valori pentru a defini „cel mai bun” dvs. @ Alex-Kamil. Subiectele din următoarele surse sunt inspiratoare:

* IEEE Transactions on Information Information http://ieeexplore.ieee.org/xpl/RecentIssue.jsp?punumber=18 * IRE Transactions on Information Theory http://ieeexplore.ieee.org/xpl/RecentIssue.jsp?punumber=4547527 * Conferința de compresie a datelor pages.cs.brandeis.edu/~dcc/

În cele din urmă, nefiind un specialist, dar amator în compresia fără pierderi, am fost recent uimit de performanța (în raportul de compresie) a lui Deplump (http://www.deplump.com/index.html) pe unele fișiere text în limba engleză lungi și câteva fișiere binare (comparând cu preferințele mele rare, Bzip2 și 7zip citate în alte răspunsuri). Puteți să îl testați online pentru fișiere scurte. Pentru informații suplimentare, consultați F. Wood și colab. Memorizatorul de secvențe, 2011 (vezi http://www.sequencememoizer.com/) sau pagina web a lui Franck Wood http://www.stat.columbia.edu/~fwood/

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *