Я пытаюсь сделать классификатор SMS SPAM с помощью библиотеки WEKA. У меня есть файл CSV с заголовками «label» и «text». Когда я использую этот код, он создает файл ARFF с двумя атрибутами:Как изменить тип атрибута на String (WEKA - CSV на ARFF)
@attribute label {ham,spam}
@attribute text {'Go until jurong point','Ok lar...', etc.}
В настоящее время, кажется, что атрибут форматирование текста в качестве номинального атрибута с текстом каждого сообщения в качестве значения. Но мне нужно, чтобы текстовый атрибут был атрибутом String, а не списком всего текста из всех экземпляров. Наличие текстового атрибута в виде строки позволит мне использовать фильтр StringToWordVector для обучения классификатора.
// load CSV
CSVLoader loader = new CSVLoader();
loader.setSource(new File(args[0]));
Instances data = loader.getDataSet();
// save ARFF
ArffSaver saver = new ArffSaver();
saver.setInstances(data);
saver.setFile(new File(args[1]));
saver.setDestination(new File(args[1]));
saver.writeBatch();
Я знаю, что могу создать атрибут String, как это:
Attribute tmp = new Attribute("tmp", (FastVector) null);
Но я не знаю, как заменить текущий атрибут, или установить тип атрибута перед чтением в CSV.
Я попытался вставить новый атрибут String и удалить текущий номинальный атрибут, но при этом удаляется весь текст SMS вместе с ним. Я также попытался использовать renameAttributeValue, но это не работает для изменения типа атрибута.
EDIT: Я подозреваю, что это NominalToString filter будет делать эту работу, но я не знаю, как его использовать.
Любые предложения были бы очень признательны. Благодаря!