vak: (Знайка)
[personal profile] vak
Полтора года назад бессменный администратор библиотеки «Флибуста» Стивер объявил, что ему недолго осталось. Хоть я и неактивный читатель, я решил, что на всякий случай стоит заиметь собственную копию. Благо народ на торрентах раздаёт качественные снапшоты. Объём гигантский однако, так что для скачивания мне пришлось проапгрейдить план Comcast. 

В сыром виде Флибуста представляет собой набор из 395 файлов в формате ZIP, каждый в среднем 3 гигабайта. Внутри находятся файлы с абстрактными именами - собственно книжки. Плюс дополнительный ZIP архив с метаинформацией, из которой можно узнать название книги, автора, язык, жанр и другое. В сумме примерно 806000 записей.

Всё это дело хранилось у меня на диске, ждало своего времени. Разгрести эту кучу вручную невозможно. Но вчера на досуге вдруг возникла мысль: ведь теперь есть неленивый помощник в виде ИИ. Пусть он займётся разгребанием хламовника. Но надо дать ему какую-то начальную живопырку.

Народ наделал для формата Флибусты некоторое количество вспомогательного софта, и один из них (freeLib) оказался полезным. Я установил freeLib на маке, вызвал - запускается. Спрашивает, где на диске лежит Флибуста, сканируем её всю и создаёт базу данных в формате SQLite. Размером 427 мегабайт, не хухры мухры. Прекрасно, ровно то что нужно!

Я дал Курсору исходники freeLib и файл базы freeLib.sqlite. Он тут же сделал прекрасное описание схемы базы: Database.md. И смастерил тулзу (на Golang) для поиска по базе.
$ ./flib
flib — search the freeLib SQLite catalog

Usage:
  flib show PATTERN [--max NUM]   Search books by title (regular expression). Default --max is 20.
  flib extract [--destdir DIR]    Extract books into language/author/book.format tree.
  flib by author                  List all books grouped by author (tab-separated columns).
  flib by genre                   List all books grouped by genre.
  flib by language                List all books grouped by language.
  flib help                       Show this message

Environment:
  FLIB_DB   Path to freeLib.sqlite (default: ~/Documents/freeLib.sqlite)
  FLIB_PATH Path to Flibusta library root with zip archives (required for extract)
Главное здесь: режим extract. Из Флибусты извлекаются все книжки одна за одной, и разкладываются в указанном месте по папкам в два уровня:
язык/автор/название.формат
Полный список всех получившихся файлов, полученный командой tree, занимает 59 мегабайт. Выглядит так:
.
├── ad
│   └── Автор Неизвестен -- Мифы. Легенды. Эпос. Сказания
│       └── Нартхэр.pdf
...
├── en
│   ├── Аноним
│   │   └── Diary of an Oxygen Thief.epub
│   ├── Библия
│   │   ├── От Марка святое благовествование[Параллельный перевод].fb2
│   │   ├── Евангелие от Иоанна[Параллельный перевод].fb2
│   │   ├── Holy Bible: New International Version (NIV).fb2
│   │   ├── Holy Bible. New Revised Standard Version (NRSV).fb2
│   │   ├── The Bible - New International Version.fb2
│   │   ├── The Gospel according to John[Good News Translation ( GNT Bible )].fb2
│   │   └── The New Jerusalem Bible(rtf).zip
...
├── ru
│   ├── АБ
│   │   └── Московская история.fb2
...
├── uk
│   ├── Алай
│   │   └── Коли курява спаде.fb2
│   ├── Алкей
│   │   └── Золоте руно. З античної поезії[Збірка].djvu
│   ├── Антология
│   │   └── Львівська антологія. Том I. Від давніх часів до початку ХХ ст..fb2
│   ├── Аристотель
│   │   ├── Нікомахова етика.fb2
│   │   ├── Метафізика.fb2
│   │   └── Поетика.fb2
│   ├── Аристофан
│   │   └── Комедії.fb2
...
└── zh
...
    ├── Лао-цзы
    │   ├── 道德经.fb2
    │   └── Dàodé jīng.fb2
    └── Сунь-цзы
        └── The Art of War (chinese).fb2

154598 directories, 680883 files
Суммарный объём всех книг в распакованном виде - 1.6 Tбайт.

Я считаю, Флибуста представляет собой ценный исторический артефакт. Не Александрийская библиотека, конечно, но 680000 книг тоже неплохо. Удивительно, но до сих пор не проводилось никаких исследований её с научной точки зрения.