我正在尝试将csv复制到找到here的arff指令。我的代码复制如下。结果arff正确打印属性部分。但是,“@ dat”部分下没有任何内容:
代码:
public class CsvToArff {
/**
* takes 2 arguments:
* - CSV input file
* - ARFF output file
*/
public static void main(String[] args) throws Exception {
if (args.length != 2) {
System.out.println("\nUsage: CSV2Arff <input.csv> <output.arff>\n");
System.exit(1);
}
// load CSV
CSVLoader loader = new CSVLoader();
loader.setFieldSeparator(";");
loader.setNominalAttributes("2,5,8,10");
loader.setNoHeaderRowPresent(false);
loader.setSource(new File(args[0]));
loader.getStructure();
Instances data = loader.getDataSet();
// save ARFF
ArffSaver saver = new ArffSaver();
saver.setInstances(data);
saver.setFile(new File(args[1]));
saver.setDestination(new File(args[1]));
saver.writeBatch();
}
}
CSV文件:
PrevPause;PrevPOS;PrevLength;WordPause;WordPOS;WordLength;NextPause;NextPOS;NextLength;Location
625;"JJ";4;156;"NN";4;1234;"FW";1;"OUT"
156;"NN";4;1234;"FW";1;187;"NN";4;"OUT"
1234;"FW";1;187;"NN";4;188;"VBD";3;"OUT"
结果arff:
@relation mwe_pred_debug
@attribute PrevPause numeric
@attribute PrevPOS {JJ,NN,FW}
@attribute PrevLength numeric
@attribute WordPause numeric
@attribute WordPOS {NN,FW}
@attribute WordLength numeric
@attribute NextPause numeric
@attribute NextPOS {FW,NN,VBD}
@attribute NextLength numeric
@attribute Location {OUT}
@data
知道为什么最后一部分是空白的吗?
答案 0 :(得分:1)
似乎setFieldSeparator(String)和setNoHeaderRowPresent(boolean)函数最近已添加到CSVLoader中,并且当前不在当前的稳定版本(3.6)中。也许这可以通过Weka开发团队提出来。
作为替代方案,您可以将半冒号更改为csv中的逗号并处理文档,如上面的教程所示。该示例似乎使用您问题中给出的数据示例和教程源正确转换。
希望这有帮助!