【发布时间】:2012-06-03 23:16:50
【问题描述】:
有什么简单的方法吗?我不是Java,我是Python新手,所以我需要另一种方式。提前致谢!
【问题讨论】:
有什么简单的方法吗?我不是Java,我是Python新手,所以我需要另一种方式。提前致谢!
【问题讨论】:
您可能是指以.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
【讨论】:
缺少 -dir 参数说明符:
java weka.core.converters.TextDirectoryLoader -dir /directory/with/your/text/files > output.arff
【讨论】:
此解决方案假定您拥有 .csv 格式的数据 - 请参阅 kaz 的解决方案。
在版本 3.6.11(我在 Mac 上)中,一种简单的方法是打开资源管理器,然后在“预处理”选项卡中选择“打开文件...”,就像您在想要打开一个 .arff 文件。然后在对话框底部询问文件格式的位置,将其更改为 .csv。您现在可以将 CSV 文件直接加载到 Weka。如果 CSV 文件的第一行是标题行,这些名称将用作属性名称。
预处理选项卡的右侧是一个“保存...”按钮。您可以点击它并将您的数据保存为 .arff 文件。
这解释起来有点啰嗦,但执行起来只需要几分钟,而且非常直观。
【讨论】:
打包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();
}}
【讨论】: