【问题标题】:How can I create an .arff file from .txt?如何从 .t​​xt 创建 .arff 文件?
【发布时间】:2012-06-03 23:16:50
【问题描述】:

有什么简单的方法吗?我不是Java,我是Python新手,所以我需要另一种方式。提前致谢!

【问题讨论】:

标签: weka arff


【解决方案1】:

您可能是指以.txt 结尾的csv 文件吗?如果文件里面的数据是这样的:

1,434,2236,5,569,some,value,other,value
4,347,2351,1,232,different,value,than,those

然后它具有逗号分隔值 (csv),Weka 具有将 csv 文件转换为 arff 的类和函数:http://weka.wikispaces.com/Converting+CSV+to+ARFF 您可以从命令行使用它们,如下所示:

java weka.core.converters.CSVLoader filename.csv > filename.arff

否则,@D3mon-1stVFW 的评论链接到 weka 关于将文本文件(如博客文章、书籍或论文)转换为 arff 格式的优秀文档。 http://weka.wikispaces.com/ARFF+files+from+Text+Collections 也可以从命令行调用,像这样:

java weka.core.converters.TextDirectoryLoader /directory/with/your/text/files > output.arff

【讨论】:

    【解决方案2】:

    缺少 -dir 参数说明符: java weka.core.converters.TextDirectoryLoader -dir /directory/with/your/text/files > output.arff

    【讨论】:

      【解决方案3】:

      此解决方案假定您拥有 .csv 格式的数据 - 请参阅 kaz 的解决方案。

      在版本 3.6.11(我在 Mac 上)中,一种简单的方法是打开资源管理器,然后在“预处理”选项卡中选择“打开文件...”,就像您在想要打开一个 .arff 文件。然后在对话框底部询问文件格式的位置,将其更改为 .csv。您现在可以将 CSV 文件直接加载到 Weka。如果 CSV 文件的第一行是标题行,这些名称将用作属性名称。

      预处理选项卡的右侧是一个“保存...”按钮。您可以点击它并将您的数据保存为 .arff 文件。

      这解释起来有点啰嗦,但执行起来只需要几分钟,而且非常直观。

      【讨论】:

        【解决方案4】:

        打包WekaDemo;

        公共类 Txt2Arff {

         static ArrayList inList=new ArrayList();
            static String colNames[];
            static String colTypes[];
            static String indata[][];
            static ArrayList clsList=new ArrayList();
            static ArrayList disCls=new ArrayList();
        
            static  String res="";
        
         public String genTrain()
            {File fe=new File("input2.txt"); 
        
             FileInputStream fis=new FileInputStream(fe);
             byte bt[]=new byte[fis.available()];
             fis.read(bt);
             fis.close();
             String st=new String(bt);
             String s1[]=st.trim().split("\n");
             String col[]=s1[0].trim().split("\t");
             colNames=col;
             colTypes=s1[1].trim().split("\t");
        
             for(int i=2;i<s1.length;i++)
             {
                 inList.add(s1[i]);
        
             }
             ArrayList at1=new ArrayList();
             for(int i=0;i<inList.size();i++)
             {
                 String g1=inList.get(i).toString();
                 if(!g1.contains("?"))
                 {
                     at1.add(g1);
                     res=res+g1+"\n";
                 }
             }
             indata=new String[at1.size()][colNames.length-1];  // remove cls
        
        
             for(int i=0;i<at1.size();i++)
             {
                 String s2[]=at1.get(i).toString().trim().split("\t");
                 for(int j=0;j<s2.length-1;j++)
                 {
                     indata[i][j]=s2[j].trim();                    
                 }
                 if(!disCls.contains(s2[s2.length-1].trim()))
                     disCls.add(s2[s2.length-1].trim());
                 clsList.add(s2[s2.length-1]);
             }
                String ar="@relation tra\n";
                try
                {
        
         for(int i=0;i<colNames.length-1;i++) // all columName which you have split  
          //and store in Colname
                    {
                  //where yor attitude in nominal or you can say character value
                        if(colTypes[i].equals("con"))
                 ar=ar+"@attribute "+colNames[i].trim().replace(" ","_")+" real\n";
                        else
                        {
                            ArrayList at1=new ArrayList();
                            for(int j=0;j<indata.length;j++) //your all numeric data
                            {
                                if(!at1.contains(indata[j][i].trim()))
                                    at1.add(indata[j][i].trim());
                            }
                            String sg1="{";
                            for(int j=0;j<at1.size();j++)
                            {
                                sg1=sg1+at1.get(j).toString().trim()+",";
                            }
                            sg1=sg1.substring(0,sg1.lastIndexOf(","));
                            sg1=sg1+"}";
        
        
             ar=ar+"@attribute "+colNames[i].trim().replace(" ", "_")+" "+sg1+"\n";
                        }
                    }
        
                    //end of attribute
        
                    // now adding a class Attribute 
        
                    ArrayList dis=new ArrayList();
                    String c1="";
                    for(int i=0;i<clsList.size();i++)
                    {
                        String g=clsList.get(i).toString().trim();
                        if(!dis.contains(g))
                        {
                            dis.add(g);
                            c1=c1+g+",";
                        }
                    }
                    c1=c1.substring(0, c1.lastIndexOf(","));
                    ar=ar+"@attribute class {"+c1+"}\n"; //attribute name 
                    //adding class attribute is done 
                    //now data
                    ar=ar+"@data\n";
        
                    for(int i=0;i<indata.length;i++)
                    {
                        String g1="";
                        for(int j=0;j<indata[0].length;j++)
                        {
                            g1=g1+indata[i][j]+",";
                        }
                        g1=g1+clsList.get(i);
                        ar=ar+g1+"\n";
                    }                   
                }
                catch(Exception e)
                {
                    e.printStackTrace();
                }
                return ar;
            }
        
            public static void main(String[] args) throws IOException {
            // TODO Auto-generated method stub
            Txt2Arff T2A=new Txt2Arff();
        
            String ar1=T2A.genTrain();
        
            File fe1=new File("tr.arff");
            FileOutputStream fos1=new FileOutputStream(fe1);
            fos1.write(ar1.getBytes());
            fos1.close();
        }}
        

        【讨论】:

          猜你喜欢
          • 2021-12-27
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-03-17
          • 1970-01-01
          相关资源
          最近更新 更多