/*
TagRecommender:
A framework to implement and evaluate algorithms for the recommendation
of tags.
Copyright (C) 2013 Dominik Kowald
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as
published by the Free Software Foundation, either version 3 of the
License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package engine;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.List;
import java.util.Map;
import file.BookmarkReader;
public class TagRecommenderEvalEngine implements EngineInterface {
private EngineInterface lmEngine;
private EngineInterface bllEngine;
private EngineInterface threelEngine;
private EngineInterface mpEngine;
//private Random random;
private BufferedWriter bw;
public TagRecommenderEvalEngine() {
this.lmEngine = null;
this.bllEngine = null;
this.threelEngine = null;
this.mpEngine = null;
//this.random = new Random();
this.bw = null;
}
@Override
public void loadFile(String path, String filename) throws Exception {
this.lmEngine = new LanguageModelEngine();
this.lmEngine.loadFile(path, filename);
this.bllEngine = new BaseLevelLearningEngine();
this.bllEngine.loadFile(path, filename);
this.threelEngine = new ThreeLayersCollectiveEngine();
this.threelEngine.loadFile(path, filename);
this.mpEngine = new MostPopularCollectiveEngine();
this.mpEngine.loadFile(path, filename);
try {
String logFile = "";
if (path == null) {
logFile = "./data/tagrec_log.txt";
} else {
logFile = path + "tagrec_log.txt";
}
FileWriter writer = new FileWriter(new File(logFile), true);
this.bw = new BufferedWriter(writer);
} catch (Exception e) {
e.printStackTrace();
}
}
@Override
public synchronized Map<String, Double> getEntitiesWithLikelihood(String user, String resource, List<String> topics, Integer count, Boolean filterOwnEntities, Algorithm algorithm, EntityType type) {
Map<String, Double> returnMap = null;
String algorithmString = null;
if (algorithm == Algorithm.BLLacMPr) {
if (this.bllEngine != null) {
algorithmString = Algorithm.BLLacMPr.name();
returnMap = this.bllEngine.getEntitiesWithLikelihood(user, resource, topics, count, filterOwnEntities, algorithm, type);
}
} else if (algorithm == Algorithm.MPur) {
if (this.lmEngine != null) {
algorithmString = Algorithm.MPur.name();
returnMap = this.lmEngine.getEntitiesWithLikelihood(user, resource, topics, count, filterOwnEntities, algorithm, type);
}
} else if (algorithm == Algorithm.THREELcoll) {
if (topics != null && topics.size() > 0) {
if (this.threelEngine != null) {
algorithmString = Algorithm.THREELcoll.name();
returnMap = this.threelEngine.getEntitiesWithLikelihood(user, resource, topics, count, filterOwnEntities, algorithm, type);
}
} else {
if (this.mpEngine != null) {
algorithmString = Algorithm.THREELcoll.name();
returnMap = this.mpEngine.getEntitiesWithLikelihood(user, resource, topics, count, filterOwnEntities, algorithm, type);
}
}
} else {
if (this.mpEngine != null) {
algorithmString = Algorithm.MP.name();
returnMap = this.mpEngine.getEntitiesWithLikelihood(user, resource, topics, count, filterOwnEntities, algorithm, type);
}
}
/* KnowBrain study
if (algorithm == null || algorithm == Algorithm.THREELcoll || algorithm == Algorithm.THREEL) {
if (this.threelEngine != null) {
returnMap = this.threelEngine.getEntitiesWithLikelihood(user, resource, topics, count, filterOwnEntities, algorithm, type);
if (algorithm == Algorithm.THREEL) {
algorithmString = "3L";
} else {
algorithmString = "3Lcoll";
}
}
} else if (algorithm == Algorithm.BLLcoll || algorithm == Algorithm.BLL) {
if (this.bllEngine != null) {
returnMap = this.bllEngine.getEntitiesWithLikelihood(user, resource, topics, count, filterOwnEntities, algorithm, type);
if (algorithm == Algorithm.BLL) {
algorithmString = "BLL";
} else {
algorithmString = "BLLcoll";
}
}
} else {
if (this.mpEngine != null) {
returnMap = this.mpEngine.getEntitiesWithLikelihood(user, resource, topics, count, filterOwnEntities, algorithm, type);
algorithmString = "MP";
}
}
*/
if (this.bw != null) {
try {
this.bw.write(user + "|" + resource + "|" + topics + "|" + count + "|" + filterOwnEntities + "|" + System.currentTimeMillis() + "|" + algorithmString + "|" + returnMap.keySet() + "\n");
this.bw.flush();
} catch (IOException e) {
e.printStackTrace();
}
}
return returnMap;
}
public static boolean getRandomBoolean() {
return Math.random() < 0.5;
}
}