package file; import java.io.BufferedWriter; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.FileWriter; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.util.List; import com.google.common.primitives.Ints; import common.Bookmark; public class BookmarkWriter { public static boolean writeSample(BookmarkReader reader, List<Bookmark> userSample, String filename, List<int[]> catPredictions, boolean realValues) { return doWriteSample(reader, userSample, null, filename, catPredictions, realValues); } public static boolean writeSample(BookmarkReader reader, List<Bookmark> userSample, String path, String filename, List<int[]> catPredictions, boolean realValues) { return doWriteSample(reader, userSample, path, filename, catPredictions, realValues); } private static boolean doWriteSample(BookmarkReader reader, List<Bookmark> userSample, String path, String filename, List<int[]> catPredictions, boolean realValues) { try { String filePath = ""; if (path == null) { filePath = "./data/csv/" + filename + ".txt"; } else { filePath = path + filename; } //FileWriter writer = new FileWriter(new File(filePath)); OutputStreamWriter writer = new OutputStreamWriter(new FileOutputStream(new File(filePath)), "UTF8"); BufferedWriter bw = new BufferedWriter(writer); int userCount = 0; // TODO: check encoding for (Bookmark bookmark : userSample) { String user = (realValues ? reader.getUsers().get(bookmark.getUserID()).replace("\"", "") : Integer.toString(bookmark.getUserID())); String resource = (realValues ? reader.getResources().get(bookmark.getResourceID()).replace("\"", "") : Integer.toString(bookmark.getResourceID())); bw.write("\"" + user + "\";"); bw.write("\"" + resource + "\";"); bw.write("\"" + bookmark.getTimestamp().replace("\"", "") + "\";\""); int i = 0; for (int t : bookmark.getTags()) { String tag = (realValues ? reader.getTags().get(t).replace("\"", "") : Integer.toString(t)); bw.write(tag); if (++i < bookmark.getTags().size()) { bw.write(','); } } bw.write("\";\""); List<Integer> userCats = (catPredictions == null ? bookmark.getCategories() : Ints.asList(catPredictions.get(userCount++))); i = 0; for (int cat : userCats) { //bw.write(URLEncoder.encode((catPredictions == null ? reader.getCategories().get(cat).replace("\"", "") : reader.getTags().get(cat)).replace("\"", ""), "UTF-8")); String catName = (realValues ? reader.getCategories().get(cat).replace("\"", "") : "t" + cat); bw.write(catName); if (++i < userCats.size()) { bw.write(','); } } bw.write("\""); if (bookmark.getRating() != -2) { bw.write(";\"" + (int)bookmark.getRating() + "\""); } else { bw.write(";\"\""); } if (bookmark.getTitle() != null) { bw.write(";\"" + bookmark.getTitle() + "\""); } /*else { bw.write(";\"\""); }*/ bw.write("\n"); } bw.flush(); bw.close(); return true; } catch (IOException e) { e.printStackTrace(); } return false; } }