shared_ptr<recommender_base> recommender_factory::create_recommender( const string& name, const config& param, const string& id) { if (name == "inverted_index") { if (!param.is_null()) { inverted_index_config conf = config_cast_check<inverted_index_config>(param); if (conf.unlearner) { if (!conf.unlearner_parameter) { throw JUBATUS_EXCEPTION( common::config_exception() << common::exception::error_message( "unlearner is set but unlearner_parameter is not found")); } return shared_ptr<recommender_base>( new inverted_index(unlearner::create_unlearner( *conf.unlearner, common::jsonconfig::config( *conf.unlearner_parameter)))); } else { if (conf.unlearner_parameter) { throw JUBATUS_EXCEPTION( common::config_exception() << common::exception::error_message( "unlearner_parameter is set but unlearner is not found")); } } } return shared_ptr<recommender_base>(new inverted_index); } else if (name == "inverted_index_euclid") { if (!param.is_null()) { return shared_ptr<recommender_base>( new inverted_index_euclid( config_cast_check<inverted_index_euclid::config>(param))); } else { return shared_ptr<recommender_base>(new inverted_index_euclid); } } else if (name == "minhash") { return shared_ptr<recommender_base>( new minhash(config_cast_check<minhash::config>(param))); } else if (name == "lsh") { return shared_ptr<recommender_base>( new lsh(config_cast_check<lsh::config>(param))); } else if (name == "euclid_lsh") { return shared_ptr<recommender_base>( new euclid_lsh(config_cast_check<euclid_lsh::config>(param))); } else if (name == "nearest_neighbor_recommender") { nearest_neighbor_recommender_config conf = config_cast_check<nearest_neighbor_recommender_config>(param); shared_ptr<storage::column_table> table(new storage::column_table); shared_ptr<nearest_neighbor::nearest_neighbor_base> nearest_neighbor_engine(nearest_neighbor::create_nearest_neighbor( conf.method, conf.parameter, table, id)); if (conf.unlearner) { if (!conf.unlearner_parameter) { throw JUBATUS_EXCEPTION( common::config_exception() << common::exception::error_message( "unlearner is set but unlearner_parameter is not found")); } shared_ptr<unlearner::unlearner_base> unl(unlearner::create_unlearner( *conf.unlearner, common::jsonconfig::config( *conf.unlearner_parameter))); return shared_ptr<recommender_base>( new nearest_neighbor_recommender(nearest_neighbor_engine, unl)); } return shared_ptr<recommender_base>( new nearest_neighbor_recommender(nearest_neighbor_engine)); } else { throw JUBATUS_EXCEPTION(common::unsupported_method(name)); } }