package focusedCrawler.link.frontier.selector;
import java.util.ArrayList;
import java.util.List;
import focusedCrawler.link.frontier.LinkRelevance;
public class NonRandomLinkSelector implements LinkSelector {
private int[] classLimits = new int[] { 500, 1000, 5000 };
private int[] classCount = new int[classLimits.length];
private int numberOfLinks;
private List<LinkRelevance> links;
private int count;
@Override
public void startSelection(int numberOfLinks) {
this.links = new ArrayList<LinkRelevance>();
this.numberOfLinks = numberOfLinks;
this.count = 0;
}
@Override
public void evaluateLink(LinkRelevance linkRelevance) {
if(links.size() >= numberOfLinks) {
return;
}
int relevance = (int) linkRelevance.getRelevance();
if (relevance > 0) {
int index = relevance / 100;
if (classCount[index] < classLimits[index]) {
if (relevance == 299 || count % 5 == 0) {
links.add(linkRelevance);
classCount[index]++;
}
}
}
count++;
}
@Override
public List<LinkRelevance> getSelectedLinks() {
List<LinkRelevance> selectedLinks = links;
this.links = null; // clean-up reference
return selectedLinks;
}
}