static void search(char *query, struct list *list) { DIR *dir; struct dirent *dp; static char path[PATH_MAX]; char lowercase_query[NAME_LENGTH]; assert(strlen(query) < NAME_LENGTH); if (snprintf(path, PATH_MAX, "%s/players", config.root) >= PATH_MAX) { fprintf(stderr, "Path to teerank database too long\n"); exit(EXIT_FAILURE); } if (!(dir = opendir(path))) { fprintf(stderr, "opendir(%s): %s\n", path, strerror(errno)); exit(EXIT_FAILURE); } to_lowercase(query, lowercase_query); init_list(list); while ((dp = readdir(dir))) { unsigned relevance; if (!strcmp(dp->d_name, ".") || !strcmp(dp->d_name, "..")) continue; relevance = get_relevance(dp->d_name, lowercase_query); try_add_result(list, relevance, dp->d_name); } closedir(dir); }
/** The actual LambdaRank implementation. */ virtual void compute_gradients( graphchi_vertex<TypeVertex, FeatureEdge> &query, Gradient* umodel) { std::vector<double> lambdas(query.num_outedges()); std::vector<double> s_is(query.num_outedges()); /* First, we compute all the outputs... */ for (int i = 0; i < query.num_outedges(); i++) { s_is[i] = get_score(query.outedge(i)); // std::cout << "s[" << i << "] == " << s_is[i] << std::endl; } /* ...and the retrieval measure scores. */ opt.compute(query); /* Now, we compute the errors (lambdas). */ for (int i = 0; i < query.num_outedges() - 1; i++) { int rel_i = get_relevance(query.outedge(i)); for (int j = i + 1; j < query.num_outedges(); j++) { int rel_j = get_relevance(query.outedge(j)); if (rel_i != rel_j) { double S_ij = rel_i > rel_j ? 1 : -1; double lambda_ij = dC_per_ds_i(S_ij, s_is[i], s_is[j]) * fabs(opt.delta(query, i, j)); /* lambda_ij = -lambda_ji */ lambdas[i] += lambda_ij; lambdas[j] -= lambda_ij; } } } /* Finally, the model update. */ for (int i = 0; i < query.num_outedges(); i++) { // -lambdas[i], as C is a utility function in this case umodel->update(query.outedge(i)->get_vector()->get_data(), s_is[i], lambdas[i]); } }
static PotentialRow * potential_row_new (const char *title, const char *location, const char *keywords, int visit_count, gboolean is_bookmark) { PotentialRow *row = g_slice_new0 (PotentialRow); row->title = g_strdup (title); row->location = g_strdup (location); row->keywords = g_strdup (keywords); row->relevance = get_relevance (location, visit_count, is_bookmark); row->is_bookmark = is_bookmark; return row; }