Как преобразовать текст в экземпляр MOA? - PullRequest
0 голосов
/ 11 июля 2019

Я делаю инкрементное обучение в 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 означает, что я сделал что-то не так.

...