Вы здесь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Последние комментарии
konst1 RE:Подайте бедному копеечку на книжку с литреса... 30 мин.
sem14 RE:Книжная серия "Жизнь в искусстве" издательство "Искусство"... 1 день sem14 RE:Современная корейская литература. Книжная серия... 1 день monochka RE:<НРЗБ> 5 дней sem14 RE:Серия "Символы времени" издательства "Аграф" 1 неделя sem14 RE:Собираем серию: "Азбука-триллер", издательство "Азбука-Терра" 1 неделя sem14 RE:«Юмористическая серия» 1 неделя larin RE:Оплатил. Абонемент не отображается 1 неделя larin RE:Оплатил, но абонемент не отображается 2 недели nehug@cheaphub.net RE:DNS 2 недели alexk RE:Багрепорт - 2 3 недели Isais RE:Семейственность в литературе 1 месяц Violontan RE:Жан Батист Мольер воскрешенный 1 месяц sem14 RE:Гонкуровская премия 1 месяц Dead_Space RE:Беженцы с Флибусты 1 месяц Саша из Киева RE:Приключения белочки Рыжки 1 месяц alex-from RE:Оплатил два раза, но абонемента нет 1 месяц Kiesza RE:На 78-м году жизни скончался советский и российский... 1 месяц Впечатления о книгах
RedRoses3 про Михалёва: Безупречные создания [litres] (Исторический детектив, Исторические любовные романы)
26 12 Очень неплохо. хорошо закрученная интрига и соввершенно неожиданный финал. Оценка: отлично!
Олег Макаров. про Василий Анатольевич Криптонов
26 12 Открытие для меня вчера этот автор Начал читать "Заметки на полях" — прямо восторг от стиля. Последние годы так было только с Капбой и Мусанифом. В общем, если вам важно не только "о чём" написано, но и "как" — рекомендую
vladimir1098 про Кинг: Не дрогни (Триллер)
25 12 Очень много ошибок, сложно читать, я решил подождать официальный перевод, тем не менее спасибо переводчикам за работу
alexk про Павлов: Древесный маг Орловского княжества 10 (Боевая фантастика, Фэнтези, Попаданцы, Самиздат, сетевая литература)
25 12 Непонятно мне ни фига: стандартный скрипт FBE не превращает "кто-то" в "кто — то". Это руками тупо все дефисы на тире с пробелами меняются, или автор файла так над скриптом поизгалялся?
Никос Костакис про Панфилов: Улан. Экстремал из будущего (Альтернативная история, Попаданцы)
24 12 ."Одел подштанники" _______________________ На кого?
Олег Макаров. про Карелин: Одиссей Фокс [СИ] (Детективная фантастика, Космическая фантастика, Приключения: прочее, Самиздат, сетевая литература)
24 12 За одно только "пребудет" без "и" в аннотации стоит попробовать почитать
Perca про Первухин: Товарищ маг (Альтернативная история, Приключения: прочее, Попаданцы, Самиздат, сетевая литература)
24 12 Не самый плохой писатель, но и он скатился в победобесие. Осталось только ждать веселые приключения мага на СВО.
tvv про Далин: Фарфор Ее Величества (Героическая фантастика, Фэнтези, Самиздат, сетевая литература)
23 12 Номера 4-6 в серии - это подсерия Костер и Саламандра.
Олег Макаров. про Тыналин: Инженер 1: паровая империя (Альтернативная история, Приключения: прочее, Попаданцы, Самиздат, сетевая литература)
22 12 Barbud спасибо, подтолкнули поинтересоваться. Вот что я нашёл: В 1856 году (в разгар Крымской войны и реформ Флоренс Найтингейл) медперсонал в больницах не носил белые халаты — это гораздо более поздняя традиция. ОДЕЖДА ………
Barbud про Тыналин: Инженер 1: паровая империя (Альтернативная история, Приключения: прочее, Попаданцы, Самиздат, сетевая литература)
22 12 1856 год... По госпиталю ходит медперсонал в белых халатах... ЧТО? Вспомнились строки пародиста Иванова, написанные по другому поводу, но вполне уместные: "Ты бы, дяденька, прежде чем что-то писать, Потрудился хотя бы об этом узнать". Оценка: нечитаемо
mysevra про Есаулкова: Удивительные истории о ведьмах [litres] (Ужасы, Современная проза)
22 12 По сути – очень интересно, но почему-то получилась лютая кустарщина. Одна надежда была на Бобылёву, но я утомилась ждать и не захотела дочитывать. Оценка: неплохо
mysevra про Государев: Треугольный человек (Психология)
22 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-у, кстати.
Теперь зарядить изготовление хешей, и завтра, с новыми силами - уля-улю! - сравнилку гонять во все гривы.
Страницы