package edu.illinois.lis.utils;
import java.io.File;
import java.io.FileReader;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.regex.Pattern;
import org.apache.commons.io.IOUtils;
public class Qrels {
public static final Pattern SPACE_PATTERN = Pattern.compile(" ", Pattern.DOTALL);
private static final int QUERY_COLUMN = 0;
private static final int DOCNO_COLUMN = 2;
private static final int REL_COLUMN = 3;
private Map<String,Set<String>> rel;
private int minRel = 1;
public Qrels(String pathToQrelsFile) {
try {
rel = new HashMap<String,Set<String>>();
List<String> lines = IOUtils.readLines(new FileReader(new File(pathToQrelsFile)));
Iterator<String> linesIt = lines.iterator();
while(linesIt.hasNext()) {
String[] toks = SPACE_PATTERN.split(linesIt.next());
if(toks==null || toks.length != 4) {
System.err.println("bad qrels line");
continue;
}
String query = toks[QUERY_COLUMN];
String docno = toks[DOCNO_COLUMN];
int r = Integer.parseInt(toks[REL_COLUMN]);
if(r >= minRel) {
Set<String> relDocs = null;
if(!rel.containsKey(query)) {
relDocs = new HashSet<String>();
} else {
relDocs = rel.get(query);
}
relDocs.add(docno);
rel.put(query, relDocs);
} else {
}
}
} catch (Exception e) {
System.err.println("died trying to read qrel file: " + pathToQrelsFile);
System.exit(-1);
}
}
public boolean isRel(String query, String docno) {
if(!rel.containsKey(query)) {
System.err.println("no relevant documents found for query " + query);
return false;
}
return rel.get(query).contains(docno);
}
public Set<String> getRelDocs(String query) {
if(!rel.containsKey(query)) {
System.err.println("no relevant documents found for query " + query);
return null;
}
return rel.get(query);
}
public double numRel(String query) {
if(!rel.containsKey(query)) {
System.err.println("no relevant documents found for query " + query);
return 0.0;
}
return (double)rel.get(query).size();
}
}