LINUX.ORG.RU
ФорумTalks

Организация электронной библиотеки из fb2

 , ,


2

4

Выкачал себе полный архив flibusta, выглядит он как множество .zip архивов, в каждом - множество .fb2 файлов с именами в виде чисел, кроме того, имеется .inpx (как я понимаю, это - индекс для MyHomeLib). Вопрос: как это хорошо организовать под онтопиком? Я вижу два варианта:

  • Автоматически раскидать все эти книги, исходя из каких-нибудь их метаданных, в иерархию вида Автор/название.fb2. Собственно, для этого мне, наверное, будет достаточно иметь способ из .fb2 файла получать автора и название.
  • Найти какой-нибудь каталогизатор, который съест все эти книги.

Сам я тяготею к первому варианту, потому что, на мой взгляд, каталогизатор мне ничего эксклюзивного не добавит, зато обойдусь без лишних сущностей. Но, может быть, i am doing it wrong? Пожалуйста, подскажите, как лучше поступить, и если первый вариант лучше, то как получить нужные данные из fb2. Заранее спасибо.

★★

Последнее исправление: Norong (всего исправлений: 3)

1. Traum Library организован именно так. Да, он меньше, но, скорее всего, всё что тебе надо там есть.

2. MyRuLib под Linux, но хз, совместим ли он на 100% с выкачанным тобой индексом.

Falcon-peregrinus ★★★★★
()
Ответ на: комментарий от Lordwind

Не должнон. Разработчики этой шняги знают о подлой сущности питона, поэтому у них там очереди обработки с типами и приоритетами.

zloelamo ★★★★
()
Ответ на: комментарий от border-radius

Это решение неэкономно относится к дисковому пространству. Я же уже говорил, что я для себя вообще-то жму тексты lzma. Точно также могут поступать и другие люди.

saahriktu ★★★★★
()

Найти какой-нибудь каталогизатор, который съест все эти книги

freeLib

user42 ★★
()

Вот тебе подсказка если захочешь первый вариант:
.inpx это zip архив в нем есть файлы .inp соответствующие zip архивам библиотеки.
Структура записи файла .inp такая:
AUTHOR;GENRE;TITLE;SERIES;SERNO;FILE;SIZE;LIBID;DEL;EXT;DATE;LANG;KEYWORDS;<CR><LF>
Разделитель полей записи (вместо ';') - <0x04>
Завершают запись символы <CR><LF> - <0x0D,0x0A>

JackOfShadows
()
Ответ на: комментарий от JackOfShadows

Ага, понял. Пока вижу так: каким-то образом получить значения FILE, AUTHOR, TITLE (опционально - SERIES и SERNO), и дальше, вроде, всё просто. Но я себе хреново представляю, как парсить .inp файлы...

Norong ★★
() автор топика
Ответ на: комментарий от saahriktu

Во-первых, если так уж нужно сжатие, существует вполне себе официальная вещь под названием zsqlite3.

Во-вторых, греп в пожатых файлах искать не может, всё равно распаковывать надо. Если распаковывать пофайлово, искать в тридцати гигах можно вообще вечность. И перерасход ресурсов по сравнению со скулайтом будет в разы выше.

В-третьих, индивидуально сжимать текстики в 2016 году, дабы потом минутами ждать результатов поиска, могут только отборнейшие маргинальные ССЗБ.

Точно также могут поступать и другие люди.

Нет, других таких не будет уже.

border-radius
()
Последнее исправление: border-radius (всего исправлений: 1)
Ответ на: комментарий от Norong

Но я себе хреново представляю, как парсить .inp файлы…

Как любые другие файлы?

theNamelessOne ★★★★★
()
Ответ на: комментарий от border-radius

Зачем городить костыли если есть lzgrep/xzgrep (lzgrep - симлинк на xzgrep)?

xzgrep — a wrapper around a grep program that decompresses files as needed

Работает, кстати, не так уж и медленно.

real    0m21,217s
user    0m11,479s
sys     0m5,608s
Это для примера были обработаны 1406 *.txt.lzma файлов общим весом 127 Мб.

saahriktu ★★★★★
()
Последнее исправление: saahriktu (всего исправлений: 1)
Ответ на: комментарий от Norong

Используешь свой любимый язык программирования и пишешь, проблем не вижу вообще.

JackOfShadows
()
Ответ на: комментарий от saahriktu

Зачем городить костыли

Использование базы данных для, внезапно, оптимального хранения данных - это костыли? Okay...

a wrapper around a grep program that decompresses files as needed

ЧТД. Враппер для пофайловой распаковки. Ну ни разу не костыли, ага.

real 0m21,217s
Это для примера были обработаны 1406 *.txt.lzma файлов общим весом 127 Мб.
Работает, кстати, не так уж и медленно.

Да-а-а-а-а. Поиск в 1406 файлах за 21 секунду - совсем не медленно. Мсье знаток разбазаривания вычислительных ресурсов, я погляжу.

Напомню, что у меня поиск в ≈20000 проиндексированных файлов происходит за 4 секунды. На в разы более слабом железе.

border-radius
()
Последнее исправление: border-radius (всего исправлений: 1)
Ответ на: комментарий от Norong

По сути, можно распарсить CSV-парсером

#!/usr/bin/env ruby

require 'csv'
require 'zip'

FIELD_SEP = "\x4"
RECORD_SEP = "\xd\xa"

abort "Usage: inpx-sample PATH" unless ARGV.size == 1
path = ARGV.first

Zip::File.open(path) do |inpx|
  # Get the first .inp file in the .inpx archive
  first = inpx.glob('*.inp').first

  inp = CSV::new(first.get_input_stream, col_sep: FIELD_SEP, row_sep: RECORD_SEP)

  # Display first 5 entries
  inp.take(5).each do |entry|
    puts "AUTHOR = #{entry[0]}, TITLE = #{entry[2]}, FILE = #{entry[5]}"
  end
end
λ desktop librusec → ./inpx-sample librusec_local_fb2.inpx
AUTHOR = Аббасзаде,Гусейн,:, TITLE = Белка, FILE = 24
AUTHOR = Аббасзаде,Гусейн,:, TITLE = Цветы полевые, FILE = 25
AUTHOR = Аббасзаде,Гусейн,:, TITLE = Дверной молоток, FILE = 26
AUTHOR = Аббасзаде,Гусейн,:, TITLE = Гудок парохода, FILE = 28
AUTHOR = Аббасзаде,Гусейн,:, TITLE = Комар, FILE = 29
theNamelessOne ★★★★★
()
Ответ на: комментарий от JackOfShadows

Картинки из fb2 можно вообще удалить. Для постобработки полученных из fb2 файлов plain text'ов у меня и инструмент есть: gopher://sdf.org/9/users/saahriktu/saahriktu.org/afrosnakebot-0.2.tar.xz . Правда, видимо, нужно будет потом ещё доработать, пока что лучше делать пару итераций.

saahriktu ★★★★★
()
Ответ на: комментарий от border-radius

Справочники для 100% конвертирования требуют ручного перевода. Вот тогда и можно руками нарисовать нужные схемы ascii art'ом. А если это просто иллюстрации, то они ненужны.

saahriktu ★★★★★
()
Ответ на: комментарий от saahriktu

А если это просто иллюстрации, то они ненужны.

Их нужность опциональна только в чисто художественной литературе и то, бывают полезны. В остальных книгах они нужны.

anonymous_incognito ★★★★★
()
Ответ на: комментарий от border-radius

Как «зачем»? Для цели «живу во фреймбуферовской консоли без иксов, всё что можно читать plain text'ом, и читается less'ом; за исключением того, что ещё нужно сконвертировать в картинки, открыть на 2-й виртуальной консоли в fbi, и перевести руками в plain text переключаясь между fbi и текстовым редактором в 1-й виртуальной консоли» только так и надо.

saahriktu ★★★★★
()
Ответ на: комментарий от saahriktu

Куда смотрят наркодиспансеры Старого Оскола?

А на кой хрен конвертировать всё в плейнтекст?

На кой хрен юзать fbi и читать всё лессом?

На кой хрен, итить его крюком, в 2016 году сидеть во фреймбуферной консоли?!

Я, например, тоже для многих задач предпочитаю консольные приложения. Но при этом у меня нормальные иксы, современный браузер (Firefox 46) и тайловый менеджер для удобства раскидывания терминалов по экрану. И UTF-8 везде нормально работает, и шрифты адекватные. И животноводство сглаживание.

Или ты с VT100 эту страницу смотришь? Дык железо вроде 2011 года...

border-radius
()
Ответ на: Куда смотрят наркодиспансеры Старого Оскола? от border-radius

Потому, что так удобнее и органичнее. Всё plain text'ом, и интегрируется между собой screen'ом. Всё просто, быстро, цельно и удобно. А иксы и иксовый софт жрут тонны ресурсов, и при этом каждая софтина сама по себе.

Я раньше тоже не знал и не понимал как это «жить в нативной консоли». Но, 10 лет назад я купил для дачи i486DX4/12 Мб RAM/700 Мб HDD/... И поставил туда Debian Woody. А иксы встали на бэды. Но, я не стал расстраиваться, и познакомился поближе с консолью. И понеслось...

saahriktu ★★★★★
()
Ответ на: комментарий от saahriktu

Потому, что так удобнее и органичнее ограниченнее.

Fixed. Хотя ты даже не увидишь своим фреймбуфером, что именно было зачёркнуто.

Всё plain text'ом

А мир-то с восьмидесятых изменился, оглянись.

screen'ом
Всё просто

/0

быстро

Как у тебя всё «быстро», мы уже увидели на примере с грепом.

цельно

Ага, особенно с мультимедией.

и удобно

Как ты копипастил сюда результаты time? Вангую, что перенабирал ручками - это выдали запятые вместо нормальных точек в качестве десятичных разделителей. И ты мне будешь рассказывать об удобстве?

А иксы и иксовый софт жрут тонны ресурсов

Нет. Просто нет. 4.2.

Я раньше тоже не знал и не понимал как это «жить в нативной консоли»

Ты ведь понятия не имеешь, что в своё время я вытворял в нативной консоли. Ну да ладно, продолжай захлёбываться чувством собственной исключительности.

10 лет назад я купил для дачи i486DX4

А я подобную древнятину заполучил на халяву. Но 10 лет назад у меня уже был вменяемый комп.

И поставил туда Debian Woody.

А можно было просто Damn Small Linux. У меня на четвёрке фурычил в дуалбуте с фридосом.

Но, я не стал расстраиваться, и познакомился поближе с консолью. И понеслось...

... И занесло куда-то совершенно не туда.

border-radius
()
Ответ на: комментарий от border-radius

Вы, очевидно, никогда не работали со screen'ом, раз не знаете даже про встроенные в него средства копирования и вставки текста при помощи одной клавиатуры. C-a, C-[, переместить стрелками курсор к началу копируемого куска, Enter, переместить курсор в конец, Enter. Потом можно переключаться в другое окно, и вставлять через C-a, C-].

Всё идентично. time у меня выводит информацию именно так, символ в символ:

> time date
Пн май  2 17:09:45 MSK 2016

real    0m0,009s
user    0m0,001s
sys     0m0,001s

Нет. Просто нет. 4.2.

> cat /proc/loadavg
0.48 0.44 0.50 1/163 30010

В иксах такого не добиться. Там сразу начинает выжираться проц более чем на 50%.

Ты ведь понятия не имеешь, что в своё время я вытворял в нативной консоли.

Но, про удобства screen'а Вы явно не знаете.

Хотя ты даже не увидишь своим фреймбуфером, что именно было зачёркнуто.

И с lynx'ом тоже Вы не знакомы, да:

и [DEL: органичнее :DEL] ограниченнее

В общем, в мире может меняться что угодно, но это никак не изменит того факта, что plain text остаётся самым удобным форматом для работы с информацией. Да и мультимедиа мне совсем не критична. Была бы консоль.

saahriktu ★★★★★
()
Ответ на: комментарий от saahriktu

В иксах такого не добиться. Там сразу начинает выжираться проц более чем на 50%.

ЧЯДНТ?

$ cat /proc/loadavg
0.14 0.11 0.26 1/509 20104

В иксах. В общем, консоль это хорошо, но если ты не на древнем компе работаешь, в чём смысл себя любимого ограничивать?

anonymous_incognito ★★★★★
()
Ответ на: комментарий от border-radius

А мир-то с восьмидесятых изменился, оглянись.

Всё-таки прелесть свободно ПО, в частности линукса, что каждый при желании может чесать свои @@ как ему хочется =)

anonymous_incognito ★★★★★
()
Ответ на: комментарий от anonymous_incognito

Гм. Видимо, здесь всё очень сильно зависит от того, какой софт работает и какие задачи выполняет.

Ну, как я уже писал, так может быть просто удобнее.

saahriktu ★★★★★
()
Ответ на: комментарий от saahriktu

переместить стрелками курсор к началу копируемого куска

А если вывод команды не умещается на экран целиком?

time у меня выводит информацию именно так, символ в символ

Отлично, ко всем «прелестям» добавляется ещё и говнолокаль.

В иксах такого не добиться.

Очередное 4.2:

v0id@asgard ~$ cat /proc/loadavg
0.06 0.03 0.05 3/237 26451

Там сразу начинает выжираться проц более чем на 50%.

Ну бред же. Горячечный.

Но, про удобства screen'а Вы явно не знаете.

Мне хватало dvtm.

plain text остаётся самым удобным форматом для работы с информацией

Информация бывает не только текстовая. И нетекстовой информации в современном мире становится всё больше и больше.

border-radius
()
Ответ на: комментарий от anonymous_incognito

Ну да, но ведь не демонстрировать это прилюдно и не пытаться научить это делать каждого встречного именно таким образом.

border-radius
()
Ответ на: комментарий от border-radius

Ну да, но ведь не демонстрировать это прилюдно и не пытаться научить это делать каждого встречного именно таким образом.

The great thing about lynx is not browsing the web, it’s showing everyone online that you did.

theNamelessOne ★★★★★
()
Ответ на: комментарий от border-radius

А следует ли куда-то копировать простыни, причём именно через копирование и вставку? В таких случаях может быть удобнее перенаправить вывод в файл, а там уже куда-нибудь его выложить и дать ссылку. В свои текстовые файлы можно спокойно добавлять выводы команд любых объёмов через ":r!" в vim'е и «>>» в shell'е. А если уж начинает чесаться копипастить простыни, то в несколько итераций, да.

Хорошая локаль. Не хотите - не юзайте.

Не бред, я прекрасно помню как работали иксы с иксовым софтом на Athlon64/512 Мб RAM. А, поскольку, современный софт только жирнеет, то ничего хорошего здесь ожидать и не приходится.

Так никто же и не отрицает, что бывает разная информация. На работу со всей информацией миллионов жизней не хватит. Так что, кому что. Кто графику обрабатывает, а кто - тексты.

saahriktu ★★★★★
()
Ответ на: комментарий от saahriktu

А следует ли куда-то копировать простыни, причём именно через копирование и вставку?

Вот демонстрация всей сути эддиобразных персонажей: «если мы этого не можем, это не нужно никому».

В таких случаях может быть удобнее перенаправить вывод в файл, а там уже куда-нибудь его выложить и дать ссылку.

А как выложить текст из файла на какой-нибудь общедоступный сервис типа Pastebin или GitHub Gist? Ну, есть пара пейстбинов с оптимизированным для этого апи, а как насчёт всех остальных?

Да, кстати, как ты капчу-то вводишь при необходимости?

Не бред, я прекрасно помню как работали иксы с иксовым софтом на Athlon64

В том-то и дело, что у меня именно Athlon64. Одноядерный десятилетней давности. Так что всё же смахивает на бред.

border-radius
()
Ответ на: комментарий от border-radius

а как насчёт всех остальных?

Я даже pastebin'ом не пользуюсь. У меня и так есть сайт и аккаунты на net2ftp dot ru и sdf.org. А ещё есть электронная почта с возможностью прикладывания файлов.

как ты капчу-то вводишь при необходимости?

Сохраняю картинку, смотрю картинку, ввожу текст с картинки.

Так что всё же смахивает на бред.

И KDE? Помню загружался с LiveCD в KDE3, и при открытии konqueror'а top показывал загрузку проца больше чем 60%. А так в FVWM'е с лёгким софтом, конечно, должно жрать меньше.

saahriktu ★★★★★
()
Последнее исправление: saahriktu (всего исправлений: 2)

Если автор еще здесь, слушай мою историю успеха по решению ровно этой же задачи.

Я скачал торрент и положил весь контент в Google Drive (да, у меня там пара Tb). Индексируется только description, а не вся книга, но для поиска вполне достаточно + есть custom properties, из которых можно организовать выборки по автору или серии.

phoenix ★★★★
()
Ответ на: комментарий от saahriktu

gopher://

купить i486 в 2006, использовать gopher и ратовать за koi8-r в 2016

вот уж где ультра-убер наркомания

phoenix ★★★★
()
Последнее исправление: phoenix (всего исправлений: 1)
Ответ на: комментарий от saahriktu

аккаунты на net2ftp://ftp.ru и sdf.org.

Лютое, бешеное ретроградство.

А ещё есть электронная почта с возможностью прикладывания файлов.

Ну, IFTTT-то с lynx-а неюзабелен, поэтому сомневаюсь, что приложенные файлы уходят дальше одного конкретного адресата.

Сохраняю картинку, смотрю картинку, ввожу текст с картинки.

У - Удобство. *facepalm*

И KDE?

Без понятия. А зачем вообще юзать кеды на таком-то железе?

Помню загружался с LiveCD в KDE3, и при открытии konqueror'а top показывал загрузку проца больше чем 60%

Здесь на этот показатель повлияли несколько факторов. В первую очередь то, что это LiveCD. Как автор нескольких LiveCD, могу сказать, что загрузка чего-либо со squashfs - уже сама по себе ресурсоёмкая операция. Во вторую очередь сам Konqueror. Слишком упорот и примитивен для браузера, слишком сложен для файлового менеджера. Именно в момент загрузки он мог на то время вешать весь проц. Но это как раз эталонный пример, как не надо писать гуёвый софт. Но он далеко не весь такой, уверяю.

А так в FVWM'е с лёгким софтом, конечно, должно жрать меньше.

У меня лично дома на компе с этим самым атлоном патченный DWM, самый тяжёлый софт - это браузер. Но ведь это всё-таки браузер, а не чёрти-что.

FVWM в 2016 тоже не нужен. Никаких преимуществ перед Fluxbox/Openbox. При этом у последних более «традиционный» внешний вид и набор фич. Нужен тайлинг - пожалуйста, DWM, Awesome, i3...

Всё-таки советую немножко приоткрыть дверцу бункера, выглянуть наружу и посмотреть, что там происходит в окружающем мире. Между кедами и FVWM существует уйма промежуточных вариантов, которые на железе 2006 года, а 2011 и подавно, будут просто летать. При этом консоль никто не отбирает, но многие вещи становятся в разы удобнее и эффективнее.

border-radius
()
Ответ на: комментарий от most-fucktum

Лорчую использование sqlite3. По-моему, оптимальное решение для этих целей.

border-radius
()
Ответ на: комментарий от border-radius

Для почты использую связку mutt + fetchmail + procmail + msmtp.

Ну, KDE2 было более чем юзабельно на Pentium II 233 МГц/128 Мб RAM.

У FVWM'а преимущество в его конфиге и предоставляемых через него возможностях. А у тайлинговых WM есть один минус - растягиваются все окна, включая и те, которые на это не рассчитаны.

saahriktu ★★★★★
()
Ответ на: комментарий от saahriktu

У FVWM'а преимущество в его конфиге и предоставляемых через него возможностях.

Ты не видел, что позволяет творить Awesome. Там конфиг вообще на Lua.

А у тайлинговых WM есть один минус - растягиваются все окна, включая и те, которые на это не рассчитаны.

Опять же, выйди из бункера. Тот же dwm позволяет выставить floating mode для любого выбранного окна при необходимости. И даже зафиксировать это поведение в конфиге. А это самый простой тайловый WM из ныне живых. Тот же Awesome в этом плане вообще справляется без вопросов.

border-radius
()
Ответ на: комментарий от Akamanah

Скормить-то можно, только хавать оно его будет неделю, не меньше. У меня около 1500 книг переваривало почти час.
Я бы просто скормил всё это милое безобразие MyHomeLib, и не парился.

Hurenweibel ★★
()

Могу дать ссылку на репу мою. Я написал простой каталогизатор для этой библиотеки. Писал для себя, поэтому нужно собирать из исходников и БД руками создавать MySQL(Можно SQLite, но она тормозит на большой базе).

Софтинка умеет создать БД на основе архивов тысячников, умеет искать по БД и умеет книги вытаскивать из архивов и складывать в каталог(прописанный в настройках) с удобоваримым названием из Автор - Название.

Написал велосипед, потому что MyRuLib глючная поделка, вылетающая через раз даже на первичном парсинге.

ЗЫЖ Велосипед написан на Qt.

Loki13 ★★★★★
()
Последнее исправление: Loki13 (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.