Как я могу создать файл .arff из .txt?

Есть ли простой способ сделать это? Я не на Java, и я новичок в Python, поэтому мне понадобятся другие способы. Заранее спасибо!


person user1424341    schedule 29.05.2012    source источник
comment


Ответы (4)


Возможно, вы имеете в виду файл csv, который заканчивается на .txt? Если данные внутри файла выглядят так:

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
person kaz    schedule 30.05.2012

Отсутствует спецификатор аргумента -dir: java weka.core.converters.TextDirectoryLoader -dir /directory/with/your/text/files > output.arff

person sim    schedule 28.10.2013

Это решение предполагает, что у вас есть данные в формате .csv — см. решение kaz.

Один простой способ сделать это в версии 3.6.11 (у меня Mac) — открыть проводник, а затем на вкладке «Предварительная обработка» выбрать «Открыть файл ...», как если бы вы хотели открыть файл .arff. Затем, когда он запрашивает формат файла в нижней части диалогового окна, измените его на .csv. Теперь вы можете загружать файлы CSV прямо в Weka. Если первая строка вашего CSV-файла является строкой заголовка, эти имена будут использоваться в качестве имен атрибутов.

Справа от вкладок «Предварительные процессы» находится кнопка «Сохранить…». Вы можете нажать на нее и сохранить данные в виде файла .arff.

Это немного многословно для объяснения, но выполнение занимает всего несколько минут и очень интуитивно понятно.

person Chris Street    schedule 08.08.2014

пакет 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();
}}
person Ziyad    schedule 15.12.2017