Кафедра ИВТиПМ. Конкурс алгоритмов 2021
Регистрация
Отправьте письмо с темой "Конкурс алгоритмов 2021" на адрес: ivt-contest@yandex.ru. В письме расскажите о себе: как Вас зовут, если Вы студент то укажите группу и вуз.
Все участники получат сертификат участия в фестивале Наука 0+, трое победителей — дипломы.
Задания
Задание 1. Анализ новостей
Вам предоставлен набор новостных заметок на русском языке. Заметка может содержать негативную (negative), позитивную (positive) или нейтральную (neutral) новость.
Ваша задача -- создать алгоритм, который как можно точнее определит, к какой из трёх вышеприведённых категорий принадлежит новость.
Данные
Для построения и настройки параметров алгоритма вам доступны данные с уже отмеченными категориями -- файл train.json.
Дайте оценки всем новостям из файла test.json.
upd: Все данные в удобном для чтения формате из программы на PascalABC.NET: data_for_pascal.zip
Оценка результатов
Для оценки вашего алгоритма отправьте файл с ответами для каждой новости на адрес ivt-contest@yandex.ru. Во вложении должен быть файл с ответами и исходный код вашей программы.
Позднее будет добавлена страница задачи на Kaggle
В строках файла с ответами должно быть записано по одной цифре: -1, 0, 1 для негативной, нейтральной или позитивной новости соответственно. В файле должно быть столько же строк, сколько и новостей в файле с новостями: test.json
Пример файла с ответом: submission_example.csv
Можно отправить ответ несколько раз. Но будет засчитан только последний вариант.
Подсказки
Загрузка данных
# исходный код на Python
import pandas as pd
data_tst = pd.read_json( "test.json", orient="records", lines=True )
ata_tst.sample(2) # вывести две случайные строки
# data_tst -- таблица с данными
// исходный код для PascalABC.NET
const
n_train = 6612; // число строк в файле 'train.txt'
n_test = 1654; // число строк а файле 'test.txt'
var
enc:=Encoding.UTF8; // для явного задания универсальной (unicode) кодировки символов файла
f_train: text; // для файла с новостями и оценками
f_test: text; // для файла с новостями, без оценок
f_out: text; // для файла с ответами
train_text: array [1..n_train] of string; // новости (для которых известны оценки)
train_label: array [1..n_train] of string; // оценки: (negative, positive или neutral)
test_text: array [1..n_test] of string; // новости (для которых неизвестны оценки)
test_label: array [1..n_test] of integer; // оценки: (negative = -1, positive=1, или neutral =0)
i, t: integer;
tmp: string;
begin
// =====================
// загрузка данных
// =====================
assign(f_test, 'test.txt');
reset(f_test, enc);
i:=1;
while not EoF(f_test) do
begin
readln(f_test, tmp);
test_text[i] := tmp;
i := i + 1;
end;
close(f_test);
// вывод первых 3 новостей
for i:=1 to 3 do
begin
writeln(train_text[i]);
writeln(train_label[i]);
writeln();
end;
// =====================
// todo: алгоритм определения характера новости: negative, positive или neutral
// =====================
for i:=1 to n_test do
begin
test_label[i] := 1;
end;
// =====================
// запись ответов в файл
// =====================
assign(f_out, 'submission');
rewrite(f_out);
for i:=1 to n_test do
begin
writeln(f_out, test_label[i]);
end;
end.
// подсказка для разделения строки по символу |
// t := LastPos('|', tmp);
// test_label[i] := Copy(tmp, t+1, length(tmp)-t);
Методы анализа и представления текста
- Анализ ключевых слов
- Анализ частот слов (bag of words, TfiDf)
- Анализ векторных представлений (word2vec)
Сроки проведения
Участие - до 15 ноябряПодведение итогов - до 20 ноября
***
Участвуйте если знаете языки: C, C++, C#, Java, Pascal.
Рекомендованный язык программирования - Python.
Для работы с Python используйте сервис Google Colaboratory или дистрибутив Anaconda