Java和Weka:创建字符串属性

Java和Weka:创建字符串属性,java,string,weka,arff,Java,String,Weka,Arff,我正在尝试创建一个Java程序,用于将文本文件转换为Weka的ARFF文件。不知何故,“我的名字”属性设置为数字,但它应该设置为字符串。我什么都试过了,我试过修理 attr.add(new Attribute("name")); 到 但当我运行它时,它会将名称打印为数字(在第2列) 我做错了什么 import java.util.ArrayList; import java.io.BufferedReader; import java.io.FileReader; import java.io

我正在尝试创建一个Java程序,用于将文本文件转换为Weka的ARFF文件。不知何故,“我的名字”属性设置为数字,但它应该设置为字符串。我什么都试过了,我试过修理

attr.add(new Attribute("name"));

但当我运行它时,它会将名称打印为数字(在第2列)

我做错了什么

import java.util.ArrayList;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.io.*;
import weka.core.Attribute;
import weka.core.DenseInstance;
import weka.core.Instance;
import java.util.*;
import weka.core.Instances;
import weka.core.converters.ArffSaver; 

public class WekaCreateARFF {

    private static final String FILENAME = "Some File";
    public static void main(String[] args) throws IOException {
        ArrayList<String> input = new ArrayList<String>();
        ArrayList<Attribute> attr = new ArrayList<Attribute>();
        Instances dataset;
        double [] values;
        BufferedReader br = null;
        FileReader fr = null;
        String date = null;
        double id;
        String n = null;

        Instance inst = new DenseInstance(5); 

        List nominal_state = new ArrayList(5);
        nominal_state.add("CA");
        nominal_state.add("NC");
        nominal_state.add("TX");
        nominal_state.add("SC");
        nominal_state.add("NY");

        List nominal_party = new ArrayList(2);
        nominal_party.add("republican");
    nominal_party.add("democrat");

    attr.add(new Attribute("id"));
    attr.add(new Attribute("name",true));
    attr.add(new Attribute("political party", nominal_party));
    attr.add(new Attribute("state", nominal_state));
    attr.add(new Attribute("birth date", date));



    try {

        fr = new FileReader(FILENAME);
        br = new BufferedReader(fr);

        String entry;

        dataset = new Instances("SimpleARFF",attr,0);
        values = new double[dataset.numAttributes()];
        while ((entry = br.readLine()) != null) {

        //System.out.println(entry);
            input.add(entry);
            for (int i = 0; i<5; i++ ) {
                String[] parts = entry.split(",");
                String part1 = parts[0];
                String name = parts[1];                 
                id = Double.parseDouble(part1);



                inst.setValue(attr.get(0), id);
                                    inst.setValue(attr.get(1), name);


            }
            System.out.println(inst);

            dataset.add(new DenseInstance(1.0, values));
        }


        //System.out.println(dataset);
        //ArffSaver arff = new ArffSaver();
        //arff.setInstances(dataset);
        //arff.setFile(new File("Simple.arff"));
        //arff.writeBatch();


    } catch (IOException e) {

        e.printStackTrace();

    } finally {

        try {

            if (br != null)
                br.close();

            if (fr != null)
                fr.close();

        } catch (IOException ex) {

            ex.printStackTrace();
        }
    }

}
import java.util.ArrayList;
导入java.io.BufferedReader;
导入java.io.FileReader;
导入java.io.IOException;
导入java.io.*;
导入weka.core.Attribute;
导入weka.core.DenseInstance;
导入weka.core.Instance;
导入java.util.*;
导入weka.core.Instances;
导入weka.core.converters.ArffSaver;
公共类WekaCreateARFF{
私有静态最终字符串FILENAME=“Some File”;
公共静态void main(字符串[]args)引发IOException{
ArrayList输入=新的ArrayList();
ArrayList attr=新的ArrayList();
实例数据集;
双[]值;
BufferedReader br=null;
FileReader fr=null;
字符串日期=空;
双id;
字符串n=null;
实例inst=新的密度实例(5);
列表标称状态=新阵列列表(5);
名义状态。添加(“CA”);
名义状态添加(“NC”);
名义状态添加(“TX”);
名义状态添加(“SC”);
名义州。添加(“纽约”);
列表方=新阵列列表(2);
添加(“共和党”);
加上(“民主党”);
属性添加(新属性(“id”);
attr.add(新属性(“name”,true));
附加属性(新属性(“政党”,名义上的政党));
属性添加(新属性(“状态”,名义状态));
属性添加(新属性(“出生日期”,日期));
试一试{
fr=新文件读取器(文件名);
br=新的缓冲读取器(fr);
字符串输入;
数据集=新实例(“SimpleRaff”,attr,0);
values=new double[dataset.numAttributes()];
而((entry=br.readLine())!=null){
//系统输出打印项次(输入);
输入。添加(条目);

对于(int i=0;i您可能需要此构造函数:

也就是说,您实际上必须添加一个布尔标志来告诉Weka您想要的是
字符串
属性,而不是数字属性(默认值):


应该给你一个
字符串
-属性。

当我尝试使用attr.add(new attribute(“name”,true));我得到一个巨大的错误它能有多大…你能说得更具体一点吗?javadoc非常清楚地说明这是一个构造函数,它构造字符串属性。线程“main”中的异常java.lang.IndexOutOfBoundsException:java.base/jdk.internal.util.Premissions.outOfBounds(未知源)java.base/jdk.internal.util.Premissions.OutOfBoundsScheckIndex(未知源)java.base/jdk.internal.util.Premissions.checkIndex(未知源)java.base/java.util.Objects.checkIndex中长度为0的索引0超出范围(未知源代码)在java.base/java.util.ArrayList.get(未知源代码)在weka.core.Attribute.value(Attribute.java:778)在weka.core.AbstractInstance.StringValues这似乎不适合评论。我想最好是更新你的问题,并将新发现包含在其中。必须有“编辑”问题下面的按钮。我做了,有点乱。你是什么意思?这是错误的来源吗?好的,但那可能是另一个问题,与创建字符串属性无关。如果这个问题解决了,请将其标记为。
1,0,?,?,?
1000,1,?,?,?
1002,2,?,?,?
2,3,?,?,?
3000,4,?,?,?
import java.util.ArrayList;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.io.*;
import weka.core.Attribute;
import weka.core.DenseInstance;
import weka.core.Instance;
import java.util.*;
import weka.core.Instances;
import weka.core.converters.ArffSaver; 

public class WekaCreateARFF {

    private static final String FILENAME = "Some File";
    public static void main(String[] args) throws IOException {
        ArrayList<String> input = new ArrayList<String>();
        ArrayList<Attribute> attr = new ArrayList<Attribute>();
        Instances dataset;
        double [] values;
        BufferedReader br = null;
        FileReader fr = null;
        String date = null;
        double id;
        String n = null;

        Instance inst = new DenseInstance(5); 

        List nominal_state = new ArrayList(5);
        nominal_state.add("CA");
        nominal_state.add("NC");
        nominal_state.add("TX");
        nominal_state.add("SC");
        nominal_state.add("NY");

        List nominal_party = new ArrayList(2);
        nominal_party.add("republican");
    nominal_party.add("democrat");

    attr.add(new Attribute("id"));
    attr.add(new Attribute("name",true));
    attr.add(new Attribute("political party", nominal_party));
    attr.add(new Attribute("state", nominal_state));
    attr.add(new Attribute("birth date", date));



    try {

        fr = new FileReader(FILENAME);
        br = new BufferedReader(fr);

        String entry;

        dataset = new Instances("SimpleARFF",attr,0);
        values = new double[dataset.numAttributes()];
        while ((entry = br.readLine()) != null) {

        //System.out.println(entry);
            input.add(entry);
            for (int i = 0; i<5; i++ ) {
                String[] parts = entry.split(",");
                String part1 = parts[0];
                String name = parts[1];                 
                id = Double.parseDouble(part1);



                inst.setValue(attr.get(0), id);
                                    inst.setValue(attr.get(1), name);


            }
            System.out.println(inst);

            dataset.add(new DenseInstance(1.0, values));
        }


        //System.out.println(dataset);
        //ArffSaver arff = new ArffSaver();
        //arff.setInstances(dataset);
        //arff.setFile(new File("Simple.arff"));
        //arff.writeBatch();


    } catch (IOException e) {

        e.printStackTrace();

    } finally {

        try {

            if (br != null)
                br.close();

            if (fr != null)
                fr.close();

        } catch (IOException ex) {

            ex.printStackTrace();
        }
    }

}
new Attribute("blah", true)