Kodomo

Пользователь

Задание за занятия 6~8: файлы, тексты, простейшие алгоритмы

Пока ваши коллеги пишут токенизаторы, вам предстоит организовать среду для проведения соревнования между ними.

Версия на 10 баллов
Нужно написать программу, которая получает на вход результаты работы нескольких токенизаторов, выравнивает их, определяет консенсус, сохраняет его в файл, и вычисляет степень отклонения каждого из токенизаторов от консенсуса.
Версия на 9 баллов
Программа получает на вход результаты работы нескольких токенизаторов и золотой стандарт, выравнивает их, и определяет степень отклонения каждого из токенизаторов от золотого стандарта. (Всё то же самое, кроме восстановления консенсуса).

Программа должна либо иметь графический интерфейс (например, tkinter) и пользоваться стандартными диалогами для запроса имён файлов (например, tkinter.filedialog), либо иметь интерфейс командной строки (argparse).

Результаты работы токенизаторов выдаются в виде CSV-файлов со столбцами: смещение начала токена (количество символов от начала файла), токен, тип токена.

Разные парсеры могут по-разному определять позицию начала токена (включать или не включать пробелы и пунктуацию перед ним, возвращать позицию первой буквы или предшествующую позицию). Разные парсеры могут некоторые из токенов пропускать как неинформативные (например, некоторые парсеры выделяют пунктуацию как отдельный тип токенов, а некоторые её выбрасывают). Разные парсеры могут по-разному нормализовать токен. Типы токена выбираются из закрытого списка, поэтому их нормализовать не требуется.

Для построения консенсуса нужно про каждую позицию-кандидата ответить на вопросы:

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

Про результаты работы каждого из токенизаторов нужно выдать точность, полноту и f-меру про наличие токена, точный текст токена, тип токена.