【问题标题】:Getting filename when using TextDirectoryLoader - weka使用 TextDirectoryLoader 时获取文件名 - weka
【发布时间】:2017-07-20 04:03:28
【问题描述】:

我在 weka 中使用TextDirectoryLoader 作为输入,该目录将训练数据作为文件排列在文件夹中,每个文件夹表示一个类标签。我将 test_example 目录名称作为参数传递。训练部分很好。

例子:

+- text_example
    |
    +- class1
    |  |
    |  + file1.txt
    |  |
    |  + file2.txt
    |  |
    |  ...
    |
    +- class2
    |  |
    |  + another_file1.txt
    |  |
    |  + another_file2.txt
    |  |
    |  ...

上图借自here

为了测试和预测标签,我创建了一个类似的结构。

+- predictor_unknowns
    |
    +- unknown
    |  |
    |  + unknownfile1.txt
    |  |
    |  + unknownfile2.txt
    |  |
    |  ...

我再次将导演 predictor_unknowns 作为参数传递给TextDirectoryLoader,我可以看到预测完成得很好,但我不确定如何打印预测发生的文件名。我需要打印发生预测的 unknownfile1.txt、unknownfile2.txt 等。

希望问题足够清楚。

【问题讨论】:

    标签: machine-learning weka


    【解决方案1】:

    在 weka 中,这些文本文件和类成为一个 Instance,文件名不会保存在 Instance 类中。

    相反,您可以获得已分类文件的文本内容。

    double pred = 0d;
    Instance current = getInstance();           
    pred = classifier.classifyInstance(current);
    System.out.println("\nText: "+current.attribute(0)); // Change index according to your dataset
    System.out.println("Class: "+tempInstances.classAttribute().value((int) pred));
    

    【讨论】:

      【解决方案2】:

      为了使可能有此问题的其他人受益,documentation for the TextDirectoryLoader 解释说您可以将文件名保存为额外属性。

      在命令行中,只需添加 -F 标志。

      在 Java 代码中,可以使用以下行(tdl 是 TextDirectoryLoader 的一个实例):

      tdl.setOutputFilename(true);
      

      只要您不通过任何过滤器运行数据集,每个实例都会有一个名为“文件名”的字符串属性。如果您计划通过过滤器运行数据集,使用FilteredClassifier 可能会很有用,这样您仍然可以访问文件名。

      【讨论】:

        猜你喜欢
        • 2017-10-28
        • 1970-01-01
        • 1970-01-01
        • 2013-11-17
        • 2013-03-02
        • 2017-10-28
        • 2010-10-09
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多