Hvad er den bedste tekstkomprimeringsalgoritme?

Bedste svar

Hvis du med “bedste” mener du komprimeringsforhold, så ifølge Stor tekstkomprimeringsbenchmark , det er CMIX. Det eneste problem er, at du har brug for en computer med 32 GB hukommelse for at køre den. Og så tager det 4 dage at komprimere eller dekomprimere 1 GB tekst.

Som de fleste af de mest rangerede programmer bruger CMIX ordbogen forbehandling og kontekstblanding i PAQ-stil. Forprocessoren erstatter ord med 1 til 3 bit symboler fra en ordbog og udfører anden behandling såsom at erstatte store bogstaver med et specielt symbol og det tilsvarende små bogstav. Det kan også analysere almindelige præfikser og suffikser.

En kontekstmodel tager en kontekst (for eksempel de sidste n bits) og gætter en sandsynlighed p at den næste bit er 0 eller 1. Resultatet tilføres til en aritmetisk koder, der koder bit meget tæt på Shannon-grænsen for log2 1 / p bits. Kompressionsforholdet afhænger derfor helt af, hvor godt p estimeres. En kontekstblandingsalgoritme giver meget nøjagtige forudsigelser ved at kombinere forudsigelser fra mange uafhængige modeller. CMIX bruger flere hundrede modeller, hvorfor det kræver så meget tid og hukommelse. Årsagen til, at der er så mange modeller, er, at der er mange forskellige mulige sammenhænge, ​​mange måder at konvertere en kontekst til en forudsigelse på, mange måder at opdatere modellen på, og mange måder at adaptivt kombinere forudsigelser af andre modeller og vælge de bedste ved hjælp af et hierarki af blandere. Praktiske kontekstblandere bruger muligvis 2 til 20 modeller og ofrer noget kompression for enkelhed og brugervenlighed.

De bedste kompressorer kommer tæt på faktisk forståelse af tekst. De modellerer sprogets leksikale, semantiske og grammatiske struktur. F.eks. Er ordbogen organiseret ved at gruppere relaterede ord sammen, såsom mor med far og mandag med tirsdag . Dette resulterer i ordbogskoder, der kun adskiller sig i de lave bits. Derefter vil nogle af kontekstmodellerne slippe de lave bits, så kompressoren kan forudsige Jeg så min far mandag efter at have set Jeg så min mor tirsdag .

De tekniske detaljer kan være ganske involverede. Hvis du er interesseret i at lære mere, se Datakomprimering forklaret .

Svar

Forudsat at du taler om tabsfri komprimering (tekster kan for eksempel være tabsfri komprimeret med SMS-sprog), det er velkendt, at du ikke kan komprimere tabsfrit “nogen” binær fil. Med andre ord vil nogle filer øge deres størrelse. Dette skyldes koderhovedfiler og grundlæggende matematik med umulige sammenhænge mellem [0, …, N] og [0, …, N-1] eller Dirichlet pigeon-hole-princip (Schubfachprinzip). Se http://en.wikipedia.org/wiki/Pigeonhole\_principle

Som sagt før henviser “bedste” generelt til et gennemsnitligt kompressionsforhold @ Sam-Jp. Tegnsættet med tekster (f.eks. Ascii 7 eller 8 bits betyder noget) og deres type er også vigtig. “Bedste komprimering” på rene menneskeskrevne tekstfiler opfører sig forskelligt på printerens postscript, rtf, doc eller endda pdf-filer, der indeholder tekst, da nogle formater allerede indkapsler komprimering. Følgelig afhænger “bedst” ​​i kompressionsforhold af databaseindholdet, homogeniteten og typologien for tekstfiler, som set engelsk tekstkomprimering givet i @ Igor-Carron-link: http://www.maximumcompression.com/data/text.php

Speed ​​@ Jonathan-Hseu er også ret vigtigt. Afhængigt af din applikation (fra arkivering til databaseinteraktioner @ Daniel-Lemire) fokuserer man enten på kompression eller dekompression (typisk komprimere en gang, dekomprimere mange) hastighed eller begge dele.

Men andre funktioner kan vurderes som godt, især med fremkomsten af ​​enorme datasæt og forskellige anskaffelsessystemer:-tilfældig adgangsydelse eller søgefunktion i komprimerede filer -fejlmodstandsdygtighed (modstand mod beskadigede bits) -online-kapacitet, dvs. at være i stand til effektivt at komprimere datastrømmen som den kommer – komprimering af tekster struktureret ikke kun i en rasterrækkefølge, men i træer, grafer – lav kompleksitet eller energisk effektivitet af koderen eller dekoderen eller begge dele – mulig parallelisering – muligheden for distribueret kodning (komprimeringsarbejde delt på forskellige noder i et netværk)

Til sidst, selv for tekst, kan man tænke ud af den tabsfri boks. Og vi vender tilbage til SMS, der er citeret før, hvor betydning er vigtig, men måske ikke den korrekte stavemåde, se f.eks.Kaufman & Klein, semitabsfri komprimering http://www.computer.org/portal/web/csdl/doi/10.1109/DCC.2004.1281520

Som normalt løser spørgsmålet om “bedst” ​​ved at forfine spørgsmålet om det faktiske formål ved at definere yderligere kvalitetsmålinger og passende vægtning af disse målinger for at definere “dit” bedste @ Alex-Kamil. Emner i følgende kilder er inspirerende:

* IEEE-transaktioner om informationsteori http://ieeexplore.ieee.org/xpl/RecentIssue.jsp?punumber=18 * IRE-transaktioner om informationsteori http://ieeexplore.ieee.org/xpl/RecentIssue.jsp?punumber=4547527 * Datakomprimeringskonference sider.cs.brandeis.edu/~dcc/

Endelig, da jeg ikke er specialist, men amatør inden for tabsfri kompression, er jeg for nylig blevet forbløffet over ydelsen (i kompressionsforhold) for Deplump (http://www.deplump.com/index.html) på nogle lange engelske tekstfiler og et par binære filer (sammenlignet med mine favoritter rar, Bzip2 og 7zip citeret i andre svar). Du kan teste det for korte filer online. For yderligere information se F. Wood et al. Sekvensmemoizer, 2011 (se http://www.sequencememoizer.com/) eller Franck Woods webside http://www.stat.columbia.edu/~fwood/

Skriv et svar

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *