Machine learning 使用TextDirectoryLoader-weka时获取文件名

Machine learning 使用TextDirectoryLoader-weka时获取文件名,machine-learning,weka,Machine Learning,Weka,我使用的是weka中的TextDirectoryLoader,它接收一个目录作为输入,该目录将培训数据作为文件排列在文件夹中,每个文件夹都表示一个类标签。我将test_示例目录名作为参数传递。训练部分很好 例如: +- text_example | +- class1 | | | + file1.txt | | | + file2.txt | | | ... | +- class2 | |

我使用的是weka中的TextDirectoryLoader,它接收一个目录作为输入,该目录将培训数据作为文件排列在文件夹中,每个文件夹都表示一个类标签。我将test_示例目录名作为参数传递。训练部分很好

例如:

+- text_example
    |
    +- class1
    |  |
    |  + file1.txt
    |  |
    |  + file2.txt
    |  |
    |  ...
    |
    +- class2
    |  |
    |  + another_file1.txt
    |  |
    |  + another_file2.txt
    |  |
    |  ...
上面的插图借鉴了

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

+- predictor_unknowns
    |
    +- unknown
    |  |
    |  + unknownfile1.txt
    |  |
    |  + unknownfile2.txt
    |  |
    |  ...
我再次将director predictor_unknowns作为一个参数传递给TextDirectoryLoader,我可以看到预测工作做得很好,但我不确定如何打印正在进行预测的文件名。我需要打印unknownfile1.txt、unknownfile2.txt等正在进行预测的文件


希望问题足够清楚。

在weka中,这些文本文件和类成为一个实例,文件名不保存在实例类中

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

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));

为了使可能有此问题的其他人受益,说明可以将文件名另存为一个额外属性

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

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

tdl.setOutputFilename(true);
只要不通过任何过滤器运行数据集,每个实例都将有一个名为filename的字符串属性。如果您计划通过过滤器运行数据集,则可能需要使用,以便您仍然可以访问文件名