Построение иерархического профиля пользователя

У меня есть список часто используемых терминов, полученных из различных поисковых запросов определенного пользователя.
Например:
спорт, бадминтон, футбол
футбол, спортивные
исследования, искусственный интеллект, алгоритм
исследования, адаптивный, персонализированный поиск
исследования, искусственный интеллект, нейросеть

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

Ожидаемым результатом будет дерево профиля пользователя, выглядящее примерно так:

  • User profile
    • research
      • AI
      • алгоритм
      • персонализированный поиск
      • ..
    • sports
      • soccer
      • бадминтон

Итак, в настоящее время я застрял и даже не знаю, с чего начать или какие библиотеки использовать. (В этом проекте я работаю с java).
Буду очень признателен, если кто-нибудь сможет мне помочь.
Заранее спасибо.


person paskun    schedule 24.10.2014    source источник


Ответы (1)


Вероятно, вы ищете вложенную структуру данных Map. Что-то вроде следующих строк предоставит вам возможность хранить иерархические данные и легко получать к ним доступ:

//creating the data structure
Map<String, Map<String, String>> map = new HashMap<String, Map<String, String>>();

//adding data
map.put( "key", new HashMap<String, String>() ); //adding category
map.get("key").put("nested_key", "value"); //adding TO the category

//reading entries
map.get( "key" )).get( "nested_key" );
person mr.pd    schedule 24.10.2014
comment
Спасибо за ответ. Может быть, я не очень хорошо объяснил, но количество запросов разное, как и условия. Также я хотел бы, чтобы в структуре была какая-то логика или семантика. Например, раздел «Спорт», содержащий футбол и бадминтон, которые относятся к конкретным видам спорта. - person paskun; 25.10.2014
comment
вам понадобится какой-то API-оболочка, но базовая структура данных останется такой, как описано. Класс, который содержит экземпляр такой карты + вспомогательные функции, например. addCategory, addToCategory, getCategory, getFromCategory, processRequest и т. д. Ключ, вложенный_ключ и значение являются заполнителями для ваших собственных данных. - person mr.pd; 25.10.2014
comment
Хорошо :) Во время моих поисков я видел термин онтология, но я плохо понимал, как его использовать. У вас есть какая-нибудь информация по этому поводу? Спасибо еще раз - person paskun; 25.10.2014
comment
stackoverflow.com/questions/5841123/ Принятый ответ содержит хорошее описание онтологии - проблема, указанная в вопросе, не требует более сложного решения, чем карта карт, но если ваше реальное приложение требует - я предлагаю вам прочитать этот вопрос и ответ. - person mr.pd; 25.10.2014
comment
Спасибо за помощь. Я постараюсь получить больше информации о Jena и OWL API, чтобы лучше понять этот пост, и вернусь сюда, если у меня останутся вопросы. Извините, что я не очень ясно выразился в начале. - person paskun; 25.10.2014