18 #include "jubatus/util/data/string/utility.h"
19 #include "jubatus/util/lang/shared_ptr.h"
20 #include "jubatus/util/text/json.h"
21 #include "../common/exception.hpp"
22 #include "../common/jsonconfig.hpp"
23 #include "../nearest_neighbor/nearest_neighbor_factory.hpp"
24 #include "../storage/column_table.hpp"
25 #include "../unlearner/unlearner_factory.hpp"
30 using jubatus::util::text::json::json;
31 using jubatus::util::lang::shared_ptr;
32 using jubatus::util::data::string::starts_with;
38 namespace recommender {
41 const std::string NEAREST_NEIGHBOR_PREFIX(
"nearest_neighbor_recommender:");
42 struct nearest_neighbor_recommender_config {
45 jubatus::util::data::optional<std::string>
unlearner;
50 ar & JUBA_MEMBER(method) & JUBA_MEMBER(parameter) &
51 JUBA_MEMBER(unlearner) & JUBA_MEMBER(unlearner_parameter);
60 if (name ==
"inverted_index") {
63 }
else if (name ==
"minhash") {
64 return shared_ptr<recommender_base>(
65 new minhash(config_cast_check<minhash::config>(param)));
66 }
else if (name ==
"lsh") {
67 return shared_ptr<recommender_base>(
68 new lsh(config_cast_check<lsh::config>(param)));
69 }
else if (name ==
"euclid_lsh") {
70 return shared_ptr<recommender_base>(
71 new euclid_lsh(config_cast_check<euclid_lsh::config>(param)));
72 }
else if (name ==
"nearest_neighbor_recommender") {
73 nearest_neighbor_recommender_config conf =
74 config_cast_check<nearest_neighbor_recommender_config>(param);
76 shared_ptr<nearest_neighbor::nearest_neighbor_base>
78 conf.method, conf.parameter, table,
id));
80 if (!conf.unlearner_parameter) {
83 "unlearner is set but unlearner_parameter is not found"));
87 *conf.unlearner_parameter)));
88 return shared_ptr<recommender_base>(
91 return shared_ptr<recommender_base>(
T config_cast_check(const config &c)
void serialize(member_collector &mem, jubatus::util::data::serialization::named_value< T > &v)
static jubatus::util::lang::shared_ptr< recommender_base > create_recommender(const std::string &name, const common::jsonconfig::config ¶m, const std::string &id)
shared_ptr< unlearner_base > create_unlearner(const std::string &name, const common::jsonconfig::config &config)
jubatus::util::data::optional< config > unlearner_parameter
jubatus::util::data::optional< std::string > unlearner
#define JUBATUS_EXCEPTION(e)
shared_ptr< nearest_neighbor_base > create_nearest_neighbor(const std::string &name, const common::jsonconfig::config &config, shared_ptr< storage::column_table > table, const std::string &id)