29-07-2023
Calgary corpus - набор текстовых и двоичных файлов, часто использовавшийся в качестве стандартного теста алгоритмов сжатия данных и сравнения их эффективности. Набор был собран в Университете Калгари в 1987 году и широко применялся в 1990-х. В 1997 был предложен новый тестовый набор Canterbury corpus[1], в котором были учтены некоторые замечания к репрезентативности корпуса Калгари[2].
В наиболее часто используемой форме корпус Калгари состоит из 14 файлов общим объёмом 3141622 байт:
Размер (байт) | Имя файла | Описание |
---|---|---|
111,261 | BIB | Текст ASCII в формате утилиты UNIX "refer" с 725 библиографическими записями. |
768,771 | BOOK1 | Неформатированный текст ASCII новеллы Томаса Харди Far from the Madding Crowd. |
610,856 | BOOK2 | Текст ASCII в формате "troff" – Ian H. Witten: Principles of Computer Speech. |
102,400 | GEO | Сейсмические данные в виде 32 битных чисел с плавающей запятой в формате IBM. |
377,109 | NEWS | Текст ASCII – набор сообщений из групп USENET. |
21,504 | OBJ1 | Исполняемый файл для VAX, полученный компиляцией PROGP. |
246,814 | OBJ2 | Исполняемый файл для Macintosh, программа "Knowledge Support System". |
53,161 | PAPER1 | Статья в формате "troff" – Witten, Neal, Cleary: Arithmetic Coding for Data Compression. |
82,199 | PAPER2 | Статья в формате "troff" – Witten: Computer (in)security. |
513,216 | PIC | Изображение размером 1728 x 2376: текст на французском и линейные диаграммы. |
39,611 | PROGC | Исходный код на языке C – программа UNIX compress v4.0. |
71,646 | PROGL | Исходный код на языке Lisp – системное приложение. |
49,379 | PROGP | Исходный код на языке Pascal – программа для оценки сжатия PPM. |
93,695 | TRANS | Текст ASCII и управляющие последовательности - запись терминальной сессии. |
Реже используется набор из 18 файлов, в который дополнительно включены 4 текстовых файла в формате "troff" - PAPER3-PAPER6.
Корпус Calgary часто использовался для сравнения эффективности сжатия в 1990-е годы. Результаты часто указывались в виде коэффициента бит на байт (среднее количество бит в сжатом файле, требуемое для кодирования 1 байта исходного файла) для каждого файла из набора, затем они усреднялись. Затем чаще стали указывать суммарный размер всех сжатых файлов[3].
Некоторые архиваторы допускали более эффективное сжатие при одновременной обработке всего корпуса (например, при их помещении в несжатый контейнер тира tar), за счет использования взаимной информации. Другие архиваторы, наоборот, хуже сжимали такой вариант из-за медленной реакции компрессора на изменение характеристик данных. Одновременное сжатие всего корпуса использовалось Matt Mahoney в его книге Data Compression Explained[4].
В таблице указаны размеры сжатого корпуса для нескольких популярных архиваторов.
Архиватор | Опции | Сжатие 14 отдельных файлов | Объединенный tar архив |
---|---|---|---|
Без сжатия | 3,141,622 | 3,152,896 | |
compress | 1,272,772 | 1,319,521 | |
Info-ZIP 2.32 | -9 | 1,020,781 | 1,023,042 |
gzip 1.3.5 | -9 | 1,017,624 | 1,022,810 |
bzip2 1.0.3 | -9 | 828,347 | 860,097 |
7-zip 9.12b | 848,687 | 824,573 | |
ppmd Jr1 | -m256 -o16 | 740,737 | 754,243 |
ppmonstr J | 675,485 | 669,497 |
21 мая 1996 года Leonid A. Broukhis начал конкурс "Calgary corpus Compression and SHA-1 crack Challenge"[5], в котором проводилось соревнование по сжатию корпуса Calgary с небольшими денежными призами. После 2010-го приз составляет 1 доллар США за каждое дополнительное уменьшение сжатого файла на 111 байт.
По условиям конкурса, сжиматься должны не только входные файлы корпуса, но и программа для их распаковки. Для этого сначала сжимаются файлы корпуса, затем полученные файлы и распаковщик сжимаются одним из широко распространенных архиваторов. Ограничения на время сжатия и количество используемой памяти постепенно изменяются, и после 2010 допустимо работа в течение 24 часов на компьютере с производительностью в 2000 MIPS (ОС Windows или Linux) и использование до 800 МБ ОЗУ. Позже было добавлено соревнование с SHA-1: распаковщик может создать не оригинальный файл из корпуса, а какой-то другой, но имеющий ту же криптографическую хеш-сумму по алгоритму SHA-1 (таким образом, требуется совершить атаку нахождения коллизии для заданного файла).
Первым приз получил Malcolm Taylor, автор архиваторов RK и WinRK, сжав набор до 759881 байт (сентябрь 1997). Последним приз получил 2 июля 2010 года Alexander Ratushnyak, сжав набор до 572465 байт и используя распаковщик на C++, сжимаемый до 7700 байт при помощи "PPMd var. I". Полный список рекордов в рамках конкурса:
Размер (байт) | Месяц и год | Автор |
---|---|---|
759,881 | 09/1997 | Malcolm Taylor |
692,154 | 08/2001 | Maxim Smirnov |
680,558 | 09/2001 | Maxim Smirnov |
653,720 | 11/2002 | Serge Voskoboynikov |
645,667 | 01/2004 | Matt Mahoney |
637,116 | 04/2004 | Alexander Ratushnyak |
608,980 | 12/2004 | Alexander Ratushnyak |
603,416 | 04/2005 | Przemysław Skibiński |
596,314 | 10/2005 | Alexander Ratushnyak |
593,620 | 12/2005 | Alexander Ratushnyak |
589,863 | 05/2006 | Alexander Ratushnyak |
580,170 | 07/2010 | Alexander Ratushnyak |
Начиная с 2004 года рекордное сжатие достигалось различными вариантами архиватора PAQ, имеющими открытый исходный код (лицензия GPL).
Calgary Corpus.