From 73bb8dd3635f5b632eebf792eefbd4d1970ee42d Mon Sep 17 00:00:00 2001 From: cjimenez Date: Mon, 20 Apr 2020 11:12:37 -0700 Subject: [PATCH] Big Data CJimenez --- pom.xml | 2 + .../recommendation/MovieRecommender.java | 111 ++++++++++++++++++ .../recommendation/MovieRecommenderTest.java | 2 +- target/big-data-1.0-SNAPSHOT.jar | Bin 0 -> 1744 bytes target/maven-archiver/pom.properties | 5 + .../default-testCompile/createdFiles.lst | 2 + .../default-testCompile/inputFiles.lst | 2 + ...ta.recommendation.MovieRecommenderTest.xml | 61 ++++++++++ ...ta.recommendation.MovieRecommenderTest.txt | 4 + .../recommendation/MovieRecommender.class | Bin 0 -> 5853 bytes .../recommendation/MovieRecommenderTest.class | Bin 0 -> 1563 bytes 11 files changed, 188 insertions(+), 1 deletion(-) create mode 100644 src/test/java/nearsoft/academy/bigdata/recommendation/MovieRecommender.java create mode 100644 target/big-data-1.0-SNAPSHOT.jar create mode 100644 target/maven-archiver/pom.properties create mode 100644 target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/createdFiles.lst create mode 100644 target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/inputFiles.lst create mode 100644 target/surefire-reports/TEST-nearsoft.academy.bigdata.recommendation.MovieRecommenderTest.xml create mode 100644 target/surefire-reports/nearsoft.academy.bigdata.recommendation.MovieRecommenderTest.txt create mode 100644 target/test-classes/nearsoft/academy/bigdata/recommendation/MovieRecommender.class create mode 100644 target/test-classes/nearsoft/academy/bigdata/recommendation/MovieRecommenderTest.class diff --git a/pom.xml b/pom.xml index 8169ff7..b82bb07 100644 --- a/pom.xml +++ b/pom.xml @@ -12,6 +12,8 @@ UTF-8 + 7 + 7 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..7f7f788 --- /dev/null +++ b/src/test/java/nearsoft/academy/bigdata/recommendation/MovieRecommender.java @@ -0,0 +1,111 @@ + +package nearsoft.academy.bigdata.recommendation; + +import com.google.common.collect.BiMap; +import com.google.common.collect.HashBiMap; +import java.io.BufferedReader; +import java.io.BufferedWriter; +import java.io.File; +import java.io.FileNotFoundException; +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 carlo + */ +public class MovieRecommender { + + private UserBasedRecommender recommender; + private HashMap users = new HashMap(); + private HashBiMap products = HashBiMap.create(); + private int totalReviews = 0, totalUsers = 0, totalProducts = 0; + + // Constructor + public MovieRecommender(String path) throws IOException, TasteException { + inicialize(path); + } + + private void inicialize(String path) throws FileNotFoundException, IOException, TasteException { + String pathWriter = "D:/Charlitos/Nearsoft/programs/Semana_3/movies.csv"; + File file = new File(path); + BufferedReader br = new BufferedReader(new FileReader(file)); + BufferedWriter wr = new BufferedWriter(new FileWriter(pathWriter)); + + String userId = "", productId = "", score, line; + int currentUser = 0, currentProduct = 0; + + while ((line = br.readLine()) != null) { + switch(line.split(" ")[0]) { + case "product/productId:": + productId = line.split(" ")[1]; + if (!products.containsKey(productId)) { + totalProducts++; + products.put(productId,totalProducts); + currentProduct = totalProducts; + }else{ + currentProduct = products.get(productId); + } + break; + case "review/userId:": + userId = line.split(" ")[1]; + if (!users.containsKey(userId)) { + totalUsers++; + users.put(userId,totalUsers); + currentUser = totalUsers; + }else{ + currentUser = users.get(userId); + } + break; + case "review/score:": + score = line.split(" ")[1]; + wr.write(currentUser+","+currentProduct+","+score+"\n"); + totalReviews++; + break; + } + } + br.close(); + wr.close(); + DataModel model = new FileDataModel(new File(pathWriter)); + UserSimilarity similarity = new PearsonCorrelationSimilarity(model); + UserNeighborhood neighborhood = new ThresholdUserNeighborhood(0.1, similarity, model); + recommender = new GenericUserBasedRecommender(model, neighborhood, similarity); + } + + public int getTotalReviews() { + return totalReviews; + } + + public int getTotalProducts() { + return totalProducts; + } + + public int getTotalUsers() { + return totalUsers; + } + + public List getRecommendationsForUser(String userId) throws TasteException { + List list = new ArrayList(); + int id = users.get(userId); + List recommendations = recommender.recommend(id, 3); + BiMap inverseProducts = products.inverse(); + for (RecommendedItem recommendation: recommendations) { + list.add(inverseProducts.get((int) recommendation.getItemID())); + } + return list; + } + +} diff --git a/src/test/java/nearsoft/academy/bigdata/recommendation/MovieRecommenderTest.java b/src/test/java/nearsoft/academy/bigdata/recommendation/MovieRecommenderTest.java index 0d0b1fe..54b0346 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("D:/Charlitos/Nearsoft/programs/Semana_3/movies.txt"); assertEquals(7911684, recommender.getTotalReviews()); assertEquals(253059, recommender.getTotalProducts()); assertEquals(889176, recommender.getTotalUsers()); diff --git a/target/big-data-1.0-SNAPSHOT.jar b/target/big-data-1.0-SNAPSHOT.jar new file mode 100644 index 0000000000000000000000000000000000000000..ba2396e40727ffe47903ca5f33c826854ca69e74 GIT binary patch literal 1744 zcmWIWW@h1H0D-EIDFI*xl;8x?zOEsTx}JV+`T1V8-Q2@S(&e+ zpQoE^aEP9-+h^Z1r+vJ2^)B*y>uQ}lbAEG>!4=~NPm6TC&YjTl)^*}wf3hTOikS8R zm5QBnx`TwhgMv%uYONKK;TD=~93)yJd^+f}NYB@vuR4`G=Xe2Ba8Mke{npk(<*y$=Cm|0Z-fe-=de_`C83j z@mVOuF5pq)$$aFhO5F5|YN3-heSGhEX=}*_!@RGrkAIWiy~e1j^A7Lz)P-+;W;~2B zUAm=(KZHf=0k_JnCtp53?DO;Rx)kW_cRj4^OV(DU)sIieE`2#;-@Uu%Y7#j+L#{PG zvXJ6w-CVkN7Xe#RR42}flXN8eHi*m<$E zRN1ICVa+^iCK;A#^Lw_^MET>5o>|DJ7G z3VU9bpICZov#NyK{=+X^96R^EGvukt?aDd-Sd#Z-#M|@X3(Z^1L`RiZ~@uubC-OjnLd_H}7?ibYr|6KmZ+@!F< zNj2c(JI~sWo2M?iGw;;;C3pQexnp;))h?@eU%)%9Aos&_N9#SdiC*Wny_1~$W&2WR zz3E#gwa?96!8}jx$&=~JIU?R&pJ};epZn*%#|!oQX21K_mGglWk&M|_PY%$W(~w>Y zjMGXWHYYW13ySg!Qj1D5Q;T^|Zsck<5Ma1qJE7j9AZ*eWZ&vo@+nTot)ITs;o|2*T zT=U2GZ)?|A1Sz>KWO&ReD>r3})}MI`VkO@&&slqS?>6%ne;CeLEWUcEGXDNT&z3z; zBemujTzG$lEAmm#Eq#A`eSIz4TD<^oMkWzv+{FseJ3t`7 z@YWGT!}A$J8}?!bq!?H}z;3bXg wNih~$t{}pXg8^GwMws5sOgISOjs}^INZA42tZX2IIDjw}Sm1{O3qb}30B_tXRR910 literal 0 HcmV?d00001 diff --git a/target/maven-archiver/pom.properties b/target/maven-archiver/pom.properties new file mode 100644 index 0000000..4485044 --- /dev/null +++ b/target/maven-archiver/pom.properties @@ -0,0 +1,5 @@ +#Generated by Maven +#Sun Apr 19 21:24:13 MST 2020 +groupId=nearsoft.academy +artifactId=big-data +version=1.0-SNAPSHOT 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..092df19 --- /dev/null +++ b/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/inputFiles.lst @@ -0,0 +1,2 @@ +D:\NetBeansProjects\big-data-exercises-master\src\test\java\nearsoft\academy\bigdata\recommendation\MovieRecommenderTest.java +D:\NetBeansProjects\big-data-exercises-master\src\test\java\nearsoft\academy\bigdata\recommendation\MovieRecommender.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..526920d --- /dev/null +++ b/target/surefire-reports/TEST-nearsoft.academy.bigdata.recommendation.MovieRecommenderTest.xml @@ -0,0 +1,61 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ 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..ebeb4f4 --- /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: 520.792 sec 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 0000000000000000000000000000000000000000..84cfe5bd735d7f9202ee425730972abd84d14830 GIT binary patch literal 5853 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 Re#%QTB0yLLNj@M#{{`PHWq1Gp literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..56fcca46f2308c49f3049e44b272e935b0007407 GIT binary patch literal 1563 zcmbtU-BQ~|6#f<)4m;8 z15#8N@Jjef$(`<*j54qpimMBJr6HoG(qYUuyP-~^upS9N=DX4tfp|H~ed8TZ>r-vR zf@2U4GTfMO&oS=mNCov$uGUX%fYaa7#`GfxSqw8=uS;DGwP@~0iu7aLrckzV12-+) za_})miE$X!`EiRV^5r;|5ixc|TUh&{C7R^aKe4gV&5-)*CzIh52cMb@L){G9QFz$$ zbe!NA{N;ON^|^z4#%i!@wMX&e48CBvwmdU8^K5(0-QRvu+1)YLUpkmTj$xFndo^p< zF%Z8-mK2za+-x zA#$}09(Ax6=2o6p*E9IKt3RB5F<-P$Vp#mp{;LvRhV)8!D5*PK70At&e;}i(IB3#I z)(t(;tcge&y>pn>4Mk0`D0!DT3z<`5@>8jJg) z5wBMTK7u0vg(ODnsSGUCr+^Pz$h1M)=4AVS~V2sv0ZlOr8RSBb5#cfn@r;TzfLDE5K)7=xS o5ZWT$uVRg8uTw0;B{_LYC(r0)fc7%Jqc{ocP1+f@Xzj!HKiT}7f&c&j literal 0 HcmV?d00001