添加评论到ARFF文件

时间:2013-04-18 09:15:20

标签: java comments weka arff

这是我在这个论坛的第一个问题.... 我正在使用WEKA API在java中创建adata-mining应用程序。 我首先进行预处理阶段,当我保存ARFF文件时,我想添加几行(作为注释),指定我对文件所做的预处理任务... 问题是我不知道如何从java WEKA API向ARFF文件添加注释。 要保存文件我使用类似ArffSaver这样......

    try {
        ArffSaver saver = new ArffSaver();
        saver.setInstances(dataPost);
        saver.setFile(arffFile);
        saver.writeBatch();
        return true;
    } catch (IOException ex) {
        Logger.getLogger(Preprocesamiento.class.getName()).log(Level.SEVERE, null, ex);
        return false;
    }
如果有人可以提出一些想法,我会非常感激的... 谢谢!

2 个答案:

答案 0 :(得分:1)

您应该在.arff文件上避免写入注释,甚至在从Java写入时更多。这些文件非常“解析器敏感”。用于创建这些文件的Weka API由于这个特殊原因而受到限制。

即使您可以随时使用符号手动添加评论。这就是说,我不建议您将实例,属性和值写入.arff文件。 ; - )

答案 1 :(得分:0)

我没有理由将注释写入ARFF文件的标头中。 specification清楚地说:

  

以%开头的行是注释。

因此,虽然它在技术上有效,但如果您想使用ArffSaver#setFile方法,则可能会很困难。这个方法在内部完成很多(方便的,但有些随意和未指定)的工作,直到它最终调用

setDestination(new FileOutputStream(m_outputFile));

如果不需要,最简单的选择是直接写入OutputStream,然后可以将其设置为ArffSaver的目的地。这可以用一个小的辅助方法包装,例如,像这样:

static void writeArff(
    Instances instances, 
    List<String> commentLines, 
    OutputStream outputStream) throws IOException
{
    ArffSaver saver = new ArffSaver();
    saver.setInstances(instances);
    if (commentLines != null && !commentLines.isEmpty())
    {
        BufferedWriter bw = new BufferedWriter(
            new OutputStreamWriter(outputStream));
        for (String commentLine : commentLines)
        {
            bw.write("% " + commentLine + "\n");
        }
        bw.write("\n");
        bw.flush();
    }
    saver.setDestination(outputStream);
    saver.writeBatch();
}

当像这样打电话时

 List<String> comments = Arrays.asList("A comment", "Another one");
writeArff(instances, comments, outputStream);

然后给定的注释将被插入ARFF文件的顶部。