Библиотека для сжатия текстовых данных и сохранения их в виде текста - PullRequest
1 голос
/ 07 марта 2011

Я хочу хранить веб-страницы в сжатых текстовых файлах (CSV). Чтобы добиться оптимального сжатия, я хотел бы предоставить набор из 1000 веб-страниц. Затем библиотека должна потратить некоторое время на создание оптимального «словаря» для этого контента. Одна очевидная «словарная» запись может быть <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">, которая может храниться как% 1 или что-то подобное, потому что она присутствует почти на всех веб-страницах. Создав подобный словарь, мой коэффициент сжатия должен составлять 99%.

Мой вопрос: существует ли библиотека для этого в Windows с MIT или существует подобное либеральное лицензирование? Если нет, то есть ли какие-нибудь библиотеки сжатия общего назначения, которые вы бы порекомендовали. Я попытался немного с zlib, но он выводит двоичные данные. Если бы я преобразовал эти двоичные данные в текст, я опасаюсь, что результат может быть длиннее исходного текста.

РЕДАКТИРОВАТЬ: мне нужно иметь возможность хранить текст в файлах CSV и все еще иметь возможность импортировать их в базу данных или даже в Excel.

1 Ответ

4 голосов
/ 07 марта 2011
  1. "текстовые файлы (не двоичные)" - это слишком много общего.Если вы имеете в виду, что некоторые байтовые значения (00,1A или что-либо еще) не могут быть использованы, то можно использовать любой двоичный метод + что-то вроде кодирования base64.(Хотя я бы предложил более эффективный метод из демонстрационного источника Coroutine ).

    Если говорить точнее, вы можете использовать любой компрессор общего назначения для сжатия вашего базового файла, затем базовый файл + целевой файл, затем их различие, и вы получите сжатие словаря (двоичное), которое может бытьзатем конвертируется в «текст» с помощью base64 или yenc или чего-либо еще.

    В качестве альтернативы, есть некоторые кодеры со встроенной поддержкой для этого, например
    http://compression.ru/ds/ppmtrain.rar
    http://code.google.com/p/lzham/

  2. Если вы на самом делеЕсли вы хотите заменить общие фразы ссылками, а все остальное оставить нетронутым (что подразумевается, но не равно «выводу текста»), вы можете использовать текстовые препроцессоры, такие как:
    http://xwrt.sourceforge.net/
    http://compression.ru/ds/liptify.rar (было еще больше).

  3. Также возможен гибридный метод.Вы можете использовать универсальный LZ-компрессор, как в [1], например, lzma, а затем заменить его энтропийное кодирование чем-то текстовым.Например, в http://nishi.dreamhosters.com/u/lzmarec_v1_bin.rar есть утилита, которая удаляет энтропийное кодирование LZMA и довольно легко конвертирует ее вывод в текст.

...