Migliore risposta
Se per “migliore” intendi il rapporto di compressione, in base al Benchmark compressione testo grande è CMIX. Lunico problema è che per eseguirlo è necessario un computer con 32 GB di memoria. E poi ci vorranno 4 giorni per comprimere o decomprimere 1 GB di testo.
Come la maggior parte dei programmi di alto livello, CMIX utilizza la preelaborazione dei dizionari e il mix di contesto in stile PAQ. Il preprocessore sostituisce le parole con simboli da 1 a 3 bit da un dizionario ed esegue altre elaborazioni come la sostituzione delle lettere maiuscole con un simbolo speciale e il simbolo minuscolo corrispondente. Può anche analizzare prefissi e suffissi comuni.
Un modello di contesto accetta un contesto (ad esempio, gli ultimi n bit) e ipotizza una probabilità p che il bit successivo sarà 0 o 1. Il risultato viene inviato a un codificatore aritmetico, che codifica il bit molto vicino al limite di Shannon di log2 1 / p bit. Il rapporto di compressione quindi dipende interamente da come viene stimato p . Un algoritmo di mixaggio del contesto esegue previsioni molto accurate combinando le previsioni di molti modelli indipendenti. CMIX utilizza diverse centinaia di modelli, motivo per cui richiede così tanto tempo e memoria. Il motivo per cui ci sono così tanti modelli è che ci sono molti diversi contesti possibili, molti modi per convertire un contesto in una previsione, molti modi per aggiornare il modello e molti modi per combinare in modo adattivo le previsioni di altri modelli e selezionare i migliori usando una gerarchia di mixer. I mixer di contesto pratici potrebbero utilizzare da 2 a 20 modelli, sacrificando un po di compressione per semplicità e usabilità.
I migliori compressori si avvicinano alla comprensione testo. Modellano la struttura lessicale, semantica e grammaticale della lingua. Ad esempio, il dizionario è organizzato raggruppando le parole correlate, come madre con padre e lunedì con martedì . Ciò si traduce in codici di dizionario che differiscono solo per i bit bassi. Quindi, alcuni dei modelli di contesto abbandoneranno i bit bassi, consentendo al compressore di prevedere ho visto mio padre lunedì dopo aver visto Ho visto mia madre martedì .
I dettagli tecnici possono essere piuttosto complessi. Se sei interessato a saperne di più, vedi Spiegazione della compressione dei dati .
Risposta
Supponendo che tu stia parlando di lossless compressione (i testi possono essere compressi con perdita di dati ad esempio con il linguaggio SMS), è risaputo che non è possibile comprimere “qualsiasi” file binario senza perdite. In altre parole, alcune file avranno la loro dimensione aumentata. Ciò è dovuto ai file di intestazione del codificatore e ai calcoli matematici di base delle biiezioni impossibili tra [0, …, N] e [0, …, N-1], o al principio del foro di Dirichlet (Schubfachprinzip). Vedere http://en.wikipedia.org/wiki/Pigeonhole\_principle
Come detto prima, “best” si riferisce generalmente a un rapporto di compressione medio @ Sam-Jp. Anche il set di caratteri dei testi (ad esempio, ascii 7 o 8 bit) e il loro tipo sono importanti. La “migliore compressione” su file di testo scritti in puro linguaggio umano si comporta in modo diverso sui file PostScript, RTF, doc o anche PDF contenenti testo, poiché alcuni formati già incapsulano la compressione. Di conseguenza, il “miglior” rapporto di compressione dipende dal contenuto del database, dallomogeneità e dalla tipologia dei file di testo, come si è visto nella compressione del testo inglese fornita in @ Igor-Carron link: http://www.maximumcompression.com/data/text.php
Anche Speed @ Jonathan-Hseu è abbastanza importante. A seconda dellapplicazione (dallarchiviazione alle interazioni con il database @ Daniel-Lemire), ci si concentra sulla velocità di compressione o decompressione (tipicamente comprimere una volta, decomprimere molti) o entrambe.
Ma altre caratteristiche possono essere valutate come bene, soprattutto con lavvento di enormi set di dati e diversi sistemi di acquisizione: -Prestazioni di accesso casuale o capacità di ricerca nei file compressi -Resilienza agli errori (resistenza ai bit corrotti) -Capacità online, cioè essere in grado di comprimere in modo efficiente il flusso di dati quando arriva – compressione di testi strutturati non solo in un ordine raster ma in alberi, grafi -bassa complessità o efficienza energetica del codificatore, o decodificatore, o entrambi -possibile parallelizzazione -possibilità di codifica distribuita (lavoro di compressione condiviso a diversi nodi di una rete)
Alla fine, anche per il testo, si può pensare fuori dagli schemi senza perdite. E torniamo agli SMS citati prima, dove il significato è importante, ma forse non lortografia corretta, vedi ad es.Kaufman & Klein, Compressione semi-lossless http://www.computer.org/portal/web/csdl/doi/10.1109/DCC.2004.1281520
Come di consueto, porre la questione del “migliore” si risolve nel raffinare la questione dello scopo effettivo, nel definire metriche di qualità e ponderazione appropriata di tali metriche per definire il “tuo” migliore @ Alex-Kamil. Gli argomenti nelle seguenti fonti sono stimolanti:
* Transazioni IEEE sulla teoria dellinformazione http://ieeexplore.ieee.org/xpl/RecentIssue.jsp?punumber=18 * Transazioni IRE sulla teoria dellinformazione http://ieeexplore.ieee.org/xpl/RecentIssue.jsp?punumber=4547527 * Conferenza sulla compressione dei dati pages.cs.brandeis.edu/~dcc/
Infine, non essendo uno specialista ma un dilettante nella compressione senza perdita, sono stato recentemente sorpreso dalle prestazioni (nel rapporto di compressione) di Deplump (http://www.deplump.com/index.html) su alcuni lunghi file di testo in inglese e alcuni file binari (confrontandoli con i miei preferiti rar, Bzip2 e 7zip citati in altre risposte). Puoi testarlo online per file brevi. Per ulteriori informazioni, vedere F. Wood et al. The Sequence Memoizer, 2011 (vedi http://www.sequencememoizer.com/) o la pagina web di Franck Wood http://www.stat.columbia.edu/~fwood/