Я делаю инкрементное обучение в MOA для текстового приложения.Это требует создания объекта Instance, который представляет текст в числовом виде, например, оценки TF-IDF для каждого слова в словаре с основами.Моя версия MOA - 2019.05.0.
Я искал инструменты для обработки текста в MOA, но не смог их найти.
Я увидел, что у Weka есть класс StringToWordVector, поэтому я решил попробоватьтот.Классы Weka не совпадают с классами MOA, но есть класс WekaToSamoaInstanceConverter, который, как я думал, мог бы создать экземпляр Weka, запустить его через StringToWordVector и преобразовать в экземпляр MOA.Может быть, это неправильный трек, или, может быть, это правильный трек, и я что-то упускаю в своем синтаксисе.
public static Instances convertDirectoryToInstances(String directory) throws Exception {
//Create an object that reads training or test files from a directory.
//In the future, I'll want to add one file at a time. That's not the part I'm worried about at the moment.
TextDirectoryLoader loader = new TextDirectoryLoader();
String[] options = new String[] {"-dir", directory, "-charset", "UTF-8"};
loader.setOptions(options);
loader.getStructure();
//Create Weka Instances that represent unprocessed text.
weka.core.Instances plainTextInstances = loader.getDataSet();
//A StringToWordVector is a Filter that converts text to text vectors.
//I'm not using any bells and whistles for this example, so I expect each Instance to be a set of terms in the document.
StringToWordVector stringToWordVector = new StringToWordVector();
stringToWordVector.setInputFormat(plainTextInstances);
weka.core.Instances wekaWordVectors = Filter.useFilter(plainTextInstances, stringToWordVector);
//A MOA Instance is different from a Weka Instance, so we need to convert them.
WekaToSamoaInstanceConverter converter = new WekaToSamoaInstanceConverter();
//This is what fails.
Instances moaWordVectors = converter.samoaInstances(wekaWordVectors);
return moaWordVectors;
}
wekaWordVectors.size () - это количество файлов в подкаталогах, так что вот чтоЯ ожидаю.
Сбой вызова samoaInstances ().Линия 220 пытается сделать вызов locateIndex (0).Там нет класса в 0, так что возвращает -1.Это -1 используется как индекс массива, поэтому я получаю исключение ArrayIndexOutOfBoundsException.Я не знаю, что означает класс 0, но я знаю, что ArrayIndexOutOfBoundsException означает, что я сделал что-то не так.