Задание за занятия 6~8: файлы, тексты, простейшие алгоритмы
Пока ваши коллеги пишут токенизаторы, вам предстоит организовать среду для проведения соревнования между ними.
- Версия на 10 баллов
- Нужно написать программу, которая получает на вход результаты работы нескольких токенизаторов, выравнивает их, определяет консенсус, сохраняет его в файл, и вычисляет степень отклонения каждого из токенизаторов от консенсуса.
- Версия на 9 баллов
- Программа получает на вход результаты работы нескольких токенизаторов и золотой стандарт, выравнивает их, и определяет степень отклонения каждого из токенизаторов от золотого стандарта. (Всё то же самое, кроме восстановления консенсуса).
Программа должна либо иметь графический интерфейс (например, tkinter) и пользоваться стандартными диалогами для запроса имён файлов (например, tkinter.filedialog), либо иметь интерфейс командной строки (argparse).
Результаты работы токенизаторов выдаются в виде CSV-файлов со столбцами: смещение начала токена (количество символов от начала файла), токен, тип токена.
Разные парсеры могут по-разному определять позицию начала токена (включать или не включать пробелы и пунктуацию перед ним, возвращать позицию первой буквы или предшествующую позицию). Разные парсеры могут некоторые из токенов пропускать как неинформативные (например, некоторые парсеры выделяют пунктуацию как отдельный тип токенов, а некоторые её выбрасывают). Разные парсеры могут по-разному нормализовать токен. Типы токена выбираются из закрытого списка, поэтому их нормализовать не требуется.
Для построения консенсуса нужно про каждую позицию-кандидата ответить на вопросы:
нужен ли в этом месте токен (или его следует пропустить) – голосование большинства
точный текст токена – голосование большинства
тип токена – голосование большинства
Если на какой-то из вопросов однозначного победителя нет, нужно выбрать случайного из наилучших кандидатов.
Про результаты работы каждого из токенизаторов нужно выдать точность, полноту и f-меру про наличие токена, точный текст токена, тип токена.