package org.seqcode.ml.clustering.vectorcluster;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.util.Collection;
import java.util.LinkedList;
import java.util.Vector;
/**
* ElementParser creates a set of VectorClusterElement objects from a text
* table in a file, with space separators.
*
* @author Timothy Danford
*/
public class ElementParser {
private File inputFile;
private LinkedList<VectorClusterElement> elements;
public ElementParser(File f) throws IOException {
inputFile = f;
parseFile();
}
private void parseFile() throws IOException {
elements = new LinkedList<VectorClusterElement>();
BufferedReader br = new BufferedReader(new FileReader(inputFile));
String line;
int lineCount = 0;
while((line = br.readLine()) != null) {
line = line.trim();
String[] array = line.split("[\\s]+");
Vector<Double> values = new Vector<Double>();
for(int i = 0; i < array.length; i++) {
try {
double v = Double.parseDouble(array[i]);
values.add(v);
} catch(NumberFormatException nfe) {
values.add(null);
}
}
DefaultVectorClusterElement de = new DefaultVectorClusterElement(values);
de.addTag("line", String.valueOf(lineCount));
lineCount+= 1;
if(de.numMissingValues() < de.dimension()) {
System.out.println("--> " + de.toString());
elements.addLast(de);
}
}
br.close();
}
public Collection<VectorClusterElement> getElements() { return elements; }
}