From fdaf71d7bacbb07d9dd4ad0fba0e8acb5e0d8412 Mon Sep 17 00:00:00 2001 From: Carlos Date: Fri, 4 Oct 2019 17:21:14 -0500 Subject: [PATCH 1/4] 1rst update --- .classpath | 44 ++++++ .project | 23 ++++ .settings/org.eclipse.core.resources.prefs | 3 + .settings/org.eclipse.jdt.apt.core.prefs | 2 + .settings/org.eclipse.jdt.core.prefs | 9 ++ .settings/org.eclipse.m2e.core.prefs | 4 + .vscode/launch.json | 21 +++ .vscode/settings.json | 8 ++ .../recommendation/MovieRecommender.java | 126 ++++++++++++++++++ .../recommendation/MovieRecommenderTest.java | 23 ++-- .../recommendation/MovieRecommender.class | Bin 0 -> 4462 bytes .../recommendation/MovieRecommenderTest.class | Bin 0 -> 976 bytes 12 files changed, 254 insertions(+), 9 deletions(-) create mode 100644 .classpath create mode 100644 .project create mode 100644 .settings/org.eclipse.core.resources.prefs create mode 100644 .settings/org.eclipse.jdt.apt.core.prefs create mode 100644 .settings/org.eclipse.jdt.core.prefs create mode 100644 .settings/org.eclipse.m2e.core.prefs create mode 100644 .vscode/launch.json create mode 100644 .vscode/settings.json create mode 100644 src/test/java/nearsoft/academy/bigdata/recommendation/MovieRecommender.java 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/.classpath b/.classpath new file mode 100644 index 0000000..75b806f --- /dev/null +++ b/.classpath @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/.project b/.project new file mode 100644 index 0000000..f150976 --- /dev/null +++ b/.project @@ -0,0 +1,23 @@ + + + big-data + + + + + + org.eclipse.jdt.core.javabuilder + + + + + org.eclipse.m2e.core.maven2Builder + + + + + + org.eclipse.jdt.core.javanature + org.eclipse.m2e.core.maven2Nature + + diff --git a/.settings/org.eclipse.core.resources.prefs b/.settings/org.eclipse.core.resources.prefs new file mode 100644 index 0000000..8dd9b1d --- /dev/null +++ b/.settings/org.eclipse.core.resources.prefs @@ -0,0 +1,3 @@ +eclipse.preferences.version=1 +encoding//src/test/java=UTF-8 +encoding/=UTF-8 diff --git a/.settings/org.eclipse.jdt.apt.core.prefs b/.settings/org.eclipse.jdt.apt.core.prefs new file mode 100644 index 0000000..d4313d4 --- /dev/null +++ b/.settings/org.eclipse.jdt.apt.core.prefs @@ -0,0 +1,2 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.apt.aptEnabled=false diff --git a/.settings/org.eclipse.jdt.core.prefs b/.settings/org.eclipse.jdt.core.prefs new file mode 100644 index 0000000..ac8e750 --- /dev/null +++ b/.settings/org.eclipse.jdt.core.prefs @@ -0,0 +1,9 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5 +org.eclipse.jdt.core.compiler.compliance=1.5 +org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled +org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning +org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=ignore +org.eclipse.jdt.core.compiler.processAnnotations=disabled +org.eclipse.jdt.core.compiler.release=disabled +org.eclipse.jdt.core.compiler.source=1.5 diff --git a/.settings/org.eclipse.m2e.core.prefs b/.settings/org.eclipse.m2e.core.prefs new file mode 100644 index 0000000..f897a7f --- /dev/null +++ b/.settings/org.eclipse.m2e.core.prefs @@ -0,0 +1,4 @@ +activeProfiles= +eclipse.preferences.version=1 +resolveWorkspaceProjects=true +version=1 diff --git a/.vscode/launch.json b/.vscode/launch.json new file mode 100644 index 0000000..503ef3c --- /dev/null +++ b/.vscode/launch.json @@ -0,0 +1,21 @@ +{ + // Use IntelliSense to learn about possible attributes. + // Hover to view descriptions of existing attributes. + // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 + "version": "0.2.0", + "configurations": [ + { + "type": "java", + "name": "CodeLens (Launch) - MovieRecommenderTest", + "request": "launch", + "mainClass": "nearsoft.academy.bigdata.recommendation.MovieRecommenderTest", + "projectName": "big-data" + }, + { + "type": "java", + "name": "Debug (Launch) - Current File", + "request": "launch", + "mainClass": "${file}" + } + ] +} \ No newline at end of file diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..2421e38 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,8 @@ +{ + "files.exclude": { + "**/.classpath": true, + "**/.project": true, + "**/.settings": true, + "**/.factorypath": true + } +} \ No newline at end of file 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..54a9ce6 --- /dev/null +++ b/src/test/java/nearsoft/academy/bigdata/recommendation/MovieRecommender.java @@ -0,0 +1,126 @@ +package nearsoft.academy.bigdata.recommendation; + +import static org.junit.Assume.assumeNoException; + +import java.io.BufferedReader; +import java.io.File; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.FileReader; +import java.io.IOException; +import java.io.InputStream; +import java.util.List; +import java.util.zip.GZIPInputStream; + +import javax.management.Query; + +import com.google.common.collect.HashBiMap; + +import org.apache.mahout.cf.taste.common.TasteException; +import org.apache.mahout.cf.taste.impl.common.FastByIDMap; +import org.apache.mahout.cf.taste.impl.model.GenericDataModel; +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.model.PreferenceArray; +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; + +public class MovieRecommender { + private String path; + private String csvPath; + private GenericUserBasedRecommender gubRecommender; + private int totalReviews; + private HashBiMap users; + private HashBiMap products; + private FastByIDMap prefArray; + + public MovieRecommender(String in_path) throws IOException, TasteException { + path = in_path; + totalReviews = 0; + users = HashBiMap.create(); + products = HashBiMap.create(); + csvPath = createCSVFile(path); + + + //A MIRACLE HAPPENS HERE + + GenericDataModel model = new GenericDataModel(prefArray); + UserSimilarity similarity = new PearsonCorrelationSimilarity(model); + UserNeighborhood neighborhood = new ThresholdUserNeighborhood(0.1, similarity, model); + gubRecommender = new GenericUserBasedRecommender(model, neighborhood, similarity); + + } + + public int getTotalReviews() { + return totalReviews; + } + + public int getTotalProducts() { + return products.size(); + } + + public int getTotalUsers() { + return users.size(); + } + + public List getRecommendationsForUser(String in_user) throws IOException, TasteException { + return null; + } + + private String createCSVFile(String in_path) throws IOException, TasteException { + //File Creation + File csv = new File("movies.csv"); + if (csv.exists()) + csv.delete(); + else + { + csv.createNewFile(); + //input stream to read the source file. + FileInputStream fileInput = new FileInputStream(path); + //Gzip input stream to decompress the source + GZIPInputStream gzis = new GZIPInputStream(fileInput); + //Output stream where the decompress result + FileOutputStream fileOutput = new FileOutputStream(csv); + + //file decompress process. + byte[] buffer = new byte[1024]; + int length; + while ((length = gzis.read(buffer)) > 0) + fileOutput.write(buffer, 0, length); + + //closing the files. + fileInput.close(); + gzis.close(); + fileOutput.close(); + } + + return csv.getPath(); + } + + private void parseCSVFile() { + + BufferedReader reader; + try { + reader = new BufferedReader(new FileReader(csvPath)); + String[] splitLine; + String line = reader.readLine(); + while (line != null) { + System.out.println(line); + if(line.startsWith(("product/productId"))) { + splitLine = line.split(" "); + //TODO + } + //MORE MAGIC HERE + line = reader.readLine(); + } + reader.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } +} \ 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..cea5a73 100644 --- a/src/test/java/nearsoft/academy/bigdata/recommendation/MovieRecommenderTest.java +++ b/src/test/java/nearsoft/academy/bigdata/recommendation/MovieRecommenderTest.java @@ -12,19 +12,24 @@ public class MovieRecommenderTest { @Test - 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"); - assertEquals(7911684, recommender.getTotalReviews()); - assertEquals(253059, recommender.getTotalProducts()); - assertEquals(889176, recommender.getTotalUsers()); + public static void testDataInfo() throws IOException, TasteException { + // download movies.txt.gz from + // http://snap.stanford.edu/data/web-Movies.html + MovieRecommender recommender = new MovieRecommender("/Users/csuarez/Downloads/movies.txt.gz"); + /* + assertEquals(7911684, recommender.getTotalReviews()); + assertEquals(253059, recommender.getTotalProducts()); + assertEquals(889176, recommender.getTotalUsers()); + List recommendations = recommender.getRecommendationsForUser("A141HP4LYPWMSR"); assertThat(recommendations, hasItem("B0002O7Y8U")); assertThat(recommendations, hasItem("B00004CQTF")); - assertThat(recommendations, hasItem("B000063W82")); - + assertThat(recommendations, hasItem("B000063W82")); */ + } + public static void main(String[] args) throws IOException, TasteException { + testDataInfo(); + } } 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..fb96efdb393b8debe5cc2cdc6a1edfee5cce996a GIT binary patch literal 4462 zcmbVP>wg=?6+L6iT19ML&da7i2n1p)wwDBx1UnCKoY-pQM`PpEaUfl<$I=E#D^@Ef zPDTp_!JN4iFz%uCm{9xF<>$1KXJkST7XdyZ#jPf7wl zUlb5Yfrb*NvVUKSq>QxVq_fgc{K(95vROhm`psgd#~v^XG_hvHPUlUp)3Ji5IsK^XnzI6(Hx-})_c$f#nN9WvKr`=Q*}+RvnvY?`+sG&(9j&sBdWoQ|{SrEKtW~`>9UHJV&R&NO0}lwS4GbO~89Q!g zY4`rsBzw1t%Gh2V8loCH1@_g@$v+c;vnr>dm#20>c~4o{r(+`;<9HAUlwc1F>~E>% zcHi785!O1UfkE4MGbBYjXJ<{<_GXP?KcnQ2I<70Te)1Tp4#v@iLkbYX$fyY@pjPG7 zt$;itaQtRK^3qOcCLK59I8(-G#+Aj4lbuqTVlXrkJ@V>h_3!yOj-XcoIwmmP(pyWS z5JhEfiBxy3Rjcvny9Gh3>9=;ei{m(w3jg~BuKr(w)&jju#Fg6Bq5iI{>WDO^9Lvm(F^1H0Xn*i4jNsrPzKF?KaOe>S+38hmH)(yPV2 z#=)Yo_!2=LvRZbQCK@Zkg*Q}KU`4M+REMYfmcnsNMC;Si8(ntcF*Wka+pze4xN_g9 z%y>q};}~Z;E!r2U`P#)f3L$lF=5zHf^^b0m2TlzN?7VRbD|vR-NZCb?a1PwUv{f!k zbu%hQmAIFNDN3|>d8h;$!!)JOsS>2v!6G6K3mFylTU76yjwg|27MB-@fix(Cf=lUbG8F z-|6J=vUxL@RiG{kG*whkm*0{lKZ$*qqv4%~N?vHIOZbQ~@lk<|OC}UVu8rdoKCa^v z_#_LO^USsMpw=?clT50y89bxoS$vw#C2A_zz@gTpLjRnO&#F7K!OA*C$}ofHlr8>P z_@a(4;mb5c*9W!PX5N85K)`U0_`>L|#59)-clq=W}HEEE^0HC#dvAb&|IS zQ*NZ8I$_FSAd0~4%PfYa;>_q|X_{4vK;1+SpRzKaR;8z2U_~n{SFeWe32a@|yT@Ok z>P6PNjI-}E?JSNdKEeAqt|Al175qrK;>RpxmRu3c@SSl5Kh<$fX%|z1tAw@&KgTaM z{9;*UJTl8tCa2>C{EDH;!j=_OmDVsz<4T-$$MG9n*YIMfataOWcnMqRr-E9M&ByRE zW290`8kIIV6~{bY(Xg-_fnR{@conay4Ca}xS3G4atyV4NPRH;%%jUb4tv7W19)Doy z6bo6K$ak%Fye9%W;doKr?xlcTO_F?6F!HRZmhsv67vLl;M~ zRFzoxe@U}YIjQ1h#3{L!RPN)Xm7ggc%DvdZim0AnJ^bWR)gpU!s>t$NUPpe*+R<-W z({c7XzrUXISlKOmW?5Bz-b5=xr6JDS$`w(z+t7^nvHveVHL#sXEZ~mB?m28v)X!l@ z;uYLGht{Ckok%2J#`XoY&tXp)503Ncp#|(8D5GnPRQO5D{ zw&qCt0{Z80;<^uVfWI9+_yi)@O*(Ca-%d~+xP#?r3p)At5DsAJ3$%7aEkT?K8SJtDvAbM!M1_0cf7z(9TXU4 z1UTq#q6ZTyn+R^cxOi`6ag2+1&tqcc`bR?RW7YLfth&B+mG!-=u0M+pkxtlGfu~KM z&^}_SQ#{0rE79egYfgc5Ph4tb?c-wBoGMSX`uuTS>Obus)Q&=6`_^d5()LRaW>9I@or_WOX<)7l$GoNgj)l$t(|t+=|pn?zACQ_FXW2 z#n9Nzv{kX}sZ7g`&e>qk5)U57W$NE+_c>-f0B@btXo7SLc=8RtTRGJQ4CJfKdEjkJA#X@O@ zdh1|TsQ?TsWn6HZ;E5z6X=*bPX;6D6OG5ctxeaN|TEMnrf+hhLX{SM!xeX)hQ^d(L z@^cSQvG9ow1q5W>Z(s=}vgKb1 Date: Mon, 7 Oct 2019 16:35:58 -0500 Subject: [PATCH 2/4] Test Passed --- .../recommendation/MovieRecommender.java | 166 +++++++++++------- .../recommendation/MovieRecommenderTest.java | 4 +- .../recommendation/MovieRecommender.class | Bin 4462 -> 7068 bytes .../recommendation/MovieRecommenderTest.class | Bin 976 -> 1688 bytes 4 files changed, 103 insertions(+), 67 deletions(-) diff --git a/src/test/java/nearsoft/academy/bigdata/recommendation/MovieRecommender.java b/src/test/java/nearsoft/academy/bigdata/recommendation/MovieRecommender.java index 54a9ce6..931feb7 100644 --- a/src/test/java/nearsoft/academy/bigdata/recommendation/MovieRecommender.java +++ b/src/test/java/nearsoft/academy/bigdata/recommendation/MovieRecommender.java @@ -1,126 +1,162 @@ package nearsoft.academy.bigdata.recommendation; -import static org.junit.Assume.assumeNoException; - import java.io.BufferedReader; +import java.io.BufferedWriter; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.FileReader; +import java.io.FileWriter; import java.io.IOException; -import java.io.InputStream; +import java.util.ArrayList; import java.util.List; import java.util.zip.GZIPInputStream; -import javax.management.Query; - -import com.google.common.collect.HashBiMap; - import org.apache.mahout.cf.taste.common.TasteException; -import org.apache.mahout.cf.taste.impl.common.FastByIDMap; -import org.apache.mahout.cf.taste.impl.model.GenericDataModel; 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.model.PreferenceArray; 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 com.google.common.collect.BiMap; +import com.google.common.collect.HashBiMap; + public class MovieRecommender { private String path; private String csvPath; - private GenericUserBasedRecommender gubRecommender; + private String dataFileM; + private UserBasedRecommender recommender; + BiMap users; + BiMap movies; + BiMap invertedMovies; private int totalReviews; - private HashBiMap users; - private HashBiMap products; - private FastByIDMap prefArray; public MovieRecommender(String in_path) throws IOException, TasteException { path = in_path; - totalReviews = 0; users = HashBiMap.create(); - products = HashBiMap.create(); - csvPath = createCSVFile(path); + movies = HashBiMap.create(); + invertedMovies = HashBiMap.create(); + totalReviews = 0; + csvPath = createCSVFile(path); + dataFileM = parseCSVFile(); + } - //A MIRACLE HAPPENS HERE - - GenericDataModel model = new GenericDataModel(prefArray); + public List getRecommendationsForUser(String in_user) throws IOException, TasteException { + Long indexUser = users.get(in_user); + List outputList = new ArrayList(); + System.out.println("Generation recommendations, please wait:"); + DataModel model = new FileDataModel(new File(dataFileM)); UserSimilarity similarity = new PearsonCorrelationSimilarity(model); UserNeighborhood neighborhood = new ThresholdUserNeighborhood(0.1, similarity, model); - gubRecommender = new GenericUserBasedRecommender(model, neighborhood, similarity); + recommender = new GenericUserBasedRecommender(model, neighborhood, similarity); - } - - public int getTotalReviews() { - return totalReviews; - } + List recommendations = recommender.recommend(indexUser, 3); - public int getTotalProducts() { - return products.size(); - } - - public int getTotalUsers() { - return users.size(); - } - - public List getRecommendationsForUser(String in_user) throws IOException, TasteException { - return null; + for (RecommendedItem recommendation : recommendations) { + Integer i = (int) (long) recommendation.getItemID(); + String movieID = invertedMovies.get(i); + System.out.println(movieID); + outputList.add(movieID); + } + return outputList; } - private String createCSVFile(String in_path) throws IOException, TasteException { + private String createCSVFile(String in_path) throws IOException, TasteException { //File Creation File csv = new File("movies.csv"); - if (csv.exists()) - csv.delete(); - else + if (!csv.exists()) { csv.createNewFile(); - //input stream to read the source file. FileInputStream fileInput = new FileInputStream(path); - //Gzip input stream to decompress the source GZIPInputStream gzis = new GZIPInputStream(fileInput); - //Output stream where the decompress result FileOutputStream fileOutput = new FileOutputStream(csv); - //file decompress process. byte[] buffer = new byte[1024]; int length; while ((length = gzis.read(buffer)) > 0) fileOutput.write(buffer, 0, length); - //closing the files. fileInput.close(); gzis.close(); fileOutput.close(); } - - return csv.getPath(); + return csv.getAbsolutePath(); } - private void parseCSVFile() { + private String parseCSVFile() throws IOException, TasteException { - BufferedReader reader; - try { - reader = new BufferedReader(new FileReader(csvPath)); - String[] splitLine; - String line = reader.readLine(); - while (line != null) { - System.out.println(line); - if(line.startsWith(("product/productId"))) { - splitLine = line.split(" "); - //TODO + File fileDataModel = new File("fileDataModel.csv"); + if(fileDataModel.exists()) + fileDataModel.delete(); + fileDataModel.createNewFile(); + try { + FileWriter fileOutput = new FileWriter(fileDataModel.getAbsolutePath()); + BufferedWriter fileWriter = new BufferedWriter(fileOutput); + BufferedReader reader = new BufferedReader(new FileReader(csvPath)); + String writerString = ""; + long userCount = 0; + int moviesCount = 0; + + for (String line = reader.readLine(); line != null; line = reader.readLine()) { + String dataLine; + if(line.startsWith(("product/productId"))) //prodID + { + dataLine = line.split(" ")[1]; + if(!movies.containsKey(dataLine)) + { + movies.put(dataLine, moviesCount); + invertedMovies.put(moviesCount,dataLine); + writerString = moviesCount + ","; + moviesCount++; + } + else + writerString = (movies.get(dataLine) + ","); + } + else if(line.startsWith(("review/userId"))) //userID + { + dataLine = line.split(" ")[1]; + if(!users.containsKey(dataLine)) + { + users.put(dataLine, userCount); + writerString = userCount + "," + writerString; + userCount++; + } + else + writerString = users.get(dataLine) + "," + writerString; } - //MORE MAGIC HERE - line = reader.readLine(); - } - reader.close(); - } catch (IOException e) { - e.printStackTrace(); - } + else if(line.startsWith(("review/score"))) //score + { + totalReviews++; + String reviewScore = line.split(" ")[1]; + writerString += reviewScore + "\n"; + fileWriter.write(writerString); + } + } + fileWriter.close(); + fileOutput.close(); + reader.close(); + } catch (IOException e) { + e.printStackTrace(); + } + + return fileDataModel.getAbsolutePath(); + } + + public int getTotalProducts() { + return movies.size(); + } + + public int getTotalUsers() { + return users.size(); + } + + public int getTotalReviews() { + return totalReviews; } } \ 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 cea5a73..0a47849 100644 --- a/src/test/java/nearsoft/academy/bigdata/recommendation/MovieRecommenderTest.java +++ b/src/test/java/nearsoft/academy/bigdata/recommendation/MovieRecommenderTest.java @@ -17,7 +17,7 @@ public static void testDataInfo() throws IOException, TasteException { // http://snap.stanford.edu/data/web-Movies.html MovieRecommender recommender = new MovieRecommender("/Users/csuarez/Downloads/movies.txt.gz"); - /* + assertEquals(7911684, recommender.getTotalReviews()); assertEquals(253059, recommender.getTotalProducts()); assertEquals(889176, recommender.getTotalUsers()); @@ -25,7 +25,7 @@ public static void testDataInfo() throws IOException, TasteException { List recommendations = recommender.getRecommendationsForUser("A141HP4LYPWMSR"); assertThat(recommendations, hasItem("B0002O7Y8U")); assertThat(recommendations, hasItem("B00004CQTF")); - assertThat(recommendations, hasItem("B000063W82")); */ + assertThat(recommendations, hasItem("B000063W82")); } diff --git a/target/test-classes/nearsoft/academy/bigdata/recommendation/MovieRecommender.class b/target/test-classes/nearsoft/academy/bigdata/recommendation/MovieRecommender.class index fb96efdb393b8debe5cc2cdc6a1edfee5cce996a..6eca53a00b06536d02d0253311a44c1b30cfb99b 100644 GIT binary patch literal 7068 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 SC$fKQ(dIybeY*-N9sdT+#ej7H literal 4462 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 aO^#7 Date: Wed, 9 Oct 2019 14:00:23 -0500 Subject: [PATCH 3/4] Fixing PR issues, adding .gitignore --- .classpath | 44 ------------------ .gitignore | 7 +++ .project | 23 --------- .settings/org.eclipse.core.resources.prefs | 3 -- .settings/org.eclipse.jdt.apt.core.prefs | 2 - .settings/org.eclipse.jdt.core.prefs | 9 ---- .settings/org.eclipse.m2e.core.prefs | 4 -- .vscode/launch.json | 21 --------- .vscode/settings.json | 8 ---- .../recommendation/MovieRecommender.java | 13 +++--- .../recommendation/MovieRecommender.class | Bin 7068 -> 0 bytes .../recommendation/MovieRecommenderTest.class | Bin 1688 -> 0 bytes 12 files changed, 14 insertions(+), 120 deletions(-) delete mode 100644 .classpath create mode 100644 .gitignore delete mode 100644 .project delete mode 100644 .settings/org.eclipse.core.resources.prefs delete mode 100644 .settings/org.eclipse.jdt.apt.core.prefs delete mode 100644 .settings/org.eclipse.jdt.core.prefs delete mode 100644 .settings/org.eclipse.m2e.core.prefs delete mode 100644 .vscode/launch.json delete mode 100644 .vscode/settings.json delete mode 100644 target/test-classes/nearsoft/academy/bigdata/recommendation/MovieRecommender.class delete mode 100644 target/test-classes/nearsoft/academy/bigdata/recommendation/MovieRecommenderTest.class diff --git a/.classpath b/.classpath deleted file mode 100644 index 75b806f..0000000 --- a/.classpath +++ /dev/null @@ -1,44 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..9ec4146 --- /dev/null +++ b/.gitignore @@ -0,0 +1,7 @@ +.project +.classpath +.settings/ +.vscode/ +target/ +fileDataModel.csv +movies.csv \ No newline at end of file diff --git a/.project b/.project deleted file mode 100644 index f150976..0000000 --- a/.project +++ /dev/null @@ -1,23 +0,0 @@ - - - big-data - - - - - - org.eclipse.jdt.core.javabuilder - - - - - org.eclipse.m2e.core.maven2Builder - - - - - - org.eclipse.jdt.core.javanature - org.eclipse.m2e.core.maven2Nature - - diff --git a/.settings/org.eclipse.core.resources.prefs b/.settings/org.eclipse.core.resources.prefs deleted file mode 100644 index 8dd9b1d..0000000 --- a/.settings/org.eclipse.core.resources.prefs +++ /dev/null @@ -1,3 +0,0 @@ -eclipse.preferences.version=1 -encoding//src/test/java=UTF-8 -encoding/=UTF-8 diff --git a/.settings/org.eclipse.jdt.apt.core.prefs b/.settings/org.eclipse.jdt.apt.core.prefs deleted file mode 100644 index d4313d4..0000000 --- a/.settings/org.eclipse.jdt.apt.core.prefs +++ /dev/null @@ -1,2 +0,0 @@ -eclipse.preferences.version=1 -org.eclipse.jdt.apt.aptEnabled=false diff --git a/.settings/org.eclipse.jdt.core.prefs b/.settings/org.eclipse.jdt.core.prefs deleted file mode 100644 index ac8e750..0000000 --- a/.settings/org.eclipse.jdt.core.prefs +++ /dev/null @@ -1,9 +0,0 @@ -eclipse.preferences.version=1 -org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5 -org.eclipse.jdt.core.compiler.compliance=1.5 -org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled -org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning -org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=ignore -org.eclipse.jdt.core.compiler.processAnnotations=disabled -org.eclipse.jdt.core.compiler.release=disabled -org.eclipse.jdt.core.compiler.source=1.5 diff --git a/.settings/org.eclipse.m2e.core.prefs b/.settings/org.eclipse.m2e.core.prefs deleted file mode 100644 index f897a7f..0000000 --- a/.settings/org.eclipse.m2e.core.prefs +++ /dev/null @@ -1,4 +0,0 @@ -activeProfiles= -eclipse.preferences.version=1 -resolveWorkspaceProjects=true -version=1 diff --git a/.vscode/launch.json b/.vscode/launch.json deleted file mode 100644 index 503ef3c..0000000 --- a/.vscode/launch.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - // Use IntelliSense to learn about possible attributes. - // Hover to view descriptions of existing attributes. - // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 - "version": "0.2.0", - "configurations": [ - { - "type": "java", - "name": "CodeLens (Launch) - MovieRecommenderTest", - "request": "launch", - "mainClass": "nearsoft.academy.bigdata.recommendation.MovieRecommenderTest", - "projectName": "big-data" - }, - { - "type": "java", - "name": "Debug (Launch) - Current File", - "request": "launch", - "mainClass": "${file}" - } - ] -} \ No newline at end of file diff --git a/.vscode/settings.json b/.vscode/settings.json deleted file mode 100644 index 2421e38..0000000 --- a/.vscode/settings.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "files.exclude": { - "**/.classpath": true, - "**/.project": true, - "**/.settings": true, - "**/.factorypath": true - } -} \ No newline at end of file diff --git a/src/test/java/nearsoft/academy/bigdata/recommendation/MovieRecommender.java b/src/test/java/nearsoft/academy/bigdata/recommendation/MovieRecommender.java index 931feb7..33b8bee 100644 --- a/src/test/java/nearsoft/academy/bigdata/recommendation/MovieRecommender.java +++ b/src/test/java/nearsoft/academy/bigdata/recommendation/MovieRecommender.java @@ -68,7 +68,7 @@ public List getRecommendationsForUser(String in_user) throws IOException } private String createCSVFile(String in_path) throws IOException, TasteException { - //File Creation + File csv = new File("movies.csv"); if (!csv.exists()) { @@ -76,7 +76,7 @@ private String createCSVFile(String in_path) throws IOException, TasteException FileInputStream fileInput = new FileInputStream(path); GZIPInputStream gzis = new GZIPInputStream(fileInput); FileOutputStream fileOutput = new FileOutputStream(csv); - //file decompress process. + byte[] buffer = new byte[1024]; int length; while ((length = gzis.read(buffer)) > 0) @@ -102,10 +102,10 @@ private String parseCSVFile() throws IOException, TasteException { String writerString = ""; long userCount = 0; int moviesCount = 0; - - for (String line = reader.readLine(); line != null; line = reader.readLine()) { + String line = reader.readLine(); + while (line != null) { String dataLine; - if(line.startsWith(("product/productId"))) //prodID + if(line.startsWith(("product/productId"))) { dataLine = line.split(" ")[1]; if(!movies.containsKey(dataLine)) @@ -118,7 +118,7 @@ private String parseCSVFile() throws IOException, TasteException { else writerString = (movies.get(dataLine) + ","); } - else if(line.startsWith(("review/userId"))) //userID + else if(line.startsWith(("review/userId"))) { dataLine = line.split(" ")[1]; if(!users.containsKey(dataLine)) @@ -137,6 +137,7 @@ else if(line.startsWith(("review/score"))) //score writerString += reviewScore + "\n"; fileWriter.write(writerString); } + line = reader.readLine(); } fileWriter.close(); fileOutput.close(); diff --git a/target/test-classes/nearsoft/academy/bigdata/recommendation/MovieRecommender.class b/target/test-classes/nearsoft/academy/bigdata/recommendation/MovieRecommender.class deleted file mode 100644 index 6eca53a00b06536d02d0253311a44c1b30cfb99b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7068 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 SC$fKQ(dIybeY*-N9sdT+#ej7H diff --git a/target/test-classes/nearsoft/academy/bigdata/recommendation/MovieRecommenderTest.class b/target/test-classes/nearsoft/academy/bigdata/recommendation/MovieRecommenderTest.class deleted file mode 100644 index 0b51d52d1852ebc185a4b31e30675a5e916b1845..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1688 zcmbtU;Zoa15dIE}*eD`ULr6)|Hc2V9amyKpCN!qB1VdwD12M*w>90dRY%!KZrE@~^ zx6=pcqjaW|&~_#d&}Zngbh0O7n>7BF{?Og7Zf|$LZ+GwSfB$?9U;+Da3^6QwQUsxY zq`0s}UAoWtq0^`fC3qlh-*u%&isO5{>_2s6rTb3?RT-){42JPz@l^1Z@EUyk@L1Z4 z;nK3>IckL=mP*$cj5WV5O~f!_VHlSf#!8MSx7zL@xe9-ZPkGK+{l3a5`tW>qqyTveFX?x0XWz7j409WaLrymj%y4{ z?+Y%0X@*(87s?>ycGwnye8CI;Gq2@~ddOW}uW(+Ss`F9Q(Ls?(r{{Xvl}7y&(Au-7Z$$M5yra_b^^cNwpG~4WAxV_wAF%zoVFV6T18+J zSY)`ey0EzLXlJo>u(My@t!V3e7Vcw-YCzV#M(vQl;RpIE!^|M?9X{I1Y4MUnbxGg> zb;-kQHk;eNf3UP?Vi_xOe8X_757-ro`huw6+@pe)&ov9*;yZ?TQ-nn&U52@f0Xy@N zPe+Z=6s{dm8}ReHdCluX3u`D)^bUj7rl4`k4Dd17MY@*2#(D19#kD8ZjRYQb^?P^s zmvRi3dxNbBdGOxDMT0fgbJg$hsJHrDGEBWa+RsnA<2~~q-k0C)%M}V@xWe(sP3p&Y z&(k#%3>6Dk^s{1!ph4|6F~E>G*!A0iEjJwf+)NL8&E|FL)cDlp(J;hFqUVa%IO&{r zM*HyGDI{0qvutjp(Gv)mUUTgmEM>8Obz*v}>oo!yrGv)?b)9 zNPhSV*B?*fqq&#(V7P*-u4?3MgWe?&Rp?F-nA}Oqxd4`LjjR q2)409))$d!G&%Y-8^#%)^cgZEgtsZ9I~Q0ou#0MBzenp3YHt8}|E)d% From f306469a28e8fbaeb32e0b015131f0afae224bdb Mon Sep 17 00:00:00 2001 From: Carlos Date: Fri, 11 Oct 2019 12:53:36 -0500 Subject: [PATCH 4/4] fixing some issues --- .../recommendation/MovieRecommender.java | 39 +++++++++---------- .../recommendation/MovieRecommenderTest.java | 2 +- 2 files changed, 20 insertions(+), 21 deletions(-) diff --git a/src/test/java/nearsoft/academy/bigdata/recommendation/MovieRecommender.java b/src/test/java/nearsoft/academy/bigdata/recommendation/MovieRecommender.java index 33b8bee..bd3b3b0 100644 --- a/src/test/java/nearsoft/academy/bigdata/recommendation/MovieRecommender.java +++ b/src/test/java/nearsoft/academy/bigdata/recommendation/MovieRecommender.java @@ -33,14 +33,12 @@ public class MovieRecommender { private UserBasedRecommender recommender; BiMap users; BiMap movies; - BiMap invertedMovies; private int totalReviews; public MovieRecommender(String in_path) throws IOException, TasteException { path = in_path; users = HashBiMap.create(); movies = HashBiMap.create(); - invertedMovies = HashBiMap.create(); totalReviews = 0; csvPath = createCSVFile(path); @@ -54,8 +52,9 @@ public List getRecommendationsForUser(String in_user) throws IOException DataModel model = new FileDataModel(new File(dataFileM)); UserSimilarity similarity = new PearsonCorrelationSimilarity(model); UserNeighborhood neighborhood = new ThresholdUserNeighborhood(0.1, similarity, model); - recommender = new GenericUserBasedRecommender(model, neighborhood, similarity); + recommender = new GenericUserBasedRecommender(model, neighborhood, similarity); + BiMap invertedMovies = movies.inverse(); List recommendations = recommender.recommend(indexUser, 3); for (RecommendedItem recommendation : recommendations) { @@ -70,22 +69,23 @@ public List getRecommendationsForUser(String in_user) throws IOException private String createCSVFile(String in_path) throws IOException, TasteException { File csv = new File("movies.csv"); - if (!csv.exists()) - { - csv.createNewFile(); - FileInputStream fileInput = new FileInputStream(path); - GZIPInputStream gzis = new GZIPInputStream(fileInput); - FileOutputStream fileOutput = new FileOutputStream(csv); - - byte[] buffer = new byte[1024]; - int length; - while ((length = gzis.read(buffer)) > 0) - fileOutput.write(buffer, 0, length); - - fileInput.close(); - gzis.close(); - fileOutput.close(); - } + if (csv.exists()) + csv.delete(); + + csv.createNewFile(); + FileInputStream fileInput = new FileInputStream(path); + GZIPInputStream gzis = new GZIPInputStream(fileInput); + FileOutputStream fileOutput = new FileOutputStream(csv); + + byte[] buffer = new byte[1024]; + int length; + while ((length = gzis.read(buffer)) > 0) + fileOutput.write(buffer, 0, length); + + fileInput.close(); + gzis.close(); + fileOutput.close(); + return csv.getAbsolutePath(); } @@ -111,7 +111,6 @@ private String parseCSVFile() throws IOException, TasteException { if(!movies.containsKey(dataLine)) { movies.put(dataLine, moviesCount); - invertedMovies.put(moviesCount,dataLine); writerString = moviesCount + ","; moviesCount++; } diff --git a/src/test/java/nearsoft/academy/bigdata/recommendation/MovieRecommenderTest.java b/src/test/java/nearsoft/academy/bigdata/recommendation/MovieRecommenderTest.java index 0a47849..f4ffa66 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 static void testDataInfo() throws IOException, TasteException { // download movies.txt.gz from // http://snap.stanford.edu/data/web-Movies.html - MovieRecommender recommender = new MovieRecommender("/Users/csuarez/Downloads/movies.txt.gz"); + MovieRecommender recommender = new MovieRecommender("/path/to/movies.txt.gz"); assertEquals(7911684, recommender.getTotalReviews());