diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..befafaa
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,4 @@
+.idea
+target/
+*.iml
+.DS_Store
diff --git a/pom.xml b/pom.xml
index 8169ff7..26eb9e6 100644
--- a/pom.xml
+++ b/pom.xml
@@ -26,5 +26,11 @@
4.7
test
+
+ org.slf4j
+ slf4j-api
+ 1.7.5
+
+
diff --git a/src/.DS_Store b/src/.DS_Store
new file mode 100644
index 0000000..c842611
Binary files /dev/null and b/src/.DS_Store differ
diff --git a/src/test/.DS_Store b/src/test/.DS_Store
new file mode 100644
index 0000000..762fe79
Binary files /dev/null and b/src/test/.DS_Store differ
diff --git a/src/test/java/.DS_Store b/src/test/java/.DS_Store
new file mode 100644
index 0000000..fb6af32
Binary files /dev/null and b/src/test/java/.DS_Store differ
diff --git a/src/test/java/nearsoft/.DS_Store b/src/test/java/nearsoft/.DS_Store
new file mode 100644
index 0000000..083635f
Binary files /dev/null and b/src/test/java/nearsoft/.DS_Store differ
diff --git a/src/test/java/nearsoft/academy/.DS_Store b/src/test/java/nearsoft/academy/.DS_Store
new file mode 100644
index 0000000..633cb8b
Binary files /dev/null and b/src/test/java/nearsoft/academy/.DS_Store differ
diff --git a/src/test/java/nearsoft/academy/bigdata/.DS_Store b/src/test/java/nearsoft/academy/bigdata/.DS_Store
new file mode 100644
index 0000000..04f3321
Binary files /dev/null and b/src/test/java/nearsoft/academy/bigdata/.DS_Store differ
diff --git a/src/test/java/nearsoft/academy/bigdata/recommendation/BookRecommender.java b/src/test/java/nearsoft/academy/bigdata/recommendation/BookRecommender.java
new file mode 100644
index 0000000..91977ea
--- /dev/null
+++ b/src/test/java/nearsoft/academy/bigdata/recommendation/BookRecommender.java
@@ -0,0 +1,53 @@
+package nearsoft.academy.bigdata.recommendation;
+
+
+import com.google.common.collect.BiMap;
+import com.google.common.collect.HashBiMap;
+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;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+
+public class BookRecommender {
+ List RecommendedProducts ;
+ BiMap products ;
+ BiMap users ;
+
+ private String path;
+ public BookRecommender(String path, BiMap users, BiMap products)
+ {
+ this.RecommendedProducts = new ArrayList();
+ this.path = path;
+ this.users = users;
+ this.products = products;
+ }
+
+ public List getRecommendationsForUser( String userID) throws IOException, TasteException {
+ DataModel model = new FileDataModel(new File(this.path));
+ UserSimilarity similarity = new PearsonCorrelationSimilarity(model);
+ UserNeighborhood neighborhood = new ThresholdUserNeighborhood(0.1, similarity, model);
+ UserBasedRecommender recommender = new GenericUserBasedRecommender(model, neighborhood, similarity);
+ List RecommendedProducts = new ArrayList();
+ List recommendations = recommender.recommend(this.users.get(userID),3);
+ for (RecommendedItem recomendation:recommendations)
+ {
+ long value = (long) recomendation.getItemID();
+ this.RecommendedProducts.add(this.products.inverse().get(value) );
+ }
+
+ return this.RecommendedProducts;
+ }
+
+
+}
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..f0f64bd
--- /dev/null
+++ b/src/test/java/nearsoft/academy/bigdata/recommendation/MovieRecommender.java
@@ -0,0 +1,82 @@
+package nearsoft.academy.bigdata.recommendation;
+import java.io.*;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.zip.GZIPInputStream;
+import org.apache.mahout.cf.taste.common.TasteException;
+import com.google.common.collect.BiMap;
+import com.google.common.collect.HashBiMap;
+
+public class MovieRecommender {
+ private String path;
+ int information;
+
+ BiMap products ;
+ BiMap users ;
+ long totalReviews = 0;
+ PrintWriter csvWriter ;
+ String product;
+ String user;
+
+ public static void main(String[] args) throws IOException, TasteException {
+
+ }
+ public MovieRecommender(String path) throws IOException, TasteException {
+ this.path = path;
+ this.totalReviews = 0;
+ this.information = 0;
+ this.users = HashBiMap.create();
+ this.products = HashBiMap.create();
+ this.csvWriter= new PrintWriter("dataset.csv");
+ BufferedReader reader;
+ InputStream stream = new GZIPInputStream(new FileInputStream(path));
+ reader = new BufferedReader(new InputStreamReader(stream, "US-ASCII"));
+ String line = reader.readLine();
+ long productID = 0;
+ long userID = 0;
+ while (line != null ) {
+ if (line.startsWith("product/productId:")) {
+ product = line.split(": ")[1];
+ if (!products.containsKey(product)) {
+ products.put(product, productID);
+ productID++;
+ }
+
+ }else if (line.startsWith("review/userId:")) {
+ user= line.split(": ")[1];
+ if (!users.containsKey(user)) {
+ users.put(user, userID);
+ userID++;
+ }
+
+ }else if (line.startsWith("review/score:")) {
+ this.totalReviews ++;
+ csvWriter.println(users.get(user) + "," + products.get(product) + "," + line.split(": ")[1]);
+
+ }
+ line = reader.readLine();
+ }
+ csvWriter.close();
+ }
+
+ public long getTotalReviews() {
+ return this.totalReviews;
+ }
+
+ public long getTotalProducts() {
+ return this.products.size();
+ }
+
+ public long getTotalUsers() {
+ return this.users.size();
+ }
+
+ public List getRecommendationsForUser(String userID) throws IOException,TasteException {
+ BookRecommender bookRecommender = new BookRecommender("dataset.csv", this.users, this.products);
+
+ List RecommendedProducts = new ArrayList();
+ RecommendedProducts = bookRecommender.getRecommendationsForUser(userID);
+
+ return RecommendedProducts;
+ }
+}
diff --git a/src/test/java/nearsoft/academy/bigdata/recommendation/MovieRecommenderTest.java b/src/test/java/nearsoft/academy/bigdata/recommendation/MovieRecommenderTest.java
index 0d0b1fe..dc3d57d 100644
--- a/src/test/java/nearsoft/academy/bigdata/recommendation/MovieRecommenderTest.java
+++ b/src/test/java/nearsoft/academy/bigdata/recommendation/MovieRecommenderTest.java
@@ -15,7 +15,7 @@ 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("/Users/sandraherrera/Downloads/movies.txt.gz");
assertEquals(7911684, recommender.getTotalReviews());
assertEquals(253059, recommender.getTotalProducts());
assertEquals(889176, recommender.getTotalUsers());
@@ -24,7 +24,6 @@ public void testDataInfo() throws IOException, TasteException {
assertThat(recommendations, hasItem("B0002O7Y8U"));
assertThat(recommendations, hasItem("B00004CQTF"));
assertThat(recommendations, hasItem("B000063W82"));
-
}
}