Вы здесь5077 сомнений.
Опубликовано пн, 18/08/2008 - 10:44 пользователем pkn
5077 сомнений. Ну вот. Начала, наконец, прожевываться перловка, скрипты хоть кое-как зафурычили, стремительным домкратом наросла библиотечка полезных сабрутинок, и в тумане перспективы стал вырисовываться первый результат: 5077. 5077 - это число книжек из AldLit (это, совместно, Альдебаран36163 и Литрес4415), которых, по нынешнему мнению скрипта-сравнилки, нет в Либрусеке. На самом деле множество из них таки в Либрусеке есть, и я хотел бы уменьшить это число 5077 - более правильным сравнением книг из AldLit и из Либрусека. Но тут я теряюсь в сомнениях. Помогите соображениями о возможных подводных камнях, братие и сестрие! По вот этим поводам. Деёфикация: Декавычкизация: Детирезация: Ещё я хочу спросить уважаемое сообщество про этавот, о книгах из AldLit, стоящих в первой очереди к заливке на Либрусек: 1. Конвертировать ли в UTF-8 те книги, которые сейчас в другой кодировке?
Updated: Предполагаемый порядок предзаливочной обработки (именно в изложенном порядке): 1. Записать в custom-info (не в history) предлибрусечное происхождение - Aldebaran36163 или Litres4415 (Perl script) 2. Инкрементировать версию на 3. Прогнать через FB2Fix (попутно конвертировать все файлы в кодировку UTF-8, конвертирование никуда не записывать) (FB2Fix) Используемая версия Fb2Fix 1.0.8. Содержимое options-файла: 4. Прогнать через fb2-renaming, по схеме: Familiya_Imya_(Serial-#)_Nazvanie_knigi.fb2 . При этом _(Serial-#) - опционально, вставляются только при наличии таковых в дескрипшне. Если авторов много, автор берется только первый. (Perl script) Updated: новое магическое число, после улучшения логики сравнивалки - 4511. Updated: Самое-самое последнее магическое число - 4509. Да и то благополучно закончилось :)) http://lib.rus.ec/sites/default/files/4509-list-by-title.txt 805.48 кб ---------------------------------
|
Вход на сайтПоиск по блогам и форумамUser menuПоследние комментарии
kopak RE:Таинственная личность админа Флибусты 2 часа
babajga RE:Ежик покидает дом 12 часов Aliki RE:Подайте бедному копеечку на книжку с литреса... 3 часа babajga RE:Сказки бабушки Черепахи 22 часа babajga RE:Свист диких крыльев 23 часа Саша из Киева RE:Кто сможет раздобыть и оцифровать нужные мне книги? 2 дня Саша из Киева RE:Турецкие мусорщики в Анкаре открыли библиотеку, полную... 1 неделя Isais RE:Не тот автор 2 недели xieergai60 RE:Продление подписки 2 недели TaKir RE:Валерия Сергеевна Черепенчук А. Н. Николаева - Мифы... 2 недели Isais RE:Древняя Греция. Читаем... 2 недели laurentina1 RE:Ирина Александровна Велембовская - Немцы 3 недели Саша из Киева RE:Избранное 4 недели Alligatoreader RE:Багрепорт - 2 4 недели fedor.de RE:Отображение страницы Librusek 1 месяц Isais RE:Чиполь Сергеевич Наглецов - Огненный дракон [СИ] 1 месяц blahblahblah2024 RE:Беженцы с Флибусты 1 месяц sem14 RE:Что читать о блокаде Ленинграда. Подборка книг 1 месяц Впечатления о книгах
Саша из Киева про Сеф: Золотая шашка (Детская проза)
19 12 Моя огромная благодарность тому, кто разместил в Интернете распознанный текст этой книги! Это книга моего детства!
neletay про Шульц: Мой друг - домовой (Юмористическая фантастика, Фэнтези, Самиздат, сетевая литература)
19 12 На удивление, прочитала с удовольствием. Добрая и забавная история. Только корректор нужен.
decim про Капустин: История нашей еды. Чем отличались продукты советского времени от сегодняшних [litres] (История, Кулинария)
19 12 Не ругайте сгоряча. Книга годится как памятник эпохи. С учётом того, что пожилой автор работал в высших сферах и некоторые обычные безобразия для него на уровне ЧП. В идеале и вскоре после открытия(или ревизии) в ресторане ………
decim про Антоновский: Русские супергерои (История, Биографии и Мемуары, Научпоп)
19 12 Усишки монархии навалили кучу дайджестов для жертв попсы. Аффтар, "рус" означало не "воин", а "гребец", человек весла. Морской труд необходим, без него герой никуда бы не добрался. Даже, как в нашем случае, с попутным ветром. ……… Оценка: нечитаемо
Foset про Евфросиния Антоновна Керсновская
18 12 Да, Фрося бой-баба была, конечно. Но "дура отпетая", как она сама писала про характеристику близких. Сама голову засунула в это пекло, чего-то упырям всё доказать пыталась. Надо было сразу рвать в Румынию вместе с матушкой, ………
Alexandr A.Shpilman про Измайлов: Неправильный лекарь. Том 2 (Городское фэнтези, Попаданцы, Самиздат, сетевая литература)
18 12 Против ГГ готовятся применит магию... а тот тупо стоит манекеном... Ну один раз... а потом возникает мысль бросить такое чтение...
Лысенко Владимир Андреевич про Матвеев: Ниочёма-3 [СИ] (Юмор: прочее, Городское фэнтези, Попаданцы, Самиздат, сетевая литература)
18 12 Прочитал все три книги, легкое, расслабляющее чтиво. Оценка: отлично!
Barbud про Большаков: Целитель. Книга 10 (Боевая фантастика, Попаданцы, Самиздат, сетевая литература)
17 12 Есть авторы, которые не дописывают свой цикл, а есть те, что остановиться не могут, Большаков из вторых. Так и хочется сказать: "Горшочек, не вари!". Оценка: плохо
decim про Чапман: БондиАнна. В Россию с любовью (Биографии и Мемуары)
17 12 Ну, как поплавала?(с) Нечитаемо. |
||||||||||
Комментарии
Отв: 5077 сомнений.
4509 благополучно кончились :))
Отв: 5077 сомнений.
Интересный глюк случился при заливке этой коллекции.
У книги Меня зовут "Бендер" аннотация от Наполеон. Последняя любовь
При попытке исправить аннотацию, оказалась, что она общая для обеих книг, изменения происходят сразу и в той и в другой! Как случилось такое объединение и как его отменить?
Удалось исправить: скачал, удалил из библиотеки, залил по-новой.
Отв: 5077 сомнений.
Пока я дрых уже исправили... а глюк и правда интересный, я такого и не припомню.
Отв: 5077 сомнений.
На "Списке проектов" появилось сообщение еще об одном таком баге. Исправлять не стал, посмотрите в чем там дело.
(http://lib.rus.ec/b/117281) получтил аннотацию от (http://lib.rus.ec/b/117183)
Отв: 5077 сомнений.
> На "Списке проектов" появилось сообщение еще об одном таком баге. Исправлять не стал, посмотрите в чем там дело.
Сначала подумал, что заблуждаетесь. Но оказались правы. Кусочки для прояснения (комментарии мои):
Возможно, повторяю возможно, поможет простое unset в parsefb2. Нужно обращаться к создателю.
Я правильно понимаю, что ошибка появляется при закачке сразу нескольких книг, в некоторых из которых нет annotation?
Отв: 5077 сомнений.
Нет, промах. Действительно одна аннотация на две книги. Я пас.
Отв: 5077 сомнений.
Если книгу с бОльшим номером удалить, а потом залить ее по новой, то ошибка исчезает и у книги появляется аннотация выдернутая из описания. Если востановить удаленную - ошибка появляется вновь. Т.е. ошибка привязана к определенному номеру файла.
Отв: 5077 сомнений.
Внутри parsefb2 нельзя делать unset. В $PD передаются некоторые параметры для парсера.
Отв: 5077 сомнений.
Ковыряясь в результатах заливки, кажется, понял поведение Либрусека при разметке сериалов. В fb2-схеме тег sequence может присутствовать аж в трех местах: в title-info, в src-title-info и в publish-info.
Пример: http://lib.rus.ec/b/114885 (Азимов, Логика есть логика)
1. В title-info <sequence name="Рассказы о демоне Азазеле" />
2. src-title-info отсутствут целиком
3. В publish-info <sequence name="Миры Айзека Азимова" number="12" />
При заливке победил sequence из publish-info, что, в общем, логично. А я при fb2-переименовании ориентировался только на sequence из title-info. Надо будет сделать учет всех трех, с приоритетом publish-info - старший, title-info - самый младший.
Кстати, в Либрусеке на страничке редактирования книги теги sequence не показываются (баг?).
Отв: 5077 сомнений.
Серия к которой относится произведение автора это одно, а издательская серия - это совсем другое :-)
И они вполне могут быть разными
Отв: 5077 сомнений.
> При заливке победил sequence из publish-info, что, в общем, логично.
Баг из той же серии, что и этот. Толко хуже - одно строчкой не обойтись уже. Не предусмотрено было несколько sequence изначально. Вот отрывок из того же parse.inc:
Т.е. здесь используется не массив, как в случае с авторами, а строка. Но я плохо знаю как устроены внутренности lib.rus.ec, и вообще ничего не знаю про Drupal. Но полагаю, что нужно сделать по образу и подобию с author, типа так:
Естественно, нужна новая функция AddSeqId, кою ещё нужно встроить в двух-трех местах, убрать лишнее. Много кода перетрясти придеться - новые глюки вылезти могут.
Где багтрекер?
Отв: 5077 сомнений.
Багтрекер нашел, вот:
http://lib.rus.ec/forums-6
Отв: 5077 сомнений.
Кода перетрясти придётся пол библиотеки.
SeqId сидит в libbook, отдельной таблицы нет. На наличии нескольких сериалов у одной книги совершенно не расчитано. Придётся пересматривать все места где есть SELECT FROM libbook, заменяя на libbook LEFT JOIN libseq USING(BookId), их сотни, перепрограммировать все списки книг с учётом многосериальности. Да и скорости лишний JOIN не добавит.
Не уверен, что оно того стоит. Несколько авторов бывает часто, а вот несколько сериалов - это уже редкость.
Отв: 5077 сомнений.
> Кода перетрясти придётся пол библиотеки.
Хорошо, тогда следует вставить костыли в парсере. Как уже говорили - выставить приоритеты. Серия книги приоритетней серии бумажного издания (автор для нас важнее издательских крыс!). Все просто думаю - если уже есть - не переписывать (if(empty($seria)) $seria=$tomy_to). Ведь вначале идет именно серия книги.
> Внутри parsefb2 нельзя делать unset.
Хорошо, но можно удалить тот же annotation ($PD['ann']). И по возможности удалить все, что относиться к книге. Иначе, если в последующей книжке в цикле чего-то не хватает, то копируется из предыдущей. Конечно, опять костыль, не совсем верно. Ох уж эти глобальные переменные.
Но не понятно мне, почему одна аннотация на две книги? Связанно ли это с тем, что "случайно" оказались одинаковые аннотации. Магия друпала?
Нужно разговор на форум перенести. Уже несколько подобных багов поднакопилось.
Отв: 5077 сомнений.
Bullfear, тут готовятся к заливке вторая и третья очереди из AldLit - подтверди, пожалуйста, что версию нужно приподнимать на 0.001, а не 0.01. Спрашиваю на всякий случай, а то может ты передумал. А то меня немножко сомнения берут что 0.001 будет достаточно чтобы заливочный скрипт убедить в старшинстве заливаемой версии.
Отв: 5077 сомнений.
Подтверждаю :) Кстати все равно я отсеивал книги в архивах либрусека по дате. За 18-е число добавлять не стал.
Скрипт железный. Сравнивает больше\меньше. Для такого сравнения даже 0.00000001 достаточно будет, чтобы его убедить. В принципе можно проверить :)
Отв: 5077 сомнений.
Это я тоже так думал, пока не начал в Перле версии сравнивать... ну будем надеяться, что php (Либрусек вроде на php написан) поумнее Перла в этом деле. Все таки следующее поколение. ОК, 0.001 it is.
Баг в kop-fb2-split-copy-by-lang.pl_.txt ... точнее в File::Find
Заметка для отметки.
В процессе ковыряния нащупал баг в скриптах (включая kop-fb2-split-copy-by-lang.pl_.txt)... точнее, в модуле File::Find. (ActivePerl perl, v5.8.7 built for MSWin32-x86-multi-thread)
Перловый модуль File::Find не находит файлы, у которых в имени есть кириллические буквы. Например:
Vonnegut_Kurt__Dolgaya_progulka_тАФ_navsegda.fb2
С одной стороны - это хорошо, я теперь понимаю почему у меня из сравнилки и вылезает постоянно так много "отсутствующих на Либрусеке" книг.
С другой - плохо: я как-то не могу придумать как этот баг обойти. DIR в cmd.exe тоже выдает ??? вместо кириллицы...
Отв: Баг в kop-fb2-split-copy-by-lang.pl_.txt ... точнее в File
В конечном счете "и одолел" ©. Как обычно (гребаный перл!) действовать пришлось через ухо.
Сначала, после долгих мытарств с unzip-режимом 7zip-а и попыток (безуспешных) припахать умный UnRar, пришлось таки научиться залезать в зипы из перла. Оказалось, что оно того стоило - перловый unzip неплох.
Затем пришлось вплотную познакомиться со структурой fb2-файлов (якобы fb2), залитых на Либрусек на ранних этапах. Тут я обрел понимание отчего и почему хлипкий перловый модулёк XML::Parser падал в обморок от одного вида этих файлов. Заодно очередной раз приподнялся мой градус уважения к Ларину, но это мы спишем на подхалимаж.
В общем, процедура такова:
use Archive::Zip qw( :ERROR_CODES :CONSTANTS );
- и все мои проблемы с Compress::Zlib отпадают. Оно таки работает, просто я не тот модуль пытался подключить.
Затем собираем в список все либрусечьи зипы, извлекаем списки мемберов, отсекаем (по расширению, увы) не-fb2, и начинаем их распаковывать... в память, только в память! Если распаковка не произошла - безжалостно бросаем, это файло безнадежно.
А вот если произошла... тут начинаем пытаться создать ASCII-валидное имя файла извлекая из у неё внутре fb2-шные теги. Именно так, и никак иначе - проверено Электроником. Ларин при этом, если я правильно понимаю, если в кривом дескрипшне вообще отсутствует book-title и/или author, идёт в body и берет нужное прямо оттуда. А то и тег FictionBook парсит на предмет наличия... (см. Hitman: Enemy Within ) ...но у меня, слава богам задача попроще: если из fb2-файла нельзя извлечь имя, то это не fb2-файл, и пусть его автор повесится.
Теперь, если удалось извлечь из (якобы) fb2 имя-файла (пусть сто раз корявое, но валидное) - сплёвываем память в это имя-файла (естественно, проверившись и обезопасившись на предмет дупликатов), и весело насвистывая, переходим к следующему. Если не удалось (что-то около 80 файлов из 103202) - рапортуем файл как извлекаемый, но fb2-безнадежный. Сравнилка сочтет его несуществующим, но, может, где-то потом пригодится.
Собствено, все. Таким макаром удалось извлечь из librusec-zips-original 102431 файла (из 103202) - тысячи на три больше, чем удавалось многомудрому WinRar-у, кстати.
Теперь зарядить изготовление хешей, и завтра, с новыми силами - уля-улю! - сравнилку гонять во все гривы.
Страницы