Skip to content

Commit 1c8423e

Browse files
committed
bugfixed frequency hybrid
1 parent 186835b commit 1c8423e

File tree

4 files changed

+73
-54
lines changed

4 files changed

+73
-54
lines changed

src/processing/ProcessFrequencyRecency.java

Lines changed: 19 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -16,33 +16,36 @@
1616
*/
1717
public class ProcessFrequencyRecency {
1818

19-
public void ProcessTagAnalytics(HashMap<String, HashMap<Integer, ArrayList<Long>>> userTagTimestampMap) {
20-
19+
private String sampleDir;
20+
21+
public void ProcessTagAnalytics(String sampleDir, HashMap<String, HashMap<Integer, ArrayList<Long>>> userTagTimestampMap) {
22+
this.sampleDir = sampleDir;
23+
2124
// frequency
22-
HashMap<Integer, Integer> tagFrequency = getTagFrequency(userTagTimestampMap);
23-
saveHashMap(tagFrequency, "./tagfrequency");
25+
//HashMap<Integer, Integer> tagFrequency = getTagFrequency(userTagTimestampMap);
26+
//saveHashMap(tagFrequency, "./tagfrequency");
2427
// recency in duration
2528
//HashMap< Integer, Integer> tagRecency = getRecencyInDuration(userTagTimestampMap);
2629

27-
saveHashMap(getRecencyInDuration(userTagTimestampMap, TimeUtil.SECOND), "./tagrecency" + "_" + "Seconds");
28-
saveHashMap(getRecencyInDuration(userTagTimestampMap, TimeUtil.MINUTE), "./tagrecency" + "_" + "MINUTE");
29-
saveHashMap(getRecencyInDuration(userTagTimestampMap, TimeUtil.HOUR), "./tagrecency" + "_" + "HOUR" );
30-
saveHashMap(getRecencyInDuration(userTagTimestampMap, TimeUtil.DAY), "./tagrecency" + "_" + "DAY" );
31-
saveHashMap(getRecencyInDuration(userTagTimestampMap, TimeUtil.FIFTEEN_DAYS), "./tagrecency" + "_" + "FIFTEEN_DAYS");
32-
saveHashMap(getRecencyInDuration(userTagTimestampMap, TimeUtil.MONTH), "./tagrecency" + "_" + "MONTH");
30+
//saveHashMap(getRecencyInDuration(userTagTimestampMap, TimeUtil.SECOND), "./tagrecency" + "_" + "Seconds");
31+
//saveHashMap(getRecencyInDuration(userTagTimestampMap, TimeUtil.MINUTE), "./tagrecency" + "_" + "MINUTE");
32+
saveHashMap(getRecencyInDuration(userTagTimestampMap, TimeUtil.HOUR), "recencyHours" );
33+
//saveHashMap(getRecencyInDuration(userTagTimestampMap, TimeUtil.DAY), "./tagrecency" + "_" + "DAY" );
34+
//saveHashMap(getRecencyInDuration(userTagTimestampMap, TimeUtil.FIFTEEN_DAYS), "./tagrecency" + "_" + "FIFTEEN_DAYS");
35+
//saveHashMap(getRecencyInDuration(userTagTimestampMap, TimeUtil.MONTH), "./tagrecency" + "_" + "MONTH");
3336
// user unique tag count
34-
HashMap< Integer, Integer> uniqueTagCount = getUserUniqueTagCount(userTagTimestampMap);
35-
saveHashMap(uniqueTagCount, "./uniqueTagCount");
37+
//HashMap< Integer, Integer> uniqueTagCount = getUserUniqueTagCount(userTagTimestampMap);
38+
//saveHashMap(uniqueTagCount, "./uniqueTagCount");
3639
// user tag count
37-
HashMap< Integer, Integer> userTagCount = getUserTagCount(userTagTimestampMap);
40+
//HashMap< Integer, Integer> userTagCount = getUserTagCount(userTagTimestampMap);
3841
// tag tag count
39-
HashMap< Integer, Integer> tagTagCount = getTagTagCount(userTagTimestampMap);
42+
// HashMap< Integer, Integer> tagTagCount = getTagTagCount(userTagTimestampMap);
4043
// tag user count
41-
HashMap< Integer, Integer> tagUserCount = getTagUserCount(userTagTimestampMap);
44+
//HashMap< Integer, Integer> tagUserCount = getTagUserCount(userTagTimestampMap);
4245
}
4346

4447
private void saveHashMap(HashMap<Integer, Integer> saveHashMap, String filename){
45-
File file = new File(filename);
48+
File file = new File("./data/metrics/" + this.sampleDir + "/" + filename);
4649
try {
4750
if (!file.exists()){
4851
file.createNewFile();

src/processing/ProcessFrequencyRecencySocial.java

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -13,12 +13,13 @@
1313

1414
public class ProcessFrequencyRecencySocial {
1515

16+
private String sampleDir;
1617

17-
public ProcessFrequencyRecencySocial(HashMap<String, HashMap<Integer, ArrayList<Long>>> userTagTime, HashMap<String, ArrayList<String>> network) {
18+
public ProcessFrequencyRecencySocial(String sampleDir, HashMap<String, HashMap<Integer, ArrayList<Long>>> userTagTime, HashMap<String, ArrayList<String>> network) {
19+
this.sampleDir = sampleDir;
1820

19-
20-
ArrayList<Integer> durationSeconds = new ArrayList<Integer>();
21-
ArrayList<Integer> durationMinutes = new ArrayList<Integer>();
21+
//ArrayList<Integer> durationSeconds = new ArrayList<Integer>();
22+
//ArrayList<Integer> durationMinutes = new ArrayList<Integer>();
2223
ArrayList<Integer> durationHours = new ArrayList<Integer>();
2324

2425
for (String user : userTagTime.keySet())
@@ -36,12 +37,12 @@ public ProcessFrequencyRecencySocial(HashMap<String, HashMap<Integer, ArrayList<
3637
}
3738
}
3839
HashMap<Integer, ArrayList<Long>> allTagTimeMap = getAllTagsHashMap(friendHashMapList);
39-
durationSeconds.addAll(createDurationList(userTagTime.get(user), allTagTimeMap, TimeUtil.SECOND));
40-
durationMinutes.addAll(createDurationList(userTagTime.get(user), allTagTimeMap, TimeUtil.MINUTE));
40+
//durationSeconds.addAll(createDurationList(userTagTime.get(user), allTagTimeMap, TimeUtil.SECOND));
41+
//durationMinutes.addAll(createDurationList(userTagTime.get(user), allTagTimeMap, TimeUtil.MINUTE));
4142
durationHours.addAll(createDurationList(userTagTime.get(user), allTagTimeMap, TimeUtil.HOUR));
4243
}
43-
saveDurationList(durationSeconds, "recencySocialSeconds");
44-
saveDurationList(durationMinutes, "recencySocialMinutes");
44+
//saveDurationList(durationSeconds, "recencySocialSeconds");
45+
//saveDurationList(durationMinutes, "recencySocialMinutes");
4546
saveDurationList(durationHours, "recencySocialHours");
4647
}
4748

@@ -98,7 +99,7 @@ private ArrayList<Integer> createDurationList(HashMap<Integer, ArrayList<Long>>
9899

99100
private void saveDurationList(ArrayList<Integer> durationList, String filename){
100101
Collections.sort(durationList);
101-
File file = new File(filename);
102+
File file = new File("./data/metrics/" + this.sampleDir + "/" + filename);
102103
if (!file.exists()){
103104
try {
104105
file.createNewFile();

src/processing/SocialCalculator.java

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@
3030
*/
3131
public class SocialCalculator {
3232

33+
private String sampleDir;
3334
private String filename;
3435
private BookmarkReader reader;
3536

@@ -42,8 +43,9 @@ public class SocialCalculator {
4243
private List<Map<Integer, Double>> resultMapPersonalFreqAllUsers;
4344

4445

45-
public SocialCalculator(String userTweetFilename, String networkFilename, int trainSize, int testSize) {
46-
this.filename = userTweetFilename;
46+
public SocialCalculator(String sampleDir, String userTweetFilename, String networkFilename, int trainSize, int testSize) {
47+
this.sampleDir = sampleDir;
48+
this.filename = userTweetFilename;
4749
this.trainSize = trainSize;
4850
reader = new BookmarkReader(trainSize, false);
4951
reader.readFile(userTweetFilename);
@@ -147,7 +149,7 @@ private HashMap<String, ArrayList<String>> getNetwork(String filepath, HashMap<S
147149
return network;
148150
}
149151

150-
private Map<Integer, Double> getRankedTagListSocialFrequency(int userID, Long timesString){
152+
private Map<Integer, Double> getRankedTagListSocialFrequency(int userID, Long timesString, boolean sort) {
151153

152154
String user = this.users.get(userID);
153155
List<String> friendList = network.get(user);
@@ -196,9 +198,13 @@ private Map<Integer, Double> getRankedTagListSocialFrequency(int userID, Long ti
196198
}
197199
}
198200

199-
Map<Integer, Double> sortedResultMap = new TreeMap<Integer, Double>(new DoubleMapComparator(tagRank));
200-
sortedResultMap.putAll(tagRank);
201-
return sortedResultMap;
201+
if (sort) {
202+
Map<Integer, Double> sortedResultMap = new TreeMap<Integer, Double>(new DoubleMapComparator(tagRank));
203+
sortedResultMap.putAll(tagRank);
204+
return sortedResultMap;
205+
} else {
206+
return tagRank;
207+
}
202208
}
203209

204210
private Map<Integer, Double> getRankedTagListSocial(int userID, Long timesString, double exponentSocial){
@@ -259,7 +265,7 @@ private Map<Integer, Double> getRankedTagListSocial(int userID, Long timesString
259265

260266
private Map<Integer, Double> getRankedTagListSocialFrequencyHybrid(int userID, Long timeString, double beta){
261267

262-
Map<Integer, Double> resultMapSocialFreq = getRankedTagListSocialFrequency(userID, timeString);
268+
Map<Integer, Double> resultMapSocialFreq = getRankedTagListSocialFrequency(userID, timeString, false);
263269

264270
// get frequency based recommendation score
265271

@@ -341,7 +347,7 @@ private List<Map<Integer, Double>> calculateSocialTagScore(double beta, double e
341347
Bookmark data = reader.getBookmarks().get(i);
342348
Map<Integer, Double> map = new HashMap<Integer, Double>();
343349
if(algorithm.equals("social_freq")){
344-
map = getRankedTagListSocialFrequency(data.getUserID(), data.getTimestampAsLong());
350+
map = getRankedTagListSocialFrequency(data.getUserID(), data.getTimestampAsLong(), true);
345351
}else if(algorithm.equals("social")){
346352
map = getRankedTagListSocial(data.getUserID(), data.getTimestampAsLong(), exponentSocial);
347353
}else if (algorithm.equals("hybrid")) {

src/test/Pipeline.java

Lines changed: 30 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,7 @@ public class Pipeline {
8585
private static String TOPIC_NAME = null;
8686
// placeholder for the used dataset
8787
private final static String DATASET = "twitter";
88-
private final static String SUBDIR = "/";
88+
private final static String SUBDIR = "/general/";
8989

9090
public static void main(String[] args) {
9191
System.out.println("TagRecommender:\n" + "" +
@@ -105,7 +105,10 @@ public static void main(String[] args) {
105105
"-----------------------------------------------------------------------------\n\n");
106106
String dir = DATASET + "_core" + SUBDIR;
107107
String path = dir + DATASET + "_sample";
108-
String networkFileName = "./data/csv/"+ dir + "follow_nw.csv";
108+
String networkFileName = "./data/csv/" + dir + "network.txt";
109+
110+
// Test Social Recommender
111+
//startSocialRecommendation(dir, path, networkFileName);
109112

110113
//BibsonomyProcessor.processUnsortedFile("dc09_core/test_core/", "tas", "dc09_sample_test");
111114
//MovielensProcessor.processFile("000_dataset_dump/tags.dat", "000_dataset_dump/movielens", "000_dataset_dump/ratings.dat");
@@ -129,10 +132,8 @@ public static void main(String[] args) {
129132

130133
// Method Testing -> just uncomment the methods you want to test
131134
// Test the BLL and BLL+MP_r algorithms (= baseline to beat :))
132-
startActCalculator(dir, path, 1, -5, -5, true, CalculationType.NONE, false);
133-
134-
// Test Social Recommender
135-
startSocialRecommendation(dir, path, networkFileName);
135+
//startActCalculator(dir, path, 1, -5, -5, true, CalculationType.NONE, false);
136+
136137

137138
// Test the BLL_AC and BLL_AC+MP_r algorithms (could take a while)
138139
//startActCalculator(dir, path, 1, -5, 9, true, CalculationType.USER_TO_RESOURCE, false);
@@ -187,6 +188,7 @@ public static void main(String[] args) {
187188
System.out.println("Too few arguments!");
188189
return;
189190
}
191+
String subdir = "/";
190192
String op = args[0];
191193
String samplePath = "", sampleDir = "";
192194
int sampleCount = 1;
@@ -206,12 +208,17 @@ public static void main(String[] args) {
206208
sampleDir = "del_core";
207209
} else if (args[1].equals("twitter")){
208210
sampleDir = "twitter_core";
211+
} else if (args[1].equals("twitter_res")){
212+
sampleDir = "twitter_core";
213+
subdir = "/researchers";
214+
} else if (args[1].equals("twitter_gen")){
215+
sampleDir = "twitter_core";
216+
subdir = "/general";
209217
}
210218
else {
211219
System.out.println("Dataset not available");
212220
return;
213221
}
214-
String subdir = "/";
215222
sampleDir += subdir;
216223
samplePath += (sampleDir + "/" + args[2]);
217224

@@ -299,7 +306,7 @@ public static void main(String[] args) {
299306
} else if (op.equals("item_cirtt")) {
300307
startResourceCIRTTCalculator(sampleDir, samplePath, "", sampleCount, 20, Features.ENTITIES, false, true, false, true);
301308
} else if (op.equals("item_sustain")) {
302-
startSustainApproach(dir, path, 2.845, 0.5, 6.396, 0.0936, 0, 0, 20, 0.5);
309+
startSustainApproach(sampleDir, samplePath, 2.845, 0.5, 6.396, 0.0936, 0, 0, 20, 0.5);
303310
} else if (op.equals("tag_all")) {
304311
startAllTagRecommenderApproaches(sampleDir, samplePath, !narrowFolksonomy);
305312
} else if (op.equals("tag_samples")) {
@@ -309,13 +316,14 @@ public static void main(String[] args) {
309316
startSampleTagRecommenderApproaches(sampleDir, samplePath + "4", !narrowFolksonomy);
310317
} else if (op.equals("stats")) {
311318
try { getStatistics(samplePath, false); } catch (Exception e) { e.printStackTrace(); }
312-
} else if(op.equals("social")) {
313-
startSocialRecommendation(dir, path, networkFileName);
314-
analysisSocial(dir, path, networkFileName, "all");
315-
}else {
319+
} else if(op.equals("social_rec")) {
320+
startSocialRecommendation(sampleDir, samplePath, networkFileName);
321+
} else if (op.equals("social_analysis")) {
322+
analysisSocial(sampleDir, samplePath, networkFileName, "all");
323+
}
324+
else {
316325
System.out.println("Unknown operation");
317326
}
318-
319327
}
320328

321329
// Tag Recommenders methods -----------------------------------------------------------------------------
@@ -391,28 +399,29 @@ private static void startActCalculator(String sampleDir, String sampleName, int
391399
}
392400
}
393401

394-
private static void startSocialRecommendation(String sampleDir, String sampleName, String networkFilename){
402+
private static void startSocialRecommendation(String sampleDir, String sampleName, String networkFilename) {
395403
double beta = 0.5;
396404
double exponentSocial = 0.5;
397405
String[] algos = {"social_freq", "social", "hybrid", "hybrid_freq"};
398406
getTrainTestSize(sampleName);
399-
SocialCalculator calculator = new SocialCalculator(sampleName, networkFilename, TRAIN_SIZE, TEST_SIZE);
407+
SocialCalculator calculator = new SocialCalculator(sampleDir, sampleName, networkFilename, TRAIN_SIZE, TEST_SIZE);
400408
for (String algo : algos){
401-
String filename = "social"+ beta + "_" + exponentSocial + "_" + algo;
409+
String filename = "social" + beta + "_" + exponentSocial + "_" + algo;
402410
calculator.predictSample(beta, exponentSocial, algo);
403411
writeMetrics(sampleDir, sampleName, filename, 1, 10, null, null, null);
404412
}
405413
}
406414

407415
private static void analysisSocial(String sampleDir, String sampleName, String networkFilename, String type){
408-
SocialCalculator calculator = new SocialCalculator(sampleName, networkFilename, TRAIN_SIZE, TEST_SIZE);
416+
getTrainTestSize(sampleName);
417+
SocialCalculator calculator = new SocialCalculator(sampleDir, sampleName, networkFilename, TRAIN_SIZE, TEST_SIZE);
409418
if (type.equals("social")){
410-
new ProcessFrequencyRecencySocial(calculator.getUserTagTimes(), calculator.getNetwork());
419+
new ProcessFrequencyRecencySocial(sampleDir, calculator.getUserTagTimes(), calculator.getNetwork());
411420
}else if(type.equals("personal")){
412-
new ProcessFrequencyRecency().ProcessTagAnalytics(calculator.getUserTagTimes());
421+
new ProcessFrequencyRecency().ProcessTagAnalytics(sampleDir, calculator.getUserTagTimes());
413422
}else if(type.equals("all")){
414-
new ProcessFrequencyRecency().ProcessTagAnalytics(calculator.getUserTagTimes());
415-
new ProcessFrequencyRecencySocial(calculator.getUserTagTimes(), calculator.getNetwork());
423+
new ProcessFrequencyRecency().ProcessTagAnalytics(sampleDir, calculator.getUserTagTimes());
424+
new ProcessFrequencyRecencySocial(sampleDir, calculator.getUserTagTimes(), calculator.getNetwork());
416425
}
417426
}
418427

0 commit comments

Comments
 (0)