Поиск места для книги
От: Tesh США  
Дата: 25.01.10 18:52
Оценка:
Встретился на работе с подобной задачкой:

Есть у нас книги, которые относятся к какой-то предметной области, у них есть автор и название.
Есть места, куда мы их кладем. Они имеют опциональные свойства: предметная область, автор, название.
Опциональные, потому что есть места, где к примеру лежит любая фантастика, а есть — где лежат книги на тему программирования авторства Рихтера, и все имеют название "CLR via C#".
Надо найти для недавно принесенной книги место, причем чем больше место соответствует свойствам книги (область, автор, название) — тем оно релевантнее.
Если места в наиболее оптимальном месте нет — проверяем другое, менее оптимальное.

Надо придумать алгоритм поиска места по релевантности

ЗЫ: На работе я подобную задачу уже решил, интересно что придумаете вы, ну и позже свое решение опубликую, если подобного не будет.
Re: Поиск места для книги
От: LaPerouse  
Дата: 27.01.10 13:11
Оценка:
Здравствуйте, Tesh, Вы писали:

T>Встретился на работе с подобной задачкой:


T>Есть у нас книги, которые относятся к какой-то предметной области, у них есть автор и название.

T>Есть места, куда мы их кладем. Они имеют опциональные свойства: предметная область, автор, название.
T>Опциональные, потому что есть места, где к примеру лежит любая фантастика, а есть — где лежат книги на тему программирования авторства Рихтера, и все имеют название "CLR via C#".
T>Надо найти для недавно принесенной книги место, причем чем больше место соответствует свойствам книги (область, автор, название) — тем оно релевантнее.
T>Если места в наиболее оптимальном месте нет — проверяем другое, менее оптимальное.

T>Надо придумать алгоритм поиска места по релевантности


T>ЗЫ: На работе я подобную задачу уже решил, интересно что придумаете вы, ну и позже свое решение опубликую, если подобного не будет.


Какая-то фигня. Если тебе нужен способ хранения слабоструктурированной информации, для этого есть прекрасный формат RDF. Для данных пользователя вообще, самое оно. Мультимедиа, книги, статьи, все это можно хранить в rdf-базе, основанной, пусть и частично, на публичных словарях.

Твой пример будет выглядеть так:

bookRihter1 rdf:type content:Book.
            somedict:name ".NET"
            somedict:about programming:dotnet.
            somedict:author foaf:Richter.


Потом к твоей структуре можно будет писать запросы на языке семантических запросов SPARQL (похож на SQL). Вот список всех книг Рихтера про .NET:

select ?book
where
{
?book rdf:type content:Book.
?book somedict:author foaf:Richter.
?book somedict:about programming:dotnet.
}


Можно составлять запросы по извлечению любых данных, имеющихся в базе данных (по факту это будет уже база знаний).

По идее, если сделать rdf-store с нормальным интерфейсом, то можно будет фактически отказаться от файловых хранилищ, выкинув нахрен всякие фары, точнее, используя их только по прямому назначению.
Социализм — это власть трудящихся и централизованная плановая экономика.
Re[2]: Поиск места для книги
От: Tesh США  
Дата: 27.01.10 17:15
Оценка:
Здравствуйте, LaPerouse, Вы писали:

Это все конечно замечательно, но книги у нас вполне себе реальные, бумажные и найти для них надо вполне реальное место (например полку).
Re[3]: Поиск места для книги
От: Tesh США  
Дата: 27.01.10 17:16
Оценка:
Здравствуйте, Tesh, Вы писали:

T>Здравствуйте, LaPerouse, Вы писали:


T>Это все конечно замечательно, но книги у нас вполне себе реальные, бумажные и найти для них надо вполне реальное место (например полку).


Добавлю еще, что найти место (например полку), куда ее поставить, а не где она находится
Re[4]: Поиск места для книги
От: LaPerouse  
Дата: 27.01.10 19:48
Оценка:
Здравствуйте, Tesh, Вы писали:

T>Здравствуйте, Tesh, Вы писали:


T>>Здравствуйте, LaPerouse, Вы писали:


T>>Это все конечно замечательно, но книги у нас вполне себе реальные, бумажные и найти для них надо вполне реальное место (например полку).


T>Добавлю еще, что найти место (например полку), куда ее поставить, а не где она находится


Я промахнулся мимо форума, думал это "философия программирования", выше в дереве
Социализм — это власть трудящихся и централизованная плановая экономика.
Re: Поиск места для книги
От: Tesh США  
Дата: 28.01.10 21:14
Оценка: :)
В общем я такое решение придумал:
Свойства "предметная область", "автор", "название" и возможные другие — опциональны.
Получается что признак указан, либо не указан и нам надо найти все уникальные перестановки этих значений.
В нашем случае это будет: 111, 101 и т.д.
Идея такая:
Получаем маску комбинации, в которой указаны все свойства. Для этого считаем ((2^n )- 1), где n — их количество.
После этого для каждого объекта создаем его личную маску (2^k, где k — индекс объекта в списке), а дальше идем по такому алгоритму:
  1. устанавливаем маску комбинации в 0 (ни одного признака);
  2. конкатенируем маску каждого объекта с маской комбинации, чтобы определить задан он или нет, тем самым получаем набор свойств;
  3. увеличиваем значение маски комбинации на 1, если она меньше, либо равна маски со всеми признаками — переходим к шагу 2;
  4. для каждой комбинации объектов считаем ее вес, а затем сортируем по нему их список.
После этого берем комбинацию с самым большим весом, пробуем найти место для книги. Если места нет, либо оно занято, то переходим к менее релевантному набору свойств.
Re: Поиск места для книги
От: RadmirT Россия  
Дата: 29.01.10 10:07
Оценка:
Каждый бумажное здание уже классифицировано это коды ББК(Библиотечно-библиографическая классификация), УДК(Универсальная десятичная классификация), ISBN(International Standard Book Number) эти коды написаны на тилульном или на последнем листе любой книги. Можно использовать их.
Re[2]: Поиск места для книги
От: Tesh США  
Дата: 29.01.10 10:33
Оценка:
Здравствуйте, RadmirT, Вы писали:

RT>Каждый бумажное здание уже классифицировано это коды ББК(Библиотечно-библиографическая классификация), УДК(Универсальная десятичная классификация), ISBN(International Standard Book Number) эти коды написаны на тилульном или на последнем листе любой книги. Можно использовать их.


Свойства-то какие угодно можно использовать.
Мы ищем оптимальное место хранения для того, чтобы человеку не пришлось ходить в 10 мест, когда он к примеру хочет выдать книги одного автора.
Re[3]: Поиск места для книги
От: kvasya  
Дата: 29.01.10 10:42
Оценка:
Здравствуйте, Tesh, Вы писали:

T>Здравствуйте, RadmirT, Вы писали:


RT>>Каждый бумажное здание уже классифицировано это коды ББК(Библиотечно-библиографическая классификация), УДК(Универсальная десятичная классификация), ISBN(International Standard Book Number) эти коды написаны на тилульном или на последнем листе любой книги. Можно использовать их.


T>Свойства-то какие угодно можно использовать.

T>Мы ищем оптимальное место хранения для того, чтобы человеку не пришлось ходить в 10 мест, когда он к примеру хочет выдать книги одного автора.

В таком случае нужны теги
Эдакое роботизированное хранилище книг
Re[3]: Поиск места для книги
От: RadmirT Россия  
Дата: 29.01.10 11:48
Оценка: 3 (2)
Так ББК как раз и предназначен для классификации книг, и их быстрого поиска.
Например берем код ББК 32.973.26-018.2 M15
Расшифровываем его:
32 — радиоэлектроника
973 — компьютеры
26 — персональные компьютеры
018 — программирование
2 — программное обеспечение

M — Фамилия автора начинается на M
15 — 15 изданная им книга

В итоге если мы заведем шкаф котором будут находится все книги о компьютерах (код 32-973)
Полки классифицируем по направлениям например ( полка №1 26-018-2)
А в полке книги отсортируем по первой букве автора. То поиск нужной книги займет очень мало времени.
По такому принципу организованы все книгохранилища.
Re[4]: Поиск места для книги
От: Tesh США  
Дата: 29.01.10 14:51
Оценка:
Здравствуйте, RadmirT, Вы писали:

Все правильно, только мы не книгу ищем, мы ищем как раз тот самый шкаф, либо полку, в который положить эту книгу
Re[5]: Поиск места для книги
От: RadmirT Россия  
Дата: 02.02.10 09:16
Оценка:
Здравствуйте, Tesh, Вы писали:

T>Все правильно, только мы не книгу ищем, мы ищем как раз тот самый шкаф, либо полку, в

который положить эту книгу

Так в чем проблема. Все шкафу у нас имеет свой код (код раздела ББК), также все полки имеют свои идентификаторы(коды подраздела), все книги отсортирован по фамилии автора, для каждого автора книги отсортированы в порядке их издания.
Приходит новая книга, смотрим код раздела, находим нужный шкаф, далее в шкажу находим нужную полку, находим автора и ставим ее на место соответстущее номеру изданию книги.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.