git clone https://github.com/ml-in-programming/bugs-classification.git
cd bugs-classification
gradlew build
Запускаемый jar-файл: build\libs\bugs-classification-v1.jar
war-файл для сервера: server\build\libs\server-v1.war
java -jar build\libs\bugs-classification-v1.jar [команда]
- parse src dst
Преобразует csv файл в используемый в проекте формат
Аргумент | Значение |
---|---|
src | Исходный csv-файл с данными. Ожидаемый формат описан ниже. |
dst | Итоговый файл с предобработанными данными для дальнейшей работы. |
step_id | ID задачи для фильтрации решений. |
Пример: java -jar build\libs\bugs-classification-v1.jar parse data.csv solutions.tmp 239566
- cluster src dst
Кластеризует неправильные решения
Аргумент | Значение |
---|---|
src | Файл с предобработанными данными, полученный с помощью команды parse. |
dst | Итоговый файл с кластеризованными исправлениями. |
Пример: `java -jar build\libs\bugs-classification-v1.jar cluster solutions.tmp clusters.tmp
- mark src dst n_show n_clusters
Позволяет разметить кластеры. Размечается n самых больших кластеров.
Аргумент | Значение |
---|---|
src | Файл с полученными кластерами, полученный с помощью команды cluster. |
dst | Итоговый файл с размеченными данными. |
n_show | Количество элементов кластера, которые будут показываться для примера |
n_clusters | Количество кластеров, которые будут размечены. |
Пример: java -jar build\libs\bugs-classification-v1.jar mark clusters.tmp marks.tmp 5 40
- prepare src solutions dst Преобразует размеченные данные в формат, нужный для быстрого создания классификатора.
Аргумент | Значение |
---|---|
src | Файл с полученными кластерами, полученный с помощью команды cluster. |
solutions | Файл с предобработанными данными, полученный с помощью команды parse |
dst | Итоговый файл с размеченными данными. |
Пример: java -jar build\libs\bugs-classification-v1.jar prepare marks.tmp solutions.tmp prepared.tmp
Ожидается такой формат (порядок столбцов значения не имеет):
step_id,user_id,submission_code,is_passed,timestamp
239,566,"public class HelloWorld {
public static void main(String[] args) {
System.out.println(""Hello, World!"");
}
}",False,1442181616
239,566,"class HelloWorld {
public static void main(String[] args) {
System.out.println(""Hello, World!"");
}
}",False,1442182020
В файле bugs-classification\server\src\main\resources\data.txt прописан путь, откуда сервер попытается загрузить данные. Каждая папка, название которой состоит только из цифр, будет интерпретирована как подготовленные данные для какой-то задачи. Если в этом файле прописан путь path и есть подготовленные данные для задач с номерами (step_id) 239566 и 566239, то ожидается следующее расположение файлов:
path
239566
solutions.tmp
prepared.tmp
566239
solutions.tmp
prepared.tmp
После сбоки проекта, war файл будет лежать в server\build\libs. Сервер поддерживает два вида запросов.
Позволяет получить подсказку для неправильного решения.
Формат запроса следующий:
Ожидается POST запрос по адресу
ip:port/server-v1/webapi/bugs-classification/hint
со следующими аргументами в формате JSON
Аргумент | Значение |
---|---|
problem | Идентификатор задачи (step_id) |
code | Текст решения |
Формат ответа следующий:
{"hint":*hint_text*,"confidence":*confidence*,"errorMessage":*error_message*,"status":*status*,"time":*time*}
Аргумент | Значение |
---|---|
hint | Текст подсказки. Если что-то пошло не так, то поле будет пустым. |
confidence | Уверенность классификатора в ответе |
errorMessage | Сообщение об ошибке. Если запрос был успешно обработан, то поле будет пустым. |
status | Статус обработки запроса. Может принимать два значения: OK и ERROR |
time | Время обработки запроса на сервере |
Пример: Для данного решения задачи с номером 239566
void foo() {}
запрос будет выглядеть, например, так
curl --header "Content-Type: application/json" \
--request POST \
--data '{"problem":53619,"code":"void foo() {}"}' \
http://localhost:8080/server-v1/webapi/bugs-classification/hint
а ответ так
{"hint":"Похоже удача сегодня не на вашей стороне","confidence":1.0,"errorMessage":"","status":"OK","time":556}
Позволяет узнать список задач, для которых доступна функция получения подсказок.
Формат запроса следующий:
Ожидается GET запрос
ip:port/server-v1/webapi/bugs-classification/classifiers
Формат ответа следующий:
[*problem_1*, *problem_2*, ...]
Например
[47538,53619,55715,47334,58088,53676]