2014-11-14 2 views
0

Я использую TextDirectoryLoader в weka, который берет в качестве входных данных каталог, который имеет данные обучения как файлы, расположенные в папках, и каждая папка указывает метку класса. Я передаю имя каталога test_example в качестве аргумента. Учебная часть в порядке.Получение имени файла при использовании TextDirectoryLoader - weka

Пример:

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

выше иллюстрации заимствованы из here

Для тестирования и прогнозирующих этикеток, создать подобную структуру.

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

я снова передать режиссеру predictor_unknowns как arguement к TextDirectoryLoader и я могу видеть предсказани сделано хорошо, но я не уверен, как напечатать имя файла, для которого preidiction происходит. Мне нужно распечатать файл unknownfile1.txt, unknownfile2.txt и т. Д., Для которого происходит предсказание.

Надеюсь, что вопрос достаточно ясный.

ответ

0

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

В интересах приносить пользу другим, которые могут иметь этот вопрос, documentation for the TextDirectoryLoader объясняет, что вы можете сохранить имя файла в качестве дополнительного атрибута.

В командной строке просто добавьте флаг -F.

В Java коде, вы можете использовать следующую строку (TDL является экземпляром TextDirectoryLoader):

tdl.setOutputFilename(true); 

До тех пор, пока вы не запустите набор данных с помощью каких-либо фильтров, каждый экземпляр будет иметь строковый атрибут называемое «имя файла». Если вы планируете запускать набор данных через фильтры, может оказаться полезным использовать FilteredClassifier, чтобы вы могли получить доступ к имени файла.

Смежные вопросы