Pull to refresh

Comments 45

Спасибо за программу. Тема аудиокниг правда очень интересная. Компания в которой я работаю через месяц будет запускать сайт предназначенный для подбора аудиокниг (без возможность скачивать их). Если кому интересно то есть бета версия abook.com.ua.
Я думал насчет онлайн сервиса (всё туда уходит), но программе уже 4+ года, она меня устраивает, коммерциализацию я не планирую (во всяком случае пока), поэтому у меня вот такой вариант.
Я потому и написал коммент поскольку считаю что наши продукты не конкурируют. Ваша программа локальная + позволяет скачивать книги.
Наш сайт не позволяет ничего скачивать. Но мы вручную перебрали уже 5к аудиокниг и выделили какие рассказы туда включены. И к примеру на странице автора abook.com.ua/author/jelyaznyi-rodjer.html можно узнать какие рассказы есть в аудиоварианте и сколько раз озвучены.
Хорошая рекламная площадка ;)
Там, где я слушаю аудиокниги с интернетом довольно туго (во всяком случае пока). Например метро, поезда дальнего следования.
Сайт отличный, я представляю себе титанический объем работы по ручному перебору книг.
Да работа проделана (и продолжает делаться) большая. Я занимался написанием программ помогающих человеку разбирать аудиокниги. Все что можно сделать автоматически без потери качества делалось автоматически.
А какие у вас источники информации? Я писал парсеры для открытых онлайн-библиотек, чтобы оттуда вытаскивать валидную информацию о книгах, а потом сопоставлять с той информацией, которую указывают на аудиокнигах. Но эти библиотеки (не будем их называть) не очень-то спешат поделиться своими базами. У некоторых HTML страницы написан так, что просто не к чему привязаться — слишком сложный парсинг получается, некоторые отстреливают соединение на пятидесятой странице (хотя я бы на их месте просто начал бы выдавать случайные топики — пусть качающий потом разбирается где его ошибка).
Сейчас всё это удалил из проекта — с большой базой автозамены, которую составляет не один человек можно жить и без этого. Нужно только докрутить импорт с объединением и наладить контакт между пользователями.
Источники аудиокниг
torrent.abook-club.ru
nnm-club.me
asbook.ru
www.ozon.ru
Для определения экранизаций, наград и другой интересной информации использовали
fantlab.ru
www.livelib.ru
Саму информацию о экранизациях брали с кинопоиска.
Также были и другие источники которые сейчас не вспомню.
Базу автозамен было бы клёво синхронизировать автоматически в фоновом режиме, максимально незаметно для пользователей. С базой в облаке :)

Типа, если автозамену предложило человека три-четыре, и никто не отклонил — то её раздавать всем можно.
Это предполагает наличие сервера, а поскольку проект не коммерческий — с этим вопрос. Нужен сервер и серверное ПО. Нужно думать. Пока будет время — реализую просто импорт базы.
Алгоритм импорта следующий: допустим импортируется автозамена «слово1, слово2, слово3» на «слово4», а в локальной базе уже есть автозамена «слово1, слово4, слово5» на «слово2». Ищем совпадения по общему списку слов, и получаем, что слова «1,2,3,4,5» — варианты одного и того же слова, но локальный пользователь указал, что правильный вариант — слово2, а не слово4. Поэтому в его список вариантов автозамены для «слово2» добавляются отсутствующие «2,3».
Есть много тонкостей. Во-первых коллизии. Например кто-то разбросал слово1 и слово2 по разным группам — что делать в этом случае?
Второй нюанс — обобщения. Для меня, например, совершенно не интересны 25 поджанров мистики, для меня это все один большой жанр, который я просто игнорирую. Поэтому варианты «мистический детектив, мистическая драма» и др. будут заменяться на «Мистика». А другому пользователю это наоборот, крайне важно. Это тоже сложный вопрос.
Иерархический классификатор решит проблему с мистикой, но и несколько усложнит систему… Ещё круче были бы теги, с произвольной связанностью — но это очень неоднозначная задача с кучей нетривиальных интерфейсных проблем.

А личные предпочтения — это да… В случае с общей базой о них придётся забыть. Но зато ими и не придётся заморачиваться. Когда что-то хорошее уже есть, привыкнуть к нему часто проще, чем придумать лично для себя ещё более хорошее.
Теги я обдумывал с самого начала, еще до того как продумал фильтр.
Хотя есть идея — натравливать теги на ключевые слова. Теги как и автозамена ищут совпадения с определенными значениями (в данном случае не обязательно полными, достаточно просто искать вхождение), но не заменяют значения, а просто связываются с ним. И по дереву тегов можно искать.
Эта идея мне определенно нравится.
А что именно удалось сделать автоматически?
Боты шастали по сайтам. Брали записи, определяли где автор, где исполнитель и т.д. Сохраняли эту информацию в тестовую таблицу. Потом в отдельной программе человек проходил по записям где система отображала совпадения с уже существующими авторами в базе которые не удалось определить автоматически. Человек определял на самом деле было совпадение или нет.

Автоматически система склеивала авторов например если книгу с которой мы определили автора написал наш автор с базы причем если его имя совпадало с одним из шаблонов.
Например имя автора с нашей базы Лукьяненко, Сергей Васильевич. Мы делаем несколько вариантов Лукьяненко С.В., С.В. Лукьяненко, Сергей Лукьяненко, Лукьяненко Сергей и проверяем точное совпадение.
Ну а с книгами все намного сложнее. На каждую книгу входящую в цикл примеру добавляли другие (не озвученные) книги цикла. Это позволяет пользователю сразу узнать на сколько цикл покрыт озвучками. К примеру тут abook.com.ua/book/nochnoy-dozor.html мы видим что 2 последних книги цикла еще не озвучены.
Как мне всё это знакомо. Мне ещё помогает то, что на рутрекере большинство тем называются по шаблону "<Имя автора> — <Название произведения>". При этом в тексте поста автор указывается гораздо реже. Я беру все записи, у которых автор не определен, разрезаю название темы по знаку "-", беру первую часть и ищу совпадения в общем списке авторов. Нашли — указали для записи автора. Это одна из задач нормализатора. Позволила вытащить имена авторов для 1-2К книг, если мне не изменяет память.
Еще сложность в том, что автора в описании иногда указывают отдельными полями «Имя автора» «Фамилия автора», а иногда целиком «Автор».
Ага это хороший контент. А часто находили темы где название автора написано с ошибкой, или использовался псевдоним. Или псевдоним с ошибкой =)
«Фаентастика» и «Стинв Кинг» по ночам снятся. А уж десяток вариантов написания слова «Фэнтези» — это можно считать классикой. И Фантази, и фентази, и фэнтэзи и фентези…
Лучше всего вас понимает наша девочка которая занимается разбором этой информации уже больше года. Каждый день она встает, приходит на работу и тут ее встречают Стинвы Кинги, Фаентастики и другие радости =)
Я за эту работу нормализатор посадил :)
Была идея подключить какой-нибудь синтаксический анализатор, который с приемлемой погрешностью находил бы различные варианты одних и тех же имён.
Ну сравнивать имена это малая часть ее работы. Естественно мы делали что бы она не повторяла одно и тоже много раз. К примеру если раз она ввела что Стинв Кинг это Стивен Кинг то система сразу просматривала дальнейшие совпадения. Вообщем я причастен к созданию симбиоза человека и машины…
Привет, отличный софт!
Но, столкнулся с проблемой. Не отображает список произведений. Скрин d.pr/i/JrsA
Интересно. Так было с момента первой загрузки? Какая операционка?
win7 с первого запуска.
На Win7 не пробовал, но уже сталкивался с тем, что одна и та же форма на Win7 и Win8 могут выглядеть очень по-разному.
Попробую запустить на виртуалке.
В качестве таблицы там прикручен Exceed DataGridControl. Я буквально вчера менял ему шаблон, потому что выглядит он из стока просто чудовищно — возможно что-то зацепил.
В любом случае список записей — это плагин. У меня дома лежит вариант плагина на Microsoft DataGrid. Он работает медленно, но работает.
Как минимум еще у одного пользователя на Win7 та же проблема. Вечером будет время — проверю на нетбуке, там как раз семёрка. Параллельно соберу плагин списка на другом компоненте.
Проблема поправлена, я обновил тему и заменил ссылки на новую версию.
Спасибо за фидбек!
Благодарю!
работает)
Интересная программа, спасибо.

А как насчёт mono? Просто wine не самый лучший способ её запускать.
Не знаю как у mono с WPF. Было бы очень интересно, мысли были, но никогда не имел дела.
К тому же дома у меня везде винда — необходимости не возникало.
Исходники лежат на Codeplex — буду благодарен за помощь по портированию.
Спасибо за программу — аудиокниги + C# это же великолепно. Если есть какие-нить планы по развитию проекта — могу оказать помощь.
А можно поинтересоваться: почему была выбрана именно связка MSSLQCE + EF?
Спасибо за отзыв. Из ближайших планов — поддержка новых источников книг. Буду очень благодарен за code review, потому что много старого кода — некогда всё лопатить. Очень не помешает опытный WPF верстальщик — что-нибудь сделать с интерфейсом.
Связка MSSQLCE + EF была выбрана более четырех лет назад. Я тогда как раз по работе писал под WinCE, хотелось попробовать EF. В общем, если перелопатить горы статей и плотно общаться с профайлером, то оно работает приемлемо.
Была идея сделать слой DAL плагином и отвязать всю логику от особенностей хранения, но пока не вижу в этом необходимости, а работы очень много.
>Буду очень благодарен за code review, потому что много старого кода — некогда всё лопатить. Очень не помешает опытный WPF верстальщик — что-нибудь сделать с интерфейсом.
Как немного разберусь с авралом на работе — с удовольствием подключусь к проекту:)
Начал разбираться с проблемой отсутствующего грида на Win7. Запустил дома на виртуалке и подтвердилось отсутствие грида.
Оказалось, что дело с темой — я указал для грида тему. Она нормально подхватилась на Win8, а на Win7 грид просто не отрисовывается.
Убрал тему — грид стал выглядеть не в стиль с программой но заработал. Зато обнаружил, что на чистой системе без отдельно установленного пакета SqlCE 4.0 ничего не работает. Сейчас разбираюсь почему. Заодно прикрутил логирование.
Могу начать пилить это счастье хоть сейчас, так же хочу сделать клиент для Windows Phone. Такая библиотека и мобильный клиент будут отличным сочетанием!
Идея хороша, но ведь это полное портирование с форком? Общих библиотек вести не получится, насколько я понимаю — Portable более чем урезанный. Максимум что может получиться иметь общего — это базы данных каталога.
Есть разные способы перевести. Во первых я уже начал думать как рефакторить и имплементировать MVVM. Во вторых можно добавить async await в portable libraries. Если договориться с автором и понять чем мы друг другу можем помочь — начинать пилить…
Автор — это я :)
async await в этом проекте нет, так как не было необходимости.
Сейчас мои ближайшие планы — довести проект до состояния «работает почти у всех». Вот, вылезла трабла что без установленного SqlCE на машине пользователя оно не запускается. При том, что вроде бы все сделано для того, чтобы он деплоился вместе с бинарниками. Потом можно думать дальше.
>Вот, вылезла трабла что без установленного SqlCE на машине пользователя оно не запускается. При том, что вроде бы все сделано для того, чтобы он деплоился вместе с бинарниками.
А всё сильно завязоно именно на SqlCE? У того же SQLite никаких проблем не встречал.
Нет, не сильно. Если будет очень доставать — придется перейти на что-то поудобнее, тем более он помер на версии 4.0.
В рабочих проектах для embeded уже давно использую SQLite (у него и порт на чистом .Net имеется, в отличии от SQL Ce).
Просто никогда не пробовал подружить Entity Framework и SQLite.
БД каталога — это уже очень немало
Я уже задумывался над кешированием результатов группировки, чтобы не пересчитывать группы заново (довольно ресурсоемкий процесс), если база не менялась. Мобильный вариант может просто работать с готовой базой, готовыми группировками и заниматься просто фильтрацией строк и закачкой файлов по требованию.
Не нужен парсер, не нужны группировки, автозамены и т.д. — на телефоне всем этим заниматься большого смысла нет — только батарею расходовать.
Тогда клиент получится очень простым. Базу можно качать с какого-нибудь общего ресурса, или, например, BT-Sync.
Повторять парсер трекеров на мобильном клиенте — действительно затея была бы сомнительная. :)
Win 8.1
При попытке запуска
No Entity Framework provider found for the ADO.NET provider with invariant name 'System.Data.SqlServerCe.3.5'. Make sure the provider is registered in the 'entityFramework' section of the application config file. See go.microsoft.com/fwlink/?LinkId=260882 for more information.


При попытке установки Microsoft SQL Ce, говорит, что установлена более новая версия
SQL CE всё-таки переполнит мою чашу терпения и придется перейти на SQLite.
Попробуйте зайти в установку/удаление программ, удалить текущую инсталляцию:



Заодно проверьте какая версия сейчас установлена и как она может быть новее, чем та, которая на сайте у производителя.
Похоже он почему-то пытается загрузить именно версию 3.5, при том, что нужна 4.0.
С ОС это вряд ли связано, так как дома у меня именно Win8.1.
Удалил Microsoft SQL 4, потом установил Microsoft SQL 4 и все починилось.
Замечательно. Это еще что. В Украине сейчас фишка — банк Unicredit уходит из Украины и всех клиентов Unicredit переводят в Unicredit и меняют им карточки Unicredit на карточки Unicredit. Просто УкрСоцБанк получил права на торговую марку Unicredit и забирает себе клиентов Unicredit.
В общем удачного поиска! Отписывайте пожелания на страницу Codeplex или сюда. Будут новости — выпущу еще статью.
Подумываю все-таки отказаться от SQL CE в пользу SQLite.
Sign up to leave a comment.

Articles