2016-02-16 2 views
1

Я пишу проект C++ и создаю файлы ARFF в коде C++, поэтому мне нужно передать эти файлы в классификаторы WEKA с помощью C++. Я попытался использовать системный вызов, но столкнулся с ошибками. Я собираюсь иногда использовать системный вызов WEKA для получения информации о машинной подготовке. Сначала я хотел бы убедиться, что учебная модель (training.model) является актуальной. Так, в начале main(), я называю:Мне нужно передать эти файлы в классификаторы WEKA с помощью кода C++

system("\"java weka.classifiers.trees.J48 -t ML_data.arff -d training.model\""); 

Как я могу позвонить WEKA классификатор из кода C++?

+0

сообщение об ошибке точно, что вы получите при выполнении этот код или поведение, которое вы наблюдаете, заставляет вас думать, что вы столкнулись с ошибкой. – iksemyonov

+0

Мое предложение разрешить проблему? Мне действительно интересно. – iksemyonov

+0

да, но все же Linux дает мне ошибку Ошибка: не удалось найти или загрузить основной класс weka.classifiers.functions.Logistic –

ответ

2

Я думаю, что ошибка в двойные кавычки:

system("\"java weka.classifiers.trees.J48 -t ML_data.arff -d training.model\""); 
//  ^^                 ^^ 

Этот фрагмент кода вместо этого должен быть следующим:

system("java weka.classifiers.trees.J48 -t ML_data.arff -d training.model"); 

Вы кажетесь использовать \" для того, чтобы передать двойные кавычки в вызов system(), но это чрезмерно и вызывает ошибку. (Синтаксис для избежания двойной кавычки правильный, но вам не нужно передавать дополнительные кавычки в функцию system().)

Вот минимальный тестовый пример, чтобы показать, что происходит в Linux с использованием синтаксиса, который вы использовали:

#include <cstdlib> 

int main(void) 
{ 
     system("\"ls -l\""); 
} 

выход:

sh: ls -l: command not found

с другой стороны, код system("ls -l"); правильно называет ls -l и отображает вывод в консоли.

Edit:

Насколько идет ваше второе сообщение об ошибке:

Error: Could not find or load main class weka.classifiers.functions.Logistic

Это очень распространенная проблема: What does “Could not find or load main class” mean?. Вы должны установить путь к классам, чтобы указать на weka.jar в вашей системе, например, как так (изменить точный путь к тому, в дистрибутиве):

system("java -cp /usr/share/java/weka.jar weka.classifiers.trees.J48 -t ML_data.arff -d training.model"); 

или в командной строке (обратите внимание на использование export команда здесь)

export CLASSPATH=/usr/share/java/weka.jar:$CLASSPATH

./name_of_your_cpp_executable_file

или положить CLASSPATH в вашем ~/.bashrc:

CLASSPATH=/usr/share/java/weka.jar:$CLASSPATH

export CLASSPATH