Токенизатор/ПерловыйМодуль

Материал из OpenCorpora
Перейти к навигации Перейти к поиску

Назначение

Мы хотим делать модули на Perl для того, чтобы было удобно раздавать результаты проекта программистам.

Возможность использования данных Открытого Корпуса без привязки к его инфраструктуре.

Описание

По сути представляет из себя порт lib_tokenizer. Самостоятельных фич, кроме обновления через интернет, не имеет.

Дистрибутив состоит из набора модулей, документации, вспомогательных скриптов и файлов с данными.

Файлы с данными

Для работы модуля необходимы 4 файла:

  • список векторов с вероятностями
  • список исключений
  • список префиксов
  • список слов с дефисом

Все файлы генерируются автоматически перед релизом новой версии. Генерацией занимается скрипт gen_data_for_module.pl.

Версии файлов, сгенерированные для старых релизов, остаются доступными на скачивание даже после выхода более новой версии. Это позволяет сохранять обратную совместимость обновления для старых версий модуля. Шаблон URL: http://opencorpora.org/files/export/tokenizer_data/$version/$name.{latest,gz}.

Примеры:

Версии

Дистрибутив имеет две версии: версия кода и версия данных.

Rationale

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

Код может обновляться за счет багфиксов, оптимизаций, документации. Все эти причины никак не затрагивают данные.

Точно так же можно добавлять новые данные без изменения самого кода. Каждый день в корпус добавляются новые предложения, правятся ошибки, добавляются исключения и т.д. В идеале это ведет к тому, что в файле с векторами будут более точные данные. Удобно иметь возможность поставлять более точные данные без изменения кода.

Обновление обоих необходимо при изменении алгоритма: данные сгенерированные более новым алгоритмом не могут применяться более старым и наоборот.

Код

Lingua::RU::OpenCorpora::Tokenizer->VERSION

Совершенно независимая версия. Не обязана совпадать с версией lib_tokenizer.

Данные

Lingua::RU::OpenCorpora::Tokenizer::List->data_version

Версия данных по сути показывает, какой версией алгоритма эти самые данные были сгенерированы.

Обновление данных внутри одной версии происходит путем сравнения времени генерации (unix timestamp) локальных и файлов на сервере обновления.

Разработка

Исходный код модуля доступен на GitHub. В репозитории всегда находится самая последняя версия кода, возможно, не всегда готовая для полноценного релиза.

Код в репозитории периодически синхронизируется с кодом lib_tokenizer и collect_data.pl.

Примеры

...

Проблемы

  • Запутанная система назначения версий

Упростить?

  • Медленная работа
  • Отсутствие нормального инструмента для QA

http://opencorpora.org/tokenizer_monitor.php

  • Раздельные обучалка и сам модуль

Внести обучалку в дистрибутив и перенести в репозиторий OpenCopora?