Как преобразовать текстовые файлы в формат .arff (weka)

Пожалуйста, посоветуйте мне, как преобразовать текстовые файлы в формат .arff (weka), потому что я хочу выполнить кластеризацию данных для 1000 текстовых файлов.

С уважением


person Dheya Majid    schedule 27.12.2012    source источник
comment
См. также: stackoverflow.com/questions/13915683/ Имейте в виду, что Weka хороша только в классификации, ее возможности кластеризации практически отсутствуют.   -  person Has QUIT--Anony-Mousse    schedule 28.12.2012


Ответы (2)


В WEKA реализовано несколько конвертеров, просто найдите правильный формат или внесите небольшие изменения в свои данные (используя awk, sed...).

Вот страницы API, связанные с этой темой: http://weka.sourceforge.net/doc.stable/weka/core/converters/package-summary.html

Например, вот как преобразовать CSV в ARFF:

java weka.core.converters.CSVLoader filename.csv > filename.arff
person arutaku    schedule 15.01.2013

Вот код, который вы можете использовать

package text.Classification;
import java.io.*;
import weka.core.*;
public class TextDirectoryToArff {

public Instances createDataset(String directoryPath) throws Exception {
FastVector atts;
FastVector attVals;
atts = new FastVector();
atts.addElement(new Attribute("contents", (FastVector) null));
String[] s = { "class1", "class2", "class3" };
attVals = new FastVector();
for (String p : s)
    attVals.addElement(p);
atts.addElement(new Attribute("class", attVals));
Instances data = new Instances("MyRelation", atts, 0);
System.out.println(data);

InputStreamReader is = null;
File dir = new File(directoryPath);
String[] files = dir.list();
for (int i = 0; i < files.length; i++) {
    if (files[i].endsWith(".txt")) {
    double[] newInst = new double[2];
    File txt = new File(directoryPath + File.separator + files[i]);

    is = new InputStreamReader(new FileInputStream(txt));
    StringBuffer txtStr = new StringBuffer();

    int c;
    while ((c = is.read()) != -1) {
        txtStr.append((char) c);
    }
    newInst[0] = data.attribute(0).addStringValue(txtStr.toString());
    int j=i%(s.length-1);
    newInst[1] = attVals.indexOf(s[j]);
    data.add(new Instance(1.0, newInst));

    }
}
return data;
}



public static void main(String[] args) {

TextDirectoryToArff tdta = new TextDirectoryToArff();
try {
    Instances dataset = tdta.createDataset("/home/asadul/Desktop/Downloads/text_example/class5");
    PrintWriter fileWriter = new PrintWriter("/home/asadul/Desktop/Downloads/text_example/abc.arff", "UTF-8");
    fileWriter.println(dataset);
    fileWriter.close();
} catch (Exception e) {
    System.err.println(e.getMessage());
    e.printStackTrace();
}

}

}

person Asad    schedule 03.09.2015