package focusedCrawler.link.classifier;
import java.nio.file.Paths;
import focusedCrawler.link.classifier.builder.LinkNeighborhoodWrapper;
import focusedCrawler.util.string.StopList;
import focusedCrawler.util.string.StopListFile;
import weka.classifiers.Classifier;
import weka.core.Instances;
public class LinkClassifierFactory {
private static StopList stoplist = StopListFile.DEFAULT;
public static void setDefaultStoplist(StopList stoplist) {
LinkClassifierFactory.stoplist = stoplist;
}
public static LinkClassifier create(String modelPath, String type) {
String featureFilePath = Paths.get(modelPath, "linkclassifier.features").toString();
String modelFilePath = Paths.get(modelPath, "linkclassifier.model").toString();
LinkClassifier linkClassifier = null;
if (type.indexOf("LinkClassifierBreadthSearch") != -1) {
linkClassifier = new LinkClassifierBreadthSearch();
}
if (type.indexOf("LinkClassifierBaseline") != -1) {
linkClassifier = new LinkClassifierBaseline();
}
if (type.indexOf("LinkClassifierHub") != -1) {
linkClassifier = new LinkClassifierHub();
}
if (type.indexOf("LinkClassifierAuthority") != -1) {
linkClassifier = new LinkClassifierAuthority();
}
if (type.indexOf("LinkClassifierImpl") != -1) {
LNClassifier lnClassifier = LNClassifier.create(featureFilePath, modelFilePath, stoplist);
linkClassifier = new LinkClassifierImpl(lnClassifier);
}
if (type.indexOf("MaxDepthLinkClassifier") != -1) {
linkClassifier = new MaxDepthLinkClassifier(1);
}
return linkClassifier;
}
public static LinkClassifier createLinkClassifierImpl(String[] attributes, String[] classValues,
Classifier classifier, String className,
int levels) {
LinkNeighborhoodWrapper wrapper = new LinkNeighborhoodWrapper(attributes, stoplist);
weka.core.FastVector vectorAtt = new weka.core.FastVector();
for (int i = 0; i < attributes.length; i++) {
vectorAtt.addElement(new weka.core.Attribute(attributes[i]));
}
weka.core.FastVector classAtt = new weka.core.FastVector();
for (int i = 0; i < classValues.length; i++) {
classAtt.addElement(classValues[i]);
}
vectorAtt.addElement(new weka.core.Attribute("class", classAtt));
Instances insts = new Instances("link_classification", vectorAtt, 1);
insts.setClassIndex(attributes.length);
LinkClassifier linkClassifier = null;
if (className.indexOf("LinkClassifierImpl") != -1) {
LNClassifier lnClassifier = new LNClassifier(classifier, insts, wrapper, attributes);
linkClassifier = new LinkClassifierImpl(lnClassifier);
}
if (className.indexOf("LinkClassifierAuthority") != -1) {
linkClassifier = new LinkClassifierAuthority(classifier, insts, wrapper, attributes);
}
if (className.indexOf("LinkClassifierHub") != -1) {
linkClassifier = new LinkClassifierHub(classifier, insts, wrapper, attributes);
}
return linkClassifier;
}
}