2014-09-29 44 views
1

我試圖複製csv到arff指令here。我的代碼複製到下面。所產生的arff正確地打印屬性部分。然而,沒有什麼了 「@data」 部分:Weka ArffSaver沒有寫數據

代碼:

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

看來,setFieldSeparator(String)和setNoHeaderRowPresent(boolean)函數最近已被添加到CSVLoader中,並且當前不在當前的穩定版本(3.6)中。也許這是Weka開發團隊可以提出的。

作爲一種替代方法,您可以在csv中將分號更改爲逗號,並處理文檔,如上面的教程中所示。該示例似乎可以正確使用您的問題中給出的數據示例和教程源進行轉換。

希望這會有所幫助!

+0

謝謝!你能解釋爲什麼,如果這些方法可以從我的weka.jar訪問,它們不可用? – 2014-09-30 11:48:35

+0

它們可用,但不在當前的穩定版本中。我僅僅指出由於這些更改可能存在未記錄的問題,但我試圖轉換您的數據,並且通過了很好的處理。至少這可以作爲一個短期的解決方案,但你可能會提出與Weka開發團隊的問題。 – 2014-09-30 11:53:16

+0

明白了。謝謝。它對我使用逗號很有幫助,並且擺脫了其他方法。再次感謝你。 – 2014-09-30 19:41:50