@Override
public Pair<SparseFloatVector, LabelList> parseLineInternal(String line) {
List<String> entries = tokenize(line);
Map<Integer, Float> values = new TreeMap<Integer, Float>();
LabelList labels = new LabelList();
String curterm = null;
for(int i = 0; i < entries.size(); i++) {
if(curterm == null) {
curterm = entries.get(i);
}
else {
try {
Float attribute = Float.valueOf(entries.get(i));
Integer curdim = keymap.get(curterm);
if(curdim == null) {
curdim = maxdim + 1;
keymap.put(curterm, curdim);
maxdim += 1;
}
values.put(curdim, attribute);
curterm = null;
}
catch(NumberFormatException e) {
if(curterm != null) {
labels.add(curterm);
}
curterm = entries.get(i);
}
}
}
if(curterm != null) {
labels.add(curterm);
}
return new Pair<SparseFloatVector, LabelList>(new SparseFloatVector(values, maxdim), labels);
}