代码之家  ›  专栏  ›  技术社区  ›  Greg

重用WEKA代码解析ARFF文件

  •  0
  • Greg  · 技术社区  · 15 年前

    有人这样做吗?有关于如何使用这个解析器模块的文档吗?我已经浏览了代码,但在分析数据之后,我不清楚如何实际使用它。

    文件 SRC\Mava\java\Wak\Calp\Actudio\AfFultule.java (我假设ARFF解析发生在这里)有以下指令:

    • 批量使用的典型代码:
    • bufferedreader reader=new bufferedreader(new file reader(“/some/where/file.arff”));
    • arff reader arff=新的arff reader(读卡器);
    • 实例数据=arff.getdata();
    • data.setClassIndex(data.numAttributes()-1);

    但是我还能用“数据”做什么呢?如何访问每一行以及每一行中的值?

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

    (如果存在一个更简单的开放源代码arff解析器,我也愿意接受在我的项目中使用它的建议。)

    6 回复  |  直到 10 年前
        1
  •  2
  •   bguiz    15 年前

    在我看来,你的答案在于 Instances 类-存储数据的位置。

    我可以通过定位或生成实例类的javadoc,或者简单地阅读其源代码来找到实例类的API。这个类的方法应该允许您操作已经从arff文件加载的数据。

        2
  •  1
  •   michaeltwofish    15 年前

    你可以使用 Weka from Python 然后反省一下。我已经成功地使用了JRuby的WEKA来做同样的事情。谷歌“weka文档”找到链接到API的稳定和开发版本的页面。我没有足够的声誉在我的答案中添加第二个链接:)

        3
  •  1
  •   Has QUIT--Anony-Mousse    13 年前

    WEKA解析器与其内部数据模型紧密相连。- Instances .

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

        4
  •  1
  •   marmundo    12 年前

    获得实例对象数据后,可以使用它:

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

    您可以在以下位置查看所有方法: Instances JavaDoc

        5
  •  1
  •   tbarabasz    11 年前

    我用过这样的东西:

    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);
            }
        }
    }
    
        6
  •  0
  •   Amol Wale    10 年前
    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);
         }
         }
    }