Jaki jest najlepszy algorytm kompresji tekstu?

Najlepsza odpowiedź

Jeśli przez „najlepszy” masz na myśli współczynnik kompresji, to zgodnie z Test porównawczy kompresji dużego tekstu to CMIX. Jedynym problemem jest to, że do jego uruchomienia potrzebny jest komputer z 32 GB pamięci. A potem kompresja lub dekompresja 1 GB tekstu zajmie 4 dni.

Podobnie jak większość najwyżej ocenianych programów, CMIX wykorzystuje wstępne przetwarzanie słownika i mieszanie kontekstu w stylu PAQ. Preprocesor zastępuje słowa symbolami od 1 do 3 bitów ze słownika i wykonuje inne operacje, takie jak zastępowanie wielkich liter specjalnym symbolem i odpowiadającym mu symbolem małej litery. Może również analizować typowe przedrostki i sufiksy.

Model kontekstu przyjmuje kontekst (na przykład ostatnie n bitów) i zgaduje prawdopodobieństwo p że następny bit będzie równy 0 lub 1. Wynik jest podawany do kodera arytmetycznego, który koduje bit bardzo bliski limitowi Shannona log2 1 / p bits. Dlatego współczynnik kompresji zależy całkowicie od tego, jak dobrze p jest oszacowane. Algorytm mieszania kontekstów zapewnia bardzo dokładne przewidywania, łącząc przewidywania wielu niezależnych modeli. CMIX wykorzystuje kilkaset modeli, dlatego wymaga tak dużo czasu i pamięci. Powodem istnienia tak wielu modeli jest to, że istnieje wiele różnych możliwych kontekstów, wiele sposobów przekształcania kontekstu w prognozę, wiele sposobów aktualizacji modelu oraz wiele sposobów adaptacyjnego łączenia prognoz innych modeli i wybierania najlepszych przy użyciu hierarchia mikserów. Praktyczne miksery kontekstowe mogą używać od 2 do 20 modeli, poświęcając trochę kompresji dla prostoty i użyteczności.

Najlepsze kompresory są w rzeczywistości bliskie zrozumienia tekst. Modelują strukturę leksykalną, semantyczną i gramatyczną języka. Na przykład słownik jest zorganizowany poprzez grupowanie powiązanych słów, takich jak matka z ojciec i poniedziałek z wtorek . Skutkuje to kodami słownikowymi różniącymi się tylko małymi bitami. Następnie niektóre modele kontekstowe zrzucą dolne bity, umożliwiając kompresorowi przewidzenie Widziałem mojego ojca w poniedziałek po obejrzeniu We wtorek widziałem się z mamą .

Szczegóły techniczne mogą być dość skomplikowane. Jeśli chcesz dowiedzieć się więcej, zobacz Wyjaśnienie kompresji danych .

Odpowiedź

Zakładając, że mówisz o bezstratnej (teksty mogą być kompresowane stratnie na przykład za pomocą języka SMS), dobrze wiadomo, że nie można kompresować bezstratnie „żadnego” pliku binarnego. Innymi słowy, rozmiar niektórych plików zostanie zwiększony. Wynika to z plików nagłówkowych kodera i podstawowych obliczeń matematycznych dotyczących niemożliwych bijekcji między [0, …, N] a [0, …, N-1] lub z zasady gołębnika Dirichleta (Schubfachprinzip). Zobacz http://en.wikipedia.org/wiki/Pigeonhole\_principle

Jak wspomniano wcześniej, „best” ogólnie odnosi się do pewnego średniego współczynnika kompresji @ Sam-Jp. Kodowanie tekstów (np. Ascii 7 lub 8 bitów ma znaczenie) i ich typ również jest ważny. „Najlepsza kompresja” plików tekstowych napisanych w czystym języku ludzkim zachowuje się inaczej w przypadku plików PostScript, rtf, doc, a nawet PDF zawierających tekst, ponieważ niektóre formaty już zawierają kompresję. W związku z tym „najlepszy” współczynnik kompresji zależy od zawartości bazy danych, jednorodności i typologii plików tekstowych, jak widać kompresję tekstu w języku angielskim podaną w linku @ Igor-Carron: http://www.maximumcompression.com/data/text.php

Szybkość @ Jonathan-Hseu jest również dość ważna. W zależności od aplikacji (od archiwizacji po interakcje z bazą danych @ Daniel-Lemire), można skupić się na kompresji lub dekompresji (zazwyczaj kompresja raz, dekompresja wiele) lub obu.

Ale inne cechy można ocenić jako cóż, zwłaszcza wraz z pojawieniem się ogromnych zbiorów danych i różnorodnych systemów akwizycji: – wydajność losowego dostępu lub możliwość wyszukiwania w skompresowanych plikach – odporność na błędy (odporność na uszkodzone bity) – zdolność online, tj. zdolność do wydajnej kompresji strumienia danych w miarę jego powstawania – kompresja tekstów ustrukturyzowanych nie tylko w porządku rastrowym, ale w postaci drzew, wykresów – niska złożoność lub efektywność energetyczna kodera lub dekodera lub jedno i drugie – możliwa równoległość – możliwość kodowania rozproszonego (kompresja współdzielona w różnych węzłach sieci)

Ostatecznie, nawet w przypadku tekstu, można wyobrazić sobie bezstratne pudełko. I wracamy do cytowanych wcześniej SMS-ów, gdzie znaczenie jest ważne, ale może nie poprawna pisownia, patrz np.Kaufman & Klein, Kompresja półstratna http://www.computer.org/portal/web/csdl/doi/10.1109/DCC.2004.1281520

Jak zwykle, pytanie „najlepszej” polega na doprecyzowaniu pytania o rzeczywisty cel, zdefiniowaniu dodatkowych wskaźniki jakości i odpowiednie wagi tych wskaźników w celu określenia „Twojego” najlepszego @ Alex-Kamil. Inspirujące są tematy w następujących źródłach:

* Transakcje IEEE w teorii informacji http://ieeexplore.ieee.org/xpl/RecentIssue.jsp?punumber=18 * Transakcje IRE w teorii informacji http://ieeexplore.ieee.org/xpl/RecentIssue.jsp?punumber=4547527 * Data Compression Conference pages.cs.brandeis.edu/~dcc/

Wreszcie, będąc nie specjalistą, ale amatorem bezstratnej kompresji, byłem ostatnio zdumiony wydajnością (współczynnikiem kompresji) Deplump (http://www.deplump.com/index.html) na niektórych długich angielskich plikach tekstowych i kilku plikach binarnych (w porównaniu z moimi ulubionymi rar, Bzip2 i 7zip cytowanymi w innych odpowiedziach). Możesz przetestować go pod kątem krótkich plików online. Dodatkowe informacje można znaleźć w F. Wood i in. The Sequence Memoizer, 2011 (patrz http://www.sequencememoizer.com/) lub strona internetowa Francka Wooda http://www.stat.columbia.edu/~fwood/

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *