Повторное использование кода Weka для анализа файлов ARFF

Кто-нибудь сделал это? Есть ли документация по использованию этого модуля парсера? Я просмотрел код, но мне не ясно, как на самом деле использовать данные после их анализа.

В файле src\main\java\weka\core\converters\ArffLoader.java (который, как я полагаю, происходит синтаксический анализ Arff) есть следующие инструкции:

  • Типичный код для пакетного использования:
  • Читатель BufferedReader = новый BufferedReader(новый FileReader("/some/where/file.arff"));
  • ArffReader arff = новый ArffReader(читатель);
  • Данные экземпляров = arff.getData();
  • data.setClassIndex(data.numAttributes() - 1);

Но что еще я могу сделать с данными? Как получить доступ к каждой строке и значениям в каждой строке?

(Кстати, я новичок в Java. Если я запущу этот код, могу ли я провести какую-то самоанализ данных, чтобы увидеть, что они предлагают? Это то, что я сделал бы в Python.)

(Я также открыт для предложений по более простому синтаксическому анализатору Arff с открытым исходным кодом для использования в моем проекте, если таковой существует.)


person Greg    schedule 04.08.2010    source источник


Ответы (6)


Мне кажется, что ваш ответ лежит в классе Instances - именно там хранятся данные.

Я бы нашел API классов экземпляров, либо найдя или сгенерировав его javadoc, либо просто просмотрев его источник. Методы этого класса должны позволять вам манипулировать данными, загруженными из файла ARFF.

person bguiz    schedule 06.08.2010

Вы можете использовать Weka из Python и погрузиться в самоанализ. . Я успешно использовал Weka от JRuby, чтобы сделать то же самое. Google «Документация Weka», чтобы найти страницу со ссылкой на API для стабильной версии и версии для разработки. У меня недостаточно репутации, чтобы поставить вторую ссылку в свой ответ :)

person michaeltwofish    schedule 16.08.2010

Парсер weka тесно связан с их внутренней моделью данных — Instances.

Формат ARFF не так уж сложен для синтаксического анализа, возможно, вам лучше написать собственный синтаксический анализатор, который непосредственно создает желаемое представление данных.

person Has QUIT--Anony-Mousse    schedule 25.11.2011

после того, как у вас есть данные объекта Instances, вы можете использовать их для:

data.get(index) //get a instance
data.enumerateInstances() // Returns an enumeration of all instances in the dataset.

Вы можете увидеть все методы по адресу: Instances JavaDoc.

person marmundo    schedule 14.03.2013

Я использовал что-то вроде этого:

public class Main {
    private static final String ARFF_FILE_PATH = "YOUR_ARFF_FILE_PATH";

    public static void main(String[] args) throws IOException {
        ArffLoader arffLoader = new ArffLoader();

        File datasetFile = new File(ARFF_FILE_PATH);
        arffLoader.setFile(datasetFile);

        Instances dataInstances = arffLoader.getDataSet();

        for(Instance inst : dataInstances){
            System.out.println("Instance:" + inst);
        }
    }
}
person tbarabasz    schedule 08.11.2013

person    schedule
comment
Пожалуйста, добавьте некоторое объяснение вашего кода в ответ. - person Ram; 06.02.2015