Я пытаюсь использовать Weka для классификации текста.
Для этой цели имеет смысл использовать разреженный формат файла данных ARFF.
Используя Weka 3.7.2, я попробовал:
- Преобразование текстового каталога в объект Instances с использованием
TextDirectoryLoader .
- Перевод строк, полученных на предыдущем этапе, в числа с использованием StringToWordVector .
Первый этап работал нормально. Второй этап вызвал проблему, описанную таким образом в
Спецификация формата файла ARFF Weka :
Предупреждение. Известна проблема сохранения объектов SparseInstance из наборов данных, имеющих строковые атрибуты. В Weka строковые и номинальные значения данных хранятся в виде чисел; эти числа действуют как индексы в массиве возможных значений атрибута (это очень эффективно). Однако первому строковому значению присваивается индекс 0: это означает, что внутренне это значение сохраняется как 0. При записи SparseInstance строковые экземпляры с внутренним значением 0 не выводятся, поэтому их строковое значение теряется (и когда файл arff читается снова, значение по умолчанию 0 - это индекс другого строкового значения, поэтому значение атрибута меняется).
Формат ARFF предлагает это решение:
Чтобы обойти эту проблему, добавьте фиктивное строковое значение с индексом 0, которое никогда не используется всякий раз, когда вы объявляете строковые атрибуты, которые, вероятно, будут использоваться в объектах SparseInstance и сохраняться как файлы Sparse ARFF.
Я пытаюсь сделать это - добавить фиктивную строку. Мне не удалось сделать это вручную (путем редактирования файла ARFF). Может ли кто-нибудь, кто сделал это, уже опубликовать пример - или из сегмента программы, делающего это, правильно модифицированного файла ARFF, или каким-либо другим способом сделать это?
Спасибо.