使用 TextDirectoryLoader 时获取文件名 - weka



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

例:

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

上面的插图是从这里借来的

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

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

我再次将导向器predictor_unknowns作为参数传递给TextDirectoryLoader,我可以看到预测完成得很好,但我不确定如何打印正在发生预选的文件名。我需要打印未知文件1.txt,未知文件2.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));

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

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

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

tdl.setOutputFilename(true);

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

最新更新