Изграждане на йерархичен потребителски профил

Имам списък с често срещани термини, получени от различни заявки за търсене на определен потребител.
Например:
спорт, бадминтон, футбол
футбол, спорт
изследване, AI, алгоритъм
изследване, адаптивно, персонализирано търсене
изследване, AI, невромрежа

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

Очакваният резултат ще бъде дърво на потребителския профил, изглеждащо по този начин:

  • 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 и т.н. ключ, nested_key и стойност са контейнери за вашите собствени данни. - person mr.pd; 25.10.2014
comment
Добре :) По време на търсенията си видях термина ontolgy, но не разбрах добре как да го използвам. Бихте ли имали някаква информация относно това? Благодаря отново - 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