Я нашел его очень трудно построил читатель из-за отсутствием примеров и очень неоднозначной Javadoc. Итак, вот небольшой фрагмент кода, который я написал, чтобы прочитать отношение отношения числовых атрибутов, которые были проверены и работают!
BufferedReader reader = new BufferedReader(new FileReader(new File(path)));
ArffReader arff = new ArffReader(reader, 1000);
Instances data = arff.getStructure();
data.setClassIndex(0);
Instance inst;
while ((inst = arff.readInstance(data)) != null) {
// the first attribute is ignored because it is the index
for(int i = 1 ; i < inst.numAttributes() ; i++) {
switch(inst.attribute(index).type()) {
case Attribute.NUMERIC :
System.out.println(inst.value(index));
case Attribute.STRING :
System.out.println(inst.stringValue(index));
case Attribute.RELATIONAL :
// test if we have an imbrication of two relations or not
if (inst.attribute(index).relation().numAttributes() > 0 &&
inst.attribute(index).relation().attribute(0).isRelationValued()) {
inst.attribute(index).relation().attribute(0).isRelationValued()) {
// case of an array of int arrays
double[][] seq = new double[inst.attribute(index).relation().numAttributes()][];
for (int i = 0 ; i < inst.attribute(index).relation().numAttributes() ; i++) {
Instances instances = inst.relationalValue(index);
seq[i] = new double[instances.attribute(0).relation().numAttributes()];
Instance q = instances.instance(0).relationalValue(i).get(0);
for(int j = 0 ; j < instances.attribute(0).relation().numAttributes() ; j++) {
seq[i][j] = q.value(j);
}
}
System.out.println(seq);
} else {
// case wit only an arry of int
double[] seq = new double[inst.attribute(index).relation().numAttributes()];
for (int i = 0 ; i < inst.attribute(index).relation().numAttributes() ; i++) {
seq[i] = inst.value(i);
}
System.out.println(seq);
}
}
}
System.out.println("index is : "+((int) inst.value(0)));
}
Вот как выглядят данные, как, каждый элемент состоят из индекса, и пара численных триплетов:
@relation 'name of relation'
@attribute index numeric
@attribute attr1 relational
@attribute attr1.0 relational
@attribute attr1.0.0 numeric
@attribute attr1.0.1 numeric
@attribute attr1.0.2 numeric
@end attr1.0
@attribute attr1.1 relational
@attribute attr1.1.0 numeric
@attribute attr1.1.1 numeric
@attribute attr1.1.2 numeric
@end attr1.1
@end attr1
@data
0,'\'23,25,48\',\'12,0,21\''
115260,'\'34,44,72\',\'15,8,32\''
230520,'\'175,247,244\',\'107,185,239\''
345780,'\'396,269,218\',\'414,276,228\''
461040,'\'197,38,42\',\'227,40,43\''
Надеется, что это может помочь кому-то
ли тестированию кода? –
Да, но это только в моем конкретном случае, это не общий подход. Именно здесь приводится пример того, как читать объект arff. Это может не справиться с некоторыми конкретными случаями. – BaptisteL