Skip to content

Commit

Permalink
merge
Browse files Browse the repository at this point in the history
  • Loading branch information
committed Nov 19, 2016
2 parents 1acb2f0 + fac119f commit 02457a7
Show file tree
Hide file tree
Showing 20 changed files with 202 additions and 41 deletions.
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -8,5 +8,7 @@ out
*.log
target/

lib

# 配置文件
src/main/resources/properties/jdbc-dev.properties
1 change: 0 additions & 1 deletion pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -237,7 +237,6 @@
<artifactId>mahout-math</artifactId>
<version>${mahout-math.version}</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.thetransactioncompany/cors-filter -->
<dependency>
<groupId>com.thetransactioncompany</groupId>
<artifactId>cors-filter</artifactId>
Expand Down
10 changes: 6 additions & 4 deletions src/main/java/com/kevin/mirs/dao/UserRecommendedFriendsDao.java
Original file line number Diff line number Diff line change
@@ -1,18 +1,20 @@
package com.kevin.mirs.dao;

import com.google.common.collect.HashMultimap;
import com.kevin.mirs.entity.UserRecommendedFriends;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.HashMap;


@Repository
public interface UserRecommendedFriendsDao {

int addUserRecommendedFriends(@Param("uid") int uid,
@Param("rfid") int rfid);
@Param("rfids") long[] rfids);

boolean clearUserRecommendedFriends();
Integer[] getUserRecommendedFriends(@Param("uid") int uid);

int addFriends(@Param("u") int u,
@Param("f") int f);
boolean clearUserRecommendedFriends(@Param("uid") int uid);
}
10 changes: 7 additions & 3 deletions src/main/java/com/kevin/mirs/dao/UserRecommendedMoviesDao.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,15 +2,19 @@

import com.kevin.mirs.entity.UserRecommendedMovies;
import org.apache.ibatis.annotations.Param;
import org.apache.mahout.cf.taste.recommender.RecommendedItem;
import org.springframework.stereotype.Repository;

import java.util.List;

@Repository
public interface UserRecommendedMoviesDao {

int addUserRecommendedMovies(@Param("uid") int uid,
@Param("rmid") int rmid,
@Param("rmv") float rmv);
@Param("rms")List<RecommendedItem> rms);

List<UserRecommendedMovies> getUserRecommendedMovies(@Param("uid") int uid);

boolean clearUserRecommendedMovies();
boolean clearUserRecommendedMovies(@Param("uid") int uid);

}
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,9 @@
* Created by 昊 on 2016/11/7.
*/
public class UserRecommendedFriends {
private int id;
private int uid;
private int rfid;
private Integer id;
private Integer uid;
private Integer rfid;

public UserRecommendedFriends(Integer id, Integer uid, Integer rfid) {
this.id = id;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ public class UserRecommendedMovies {
private int rmid;
private float rmv;

UserRecommendedMovies(){}
public UserRecommendedMovies(Integer id, Integer uid, Integer rmid, Float rmv) {
this.id = id;
this.uid = uid;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,6 @@
/**
* Created by 昊 on 2016/11/5.
*/
interface RecommendFriends {
public interface RecommendFriends {
long[] recommendFriends(long uid, int frdnum);
}
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ public class RecommendFriendsBySimilarity implements RecommendFriends{
private DataModel model;
private UserSimilarity similarity;
private UserNeighborhood neighborhood;
RecommendFriendsBySimilarity(DataModel model){
public RecommendFriendsBySimilarity(DataModel model){
this.model = model;
try {
similarity = new PearsonCorrelationSimilarity(model);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,6 @@
/**
* Created by 昊 on 2016/11/5.
*/
interface RecommendMovies {
public interface RecommendMovies {
List<RecommendedItem> recommendMovies(int uid, int itemNum);
}
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ public class RecommendMoviesByPerson implements RecommendMovies{
private UserSimilarity similarity;
private UserNeighborhood neighborhood;
private Recommender recommender;
RecommendMoviesByPerson(DataModel model, int frdN){
public RecommendMoviesByPerson(DataModel model, int frdN){
this.model = model;
try {
similarity = new PearsonCorrelationSimilarity(model);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@

import com.kevin.mirs.dao.UserRecommendedFriendsDao;
import com.kevin.mirs.dao.UserRecommendedMoviesDao;
import com.kevin.mirs.entity.UserRecommendedFriends;
import org.apache.mahout.cf.taste.impl.model.file.FileDataModel;
import org.apache.mahout.cf.taste.model.DataModel;
import org.apache.mahout.cf.taste.recommender.RecommendedItem;
Expand All @@ -14,23 +13,17 @@

public class RecommendtionController {

@Resource
UserRecommendedMoviesDao urmv;
UserRecommendedFriendsDao urfd;

public static void main(String[] args){
try{
DataModel model = new FileDataModel(new File("src/main/resources/recommendation/test.csv"));
RecommendFriends recommendFriends = new RecommendFriendsBySimilarity(model);
RecommendMovies recommendMovies = new RecommendMoviesByPerson(model, 20);
long[] friends = recommendFriends.recommendFriends(1, 3);
List<RecommendedItem> recommendedItemList = recommendMovies.recommendMovies(1,2);
for(long friend : friends) {

}
for(RecommendedItem recommendedItem : recommendedItemList) {

}
//urmv.clearUserRecommendedMovies();
//urfd.clearUserRecommendedFriends();
//System.out.println(urmv.addUserRecommendedMovies(1,recommendedItemList));
//System.out.println(urfd.addUserRecommendedFriends(1,friends));
} catch (Exception e) {
e.printStackTrace();
}
Expand Down
70 changes: 70 additions & 0 deletions src/main/java/com/kevin/mirs/service/RecommendService.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
package com.kevin.mirs.service;

import com.kevin.mirs.dao.UserRecommendedFriendsDao;
import com.kevin.mirs.dao.UserRecommendedMoviesDao;
import com.kevin.mirs.entity.UserRecommendedMovies;
import com.kevin.mirs.recommendation.RecommendFriends;
import com.kevin.mirs.recommendation.RecommendFriendsBySimilarity;
import com.kevin.mirs.recommendation.RecommendMovies;
import com.kevin.mirs.recommendation.RecommendMoviesByPerson;
import java.util.List;
import org.apache.mahout.cf.taste.impl.model.file.FileDataModel;
import org.apache.mahout.cf.taste.model.DataModel;
import org.apache.mahout.cf.taste.recommender.RecommendedItem;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.io.*;

@Service
public class RecommendService{
DataModel data;
@Resource
UserRecommendedMoviesDao rm;

@Resource
UserRecommendedFriendsDao rf;

RecommendService(){
try{
String data = "src/main/resources/recommendation/test.csv";
this.data = new FileDataModel(new File(data));
} catch(Exception e){
e.printStackTrace();
}
}

public List<RecommendedItem> getRealTimeRecommendedMovies(int uid){
RecommendMovies recommendMovies = new RecommendMoviesByPerson(data, 20);
rm.clearUserRecommendedMovies(uid);
rm.addUserRecommendedMovies(uid, recommendMovies.recommendMovies(uid,2));
return recommendMovies.recommendMovies(uid,2);
}

public int addRecommendedMovies(int uid){
List<RecommendedItem> recommendedMovies = getRealTimeRecommendedMovies(uid);
rm.clearUserRecommendedMovies(uid);
return rm.addUserRecommendedMovies(uid, recommendedMovies);
}

public List<UserRecommendedMovies> getRecommendedMoviesFromDB(int uid){
return rm.getUserRecommendedMovies(uid);
}

public long[] getRealTimeRecommendedFriends(int uid){
RecommendFriends recommendFriends = new RecommendFriendsBySimilarity(data);
rf.clearUserRecommendedFriends(uid);
rf.addUserRecommendedFriends(uid, recommendFriends.recommendFriends(uid, 10));
return recommendFriends.recommendFriends(uid, 10);
}

public int addRecommendedFriends(int uid){
long[] recommendedFriends = getRealTimeRecommendedFriends(uid);
rf.clearUserRecommendedFriends(uid);
return rf.addUserRecommendedFriends(uid, recommendedFriends);
}

public Integer[] getRecommendedFriendsFromDB(int uid){
return rf.getUserRecommendedFriends(uid);
}
}
4 changes: 0 additions & 4 deletions src/main/resources/properties/jdbc-example.properties

This file was deleted.

2 changes: 1 addition & 1 deletion src/main/sql/mirs.sql
Original file line number Diff line number Diff line change
Expand Up @@ -159,7 +159,7 @@ DROP TABLE IF EXISTS mirs_user_recommended_friends;
CREATE TABLE mirs_user_recommended_friends(
`id` INT NOT NULL AUTO_INCREMENT COMMENT '自增ID',
`uid` INT NOT NULL COMMENT '用户ID',
`rfid` VARCHAR(30) COMMENT '推荐好友ID',
`rfid` INT COMMENT '推荐好友ID',
PRIMARY KEY (id),
UNIQUE (uid,rfid),
INDEX idx_uid(uid)
Expand Down
2 changes: 1 addition & 1 deletion src/test/main/com/kevin/mirs/dao/FriendDaoTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
import static org.junit.Assert.*;

@RunWith(SpringJUnit4ClassRunner.class)
// 告诉Junit Sping配置文件
// 告诉Junit Spring配置文件
@ContextConfiguration({"classpath:spring/spring-dao.xml"})
public class FriendDaoTest {

Expand Down
2 changes: 1 addition & 1 deletion src/test/main/com/kevin/mirs/dao/MovieDaoTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@
import javax.annotation.Resource;

@RunWith(SpringJUnit4ClassRunner.class)
// 告诉Junit Sping配置文件
// 告诉Junit Spring配置文件
@ContextConfiguration({"classpath:spring/spring-dao.xml"})
public class MovieDaoTest {

Expand Down
2 changes: 1 addition & 1 deletion src/test/main/com/kevin/mirs/dao/UserDaoTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@
* 配置Spring和Junit整合,使得Junit启动时加载SpingIoC容器
*/
@RunWith(SpringJUnit4ClassRunner.class)
// 告诉Junit Sping配置文件
// 告诉Junit Spring配置文件
@ContextConfiguration({"classpath:spring/spring-dao.xml"})
public class UserDaoTest {

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,10 +7,12 @@

import javax.annotation.Resource;

import java.util.HashMap;

import static org.junit.Assert.*;

@RunWith(SpringJUnit4ClassRunner.class)
// 告诉Junit Sping配置文件
// 告诉Junit Spring配置文件
@ContextConfiguration({"classpath:spring/spring-dao.xml"})

public class UserRecommendedFriendsDaoTest {
Expand All @@ -20,12 +22,20 @@ public class UserRecommendedFriendsDaoTest {

@Test
public void addUserRecommendedFriends() throws Exception {
System.out.println(userRecommendedFriendsDao.addUserRecommendedFriends(1,1));
long[] fids = {1,2,3};
System.out.println(userRecommendedFriendsDao.addUserRecommendedFriends(1, fids));
}

@Test
public void getUserRecommendedFriends() throws Exception {
Integer[] friends = userRecommendedFriendsDao.getUserRecommendedFriends(1);
for(Integer friend : friends)
System.out.println(friend);
}

@Test
public void clearUserRecommendedFriends() throws Exception {
System.out.println(userRecommendedFriendsDao.clearUserRecommendedFriends());
System.out.println(userRecommendedFriendsDao.clearUserRecommendedFriends(1));
}

}
30 changes: 26 additions & 4 deletions src/test/main/com/kevin/mirs/dao/UserRecommendedMoviesDaoTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,17 +2,25 @@

import com.kevin.mirs.entity.UserRecommendedMovies;
import com.sun.tools.doclets.formats.html.SourceToHTMLConverter;
import java.util.ArrayList;
import java.util.List;

import org.apache.ibatis.annotations.Param;
import org.apache.mahout.cf.taste.impl.recommender.GenericRecommendedItem;
import org.apache.mahout.cf.taste.recommender.RecommendedItem;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

import javax.annotation.Resource;

import java.util.ArrayList;

import static org.junit.Assert.*;

@RunWith(SpringJUnit4ClassRunner.class)
// 告诉Junit Sping配置文件
// 告诉Junit Spring配置文件
@ContextConfiguration({"classpath:spring/spring-dao.xml"})
public class UserRecommendedMoviesDaoTest {

Expand All @@ -22,14 +30,28 @@ public class UserRecommendedMoviesDaoTest {
@Test
public void addUserRecommendedMovies() throws Exception {

System.out.println(userRecommendedMoviesDao.addUserRecommendedMovies(1,1,1.0f));
List<RecommendedItem> rms = new ArrayList();
RecommendedItem ri1 = new GenericRecommendedItem(1, 0.7f);
RecommendedItem ri2 = new GenericRecommendedItem(2, 0.5f);
RecommendedItem ri3 = new GenericRecommendedItem(3, 0.6f);
rms.add(ri1);
rms.add(ri2);
rms.add(ri3);
System.out.println(userRecommendedMoviesDao.addUserRecommendedMovies(1,rms));

}

@Test
public void clearUserRecommendedMovies() throws Exception{
public void getUserRecommendedMovies() throws Exception {
List<UserRecommendedMovies> rms = userRecommendedMoviesDao.getUserRecommendedMovies(2);
for(UserRecommendedMovies rm : rms)
System.out.println(rm.getRmid() + " , " + rm.getRmv());
}

@Test
public void clearUserRecommendedMovies() throws Exception {

System.out.println(userRecommendedMoviesDao.clearUserRecommendedMovies());
System.out.println(userRecommendedMoviesDao.clearUserRecommendedMovies(2));

}

Expand Down
Loading

0 comments on commit 02457a7

Please sign in to comment.