1000 txt ファイルのデータ クラスタリングを行いたいので、テキスト ファイルを .arff 形式 (weka) に変換する方法を教えてください。
よろしく
1000 txt ファイルのデータ クラスタリングを行いたいので、テキスト ファイルを .arff 形式 (weka) に変換する方法を教えてください。
よろしく
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
使用できるコードは次のとおりです
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();
}
}
}