重用Weka代码解析ARFF文件

时间:2010-08-04 11:30:00

标签: java weka arff

有人这样做过吗?有没有关于如何使用此解析器模块的文档?我查看了代码,但我不清楚如何在解析后实际使用数据。

文件 src \ main \ java \ weka \ core \ converters \ ArffLoader.java (我假设是Arff解析发生的地方)有这些说明:

  • 批量使用的典型代码:
  • BufferedReader reader = new BufferedReader(new FileReader(“/ some / where / file.arff”));
  • ArffReader arff = new ArffReader(reader);
  • Instances data = arff.getData();
  • data.setClassIndex(data.numAttributes() - 1);

但是我还能用'数据'做些什么呢?如何访问每一行和每行中的值?

(顺便说一下,我是Java的新手。如果我运行这段代码,我是否可以对数据进行某种内省,看看它提供了什么?这就是我在Python中所做的。)

(我也愿意接受一个更简单的开源Arff解析器的建议,如果存在的话,可以在我的项目中使用。)

6 个答案:

答案 0 :(得分:2)

在我看来,你的答案在于Instances类 - 这是存储数据的地方。

我会找到Instances类的API,通过查找或生成其javadoc,或者只是简单地浏览它的源代码。此类的方法应该允许您操作从ARFF文件加载的数据。

答案 1 :(得分:1)

您可以使用Weka from Python,并获得内省。我已成功使用JRuby的Weka做同样的事情。谷歌“Weka文档”,以找到链接到稳定和开发版本的API的页面。我没有足够的声誉在我的答案中添加第二个链接:)

答案 2 :(得分:1)

weka解析器与其内部数据模型紧密相关 - Instances

ARFF格式难以解析,您可能最好编写一个直接生成所需数据表示形式的自定义解析器。

答案 3 :(得分:1)

获得Instances对象数据后,可以将其用于:

data.get(index) //get a instance
data.enumerateInstances() // Returns an enumeration of all instances in the dataset.

您可以在Instances JavaDoc

查看所有方法

答案 4 :(得分:1)

我使用过这样的东西:

public class Main {
    private static final String ARFF_FILE_PATH = "YOUR_ARFF_FILE_PATH";

    public static void main(String[] args) throws IOException {
        ArffLoader arffLoader = new ArffLoader();

        File datasetFile = new File(ARFF_FILE_PATH);
        arffLoader.setFile(datasetFile);

        Instances dataInstances = arffLoader.getDataSet();

        for(Instance inst : dataInstances){
            System.out.println("Instance:" + inst);
        }
    }
}

答案 5 :(得分:0)

import java.io.*;
import weka.core.Instance;
import weka.core.Instances;
import weka.core.converters.ArffLoader;
import weka.core.converters.ArffLoader.ArffReader;

public class assign3 {
     public static void main(String args[]) throws IOException {

ArffLoader arffloader=new ArffLoader();
File filedata = new File("/home/cse611/Downloads/iris.arff");
arffloader.setFile(filedata);

     Instances data = arffloader.getDataSet();`enter code here`
     for(Instance inst : data){
         System.out.println("Instance:" + inst);
     }
     }
}