使用TextDirectoryLoader时获取文件名 - weka

时间:2014-11-14 02:47:39

标签: machine-learning weka

我在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的争论通过,我可以看到预测工作正常,但我不知道如何打印出preidiction为的文件名发生。我需要打印发生预测的unknownfile1.txt,unknownfile2.txt等。

希望问题很清楚。

2 个答案:

答案 0 :(得分:0)

在weka中,这些文本文件和类成为实例,文件名不会保存在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));

答案 1 :(得分:0)

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

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

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

2^34

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