我在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等。
希望问题很清楚。
答案 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可能会很有用,这样您仍然可以访问文件名。