Weka ArffSaver不写数据

时间:2014-09-29 20:51:00

标签: csv weka arff

我正在尝试将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

知道为什么最后一部分是空白的吗?

1 个答案:

答案 0 :(得分:1)

似乎setFieldSeparator(String)和setNoHeaderRowPresent(boolean)函数最近已添加到CSVLoader中,并且当前不在当前的稳定版本(3.6)中。也许这可以通过Weka开发团队提出来。

作为替代方案,您可以将半冒号更改为csv中的逗号并处理文档,如上面的教程所示。该示例似乎使用您问题中给出的数据示例和教程源正确转换。

希望这有帮助!