diff --git a/src/test/java/nearsoft/academy/bigdata/recommendation/MovieRecommender.java b/src/test/java/nearsoft/academy/bigdata/recommendation/MovieRecommender.java new file mode 100644 index 0000000..ecae983 --- /dev/null +++ b/src/test/java/nearsoft/academy/bigdata/recommendation/MovieRecommender.java @@ -0,0 +1,121 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package nearsoft.academy.bigdata.recommendation; + +import java.io.BufferedReader; +import java.io.BufferedWriter; +import java.io.File; +import java.io.FileReader; +import java.io.FileWriter; +import java.io.IOException; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import org.apache.mahout.cf.taste.common.TasteException; +import org.apache.mahout.cf.taste.impl.model.file.FileDataModel; +import org.apache.mahout.cf.taste.impl.neighborhood.ThresholdUserNeighborhood; +import org.apache.mahout.cf.taste.impl.recommender.GenericUserBasedRecommender; +import org.apache.mahout.cf.taste.impl.similarity.PearsonCorrelationSimilarity; +import org.apache.mahout.cf.taste.model.DataModel; +import org.apache.mahout.cf.taste.neighborhood.UserNeighborhood; +import org.apache.mahout.cf.taste.recommender.RecommendedItem; +import org.apache.mahout.cf.taste.recommender.UserBasedRecommender; +import org.apache.mahout.cf.taste.similarity.UserSimilarity; + +/** + * + * @author rdoja + */ +public class MovieRecommender { + + private int totalReviews=0; + private int totalProducts=0; + private int totalUsers=0; + + private int ProductNumber; + private int UserNumber; + + private final HashMap usersHash = new HashMap(); + private final HashMap productsHash = new HashMap(); + private final HashMap InverseProductsHash = new HashMap(); + + MovieRecommender(String path)throws IOException, TasteException { + + File file = new File(path); + BufferedReader br = new BufferedReader(new FileReader(file)); + File reviews = new File("reviews.csv"); + FileWriter fw = new FileWriter(reviews); + BufferedWriter wr = new BufferedWriter(fw); + + + String userId = "", productId = "", score; + String line; + + while ((line = br.readLine()) != null) { + + if("product/productId:".equals(line.split(" ")[0])){ + productId = line.split(" ")[1]; + if(productsHash.containsKey(productId) != true) { + totalProducts++; + productsHash.put(productId,totalProducts); + InverseProductsHash.put(totalProducts,productId); + ProductNumber = totalProducts; + } + else{ + ProductNumber = productsHash.get(productId); + } + } + if("review/userId:".equals(line.split(" ")[0])){ + userId = line.split(" ")[1]; + if(usersHash.containsKey(userId) != true) { + totalUsers++; + usersHash.put(userId,totalUsers); + UserNumber = totalUsers; + } + else{ + UserNumber = usersHash.get(userId); + } + } + + if("review/score:".equals(line.split(" ")[0])){ + score = line.split(" ")[1]; + wr.write(UserNumber+","+ProductNumber+","+score+"\n"); + totalReviews++; + } + } + br.close(); + wr.close(); + } + + + public int getTotalReviews(){ + return totalReviews; + } + public int getTotalProducts(){ + return totalProducts; + } + public int getTotalUsers(){ + return totalUsers; + } + + List getRecommendationsForUser(String UserId) throws IOException, TasteException{ + + DataModel model = new FileDataModel(new File("reviews.csv")); + UserSimilarity similarity = new PearsonCorrelationSimilarity(model); + UserNeighborhood neighborhood = new ThresholdUserNeighborhood(0.1, similarity, model); + UserBasedRecommender recommender = new GenericUserBasedRecommender(model, neighborhood, similarity); + + List recommendations = recommender.recommend(usersHash.get(UserId), 3); + + List Response = new ArrayList (); + + for (RecommendedItem recommendation : recommendations) { + Response.add(InverseProductsHash.get((int)recommendation.getItemID())); + } + + return Response; + } +} \ No newline at end of file diff --git a/src/test/java/nearsoft/academy/bigdata/recommendation/MovieRecommenderTest.java b/src/test/java/nearsoft/academy/bigdata/recommendation/MovieRecommenderTest.java index 0d0b1fe..01ea073 100644 --- a/src/test/java/nearsoft/academy/bigdata/recommendation/MovieRecommenderTest.java +++ b/src/test/java/nearsoft/academy/bigdata/recommendation/MovieRecommenderTest.java @@ -15,7 +15,8 @@ public class MovieRecommenderTest { public void testDataInfo() throws IOException, TasteException { //download movies.txt.gz from // http://snap.stanford.edu/data/web-Movies.html - MovieRecommender recommender = new MovieRecommender("/path/to/movies.txt.gz"); + MovieRecommender recommender = new MovieRecommender("C:/Users/rdoja/OneDrive/Documents/Nearsoft/movies.txt"); + assertEquals(7911684, recommender.getTotalReviews()); assertEquals(253059, recommender.getTotalProducts()); assertEquals(889176, recommender.getTotalUsers()); diff --git a/target/classes/.netbeans_automatic_build b/target/classes/.netbeans_automatic_build new file mode 100644 index 0000000..e69de29 diff --git a/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/createdFiles.lst b/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/createdFiles.lst new file mode 100644 index 0000000..14095b7 --- /dev/null +++ b/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/createdFiles.lst @@ -0,0 +1,2 @@ +nearsoft\academy\bigdata\recommendation\MovieRecommender.class +nearsoft\academy\bigdata\recommendation\MovieRecommenderTest.class diff --git a/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/inputFiles.lst b/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/inputFiles.lst new file mode 100644 index 0000000..0ebce49 --- /dev/null +++ b/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/inputFiles.lst @@ -0,0 +1,2 @@ +C:\Users\rdoja\OneDrive\Documents\NetBeansProjects\big-data-exercises-master\src\test\java\nearsoft\academy\bigdata\recommendation\MovieRecommender.java +C:\Users\rdoja\OneDrive\Documents\NetBeansProjects\big-data-exercises-master\src\test\java\nearsoft\academy\bigdata\recommendation\MovieRecommenderTest.java diff --git a/target/surefire-reports/TEST-nearsoft.academy.bigdata.recommendation.MovieRecommenderTest.xml b/target/surefire-reports/TEST-nearsoft.academy.bigdata.recommendation.MovieRecommenderTest.xml new file mode 100644 index 0000000..c139db9 --- /dev/null +++ b/target/surefire-reports/TEST-nearsoft.academy.bigdata.recommendation.MovieRecommenderTest.xml @@ -0,0 +1,69 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/target/surefire-reports/nearsoft.academy.bigdata.recommendation.MovieRecommenderTest.txt b/target/surefire-reports/nearsoft.academy.bigdata.recommendation.MovieRecommenderTest.txt new file mode 100644 index 0000000..1d0380e --- /dev/null +++ b/target/surefire-reports/nearsoft.academy.bigdata.recommendation.MovieRecommenderTest.txt @@ -0,0 +1,4 @@ +------------------------------------------------------------------------------- +Test set: nearsoft.academy.bigdata.recommendation.MovieRecommenderTest +------------------------------------------------------------------------------- +Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 948.067 sec diff --git a/target/test-classes/.netbeans_automatic_build b/target/test-classes/.netbeans_automatic_build new file mode 100644 index 0000000..e69de29 diff --git a/target/test-classes/nearsoft/academy/bigdata/recommendation/MovieRecommender.class b/target/test-classes/nearsoft/academy/bigdata/recommendation/MovieRecommender.class new file mode 100644 index 0000000..d8b0237 Binary files /dev/null and b/target/test-classes/nearsoft/academy/bigdata/recommendation/MovieRecommender.class differ diff --git a/target/test-classes/nearsoft/academy/bigdata/recommendation/MovieRecommenderTest.class b/target/test-classes/nearsoft/academy/bigdata/recommendation/MovieRecommenderTest.class new file mode 100644 index 0000000..5449698 Binary files /dev/null and b/target/test-classes/nearsoft/academy/bigdata/recommendation/MovieRecommenderTest.class differ