1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41
| @Service public class RecommendUtil {
@Autowired private UserItemDao userItemDao;
public List<Long> recommend(Long userId) throws TasteException { List<UserItemOperation> userList = userItemDao.getAllUserPreference(); System.out.println(userList); DataModel dataModel = this.createDataModel(userList); UserSimilarity similarity = new UncenteredCosineSimilarity(dataModel); UserNeighborhood userNeighborhood = new NearestNUserNeighborhood(2, similarity, dataModel); Recommender recommender = new GenericUserBasedRecommender(dataModel, userNeighborhood, similarity); List<RecommendedItem> recommendedItems = recommender.recommend(userId, 5); List<Long> itemIds = recommendedItems.stream().map(RecommendedItem::getItemID).collect(Collectors.toList()); return itemIds; } private DataModel createDataModel(List<UserItemOperation> userItemOperations) { FastByIDMap<PreferenceArray> fastByIdMap = new FastByIDMap<>(); Map<Long, List<UserItemOperation>> map = userItemOperations.stream().collect(Collectors.groupingBy(UserItemOperation::getUserId)); Collection<List<UserItemOperation>> list = map.values(); for(List<UserItemOperation> userPreferences : list){ GenericPreference[] array = new GenericPreference[userPreferences.size()]; for(int i = 0; i < userPreferences.size(); i++){ UserItemOperation userPreference = userPreferences.get(i); System.out.println(userPreference); GenericPreference item = new GenericPreference(userPreference.getUserId(), userPreference.getItemId(), userPreference.getValue()); array[i] = item; } fastByIdMap.put(array[0].getUserID(), new GenericUserPreferenceArray(Arrays.asList(array))); } return new GenericDataModel(fastByIdMap); } }
|