/* * Copyright (C) 2015 RankSys (http://ranksys.org) * * This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ package es.uam.eps.ir.ranksys.diversity.intentaware; import es.uam.eps.ir.ranksys.core.model.UserModel; import org.ranksys.core.util.tuples.Tuple2od; import java.util.List; import java.util.Set; import java.util.stream.Stream; /** * Aspect model for the intent-aware diversification framework. User intents * are taken from the intent model. * * @param <U> user type * @param <I> item type * @param <F> aspect type * @author Jacek Wasilewski (jacek.wasilewski@insight-centre.org) */ public abstract class AspectModel<U, I, F> extends UserModel<U> { /** * Intent model */ private final IntentModel<U, I, F> intentModel; /** * Constructor taking the intent model * * @param intentModel intent model */ public AspectModel(IntentModel<U, I, F> intentModel) { this.intentModel = intentModel; } @SuppressWarnings("unchecked") @Override public UserAspectModel getModel(U user) { return (UserAspectModel) super.getModel(user); } /** * User aspect model for {@link AspectModel}. */ public abstract class UserAspectModel implements IntentModel.UserIntentModel<U, I, F> { private final IntentModel.UserIntentModel<U, I, F> uim; /** * Constructor taking user intent model. * * @param user user */ public UserAspectModel(U user) { this.uim = intentModel.getModel(user); } /** * Returns an item aspect model from a list of scored items. * * @param items list of items with scores * @return an item aspect model for the list scored items supplied */ public abstract ItemAspectModel<I, F> getItemAspectModel(List<Tuple2od<I>> items); @Override public Set<F> getIntents() { return uim.getIntents(); } @Override public Stream<F> getItemIntents(I i) { return uim.getItemIntents(i); } @Override public double pf_u(F f) { return uim.pf_u(f); } } /** * Item aspect model for {@link AspectModel}. * * @param <I> item type * @param <F> aspect type */ public interface ItemAspectModel<I, F> { /** * Returns probability of an item given an aspect * * @param iv item-value pair * @param f aspect * @return probability of an item given an aspect */ double pi_f(Tuple2od<I> iv, F f); } }