Работа над функциональной частью редакторов разговорника завершена. Получились две страницы. Первая - редактор исходного корпуса. Здесь формируется структура разговорника и задаются контексты для исходных фраз. Вторая страница - редактор пользовательской части разговорника, переводчик. Здесь создаётся представление перевода фраз из исходного корпуса на все другие языки.
Теперь предстоит небыстрый процесс сборки вот этого исходного корпуса фраз, который затем должен быть переведён на наши языки. Очень хочется предоставить материал, который будет полезен обычным людям в реальных сценариях, и который будет извлекать максимальную пользу из технической базы интерактивности.
Пока непонятно, как именно собрать такой языковой материал. Будем думать.
Теперь предстоит небыстрый процесс сборки вот этого исходного корпуса фраз, который затем должен быть переведён на наши языки. Очень хочется предоставить материал, который будет полезен обычным людям в реальных сценариях, и который будет извлекать максимальную пользу из технической базы интерактивности.
Пока непонятно, как именно собрать такой языковой материал. Будем думать.
Да, это Черкесо-Осетино-Даргинский параллельный разговорник. Позволяет миновать английский или русский и играться с языками напрямую. Конечно, вряд ли кто-то будет одновременно просматривать вот такой набор языков, но как испытание для системы - картина впечатляющая. И хотя пока полностью переведена лишь одна фраза, можно уверенно говорить о корректной работе системы. И учитывая, что масштабирование здесь линейное, проблем не предвидится.
А ещё записал видео работы с редактором разговорника, где я добавляю дигорский перевод для этой фразы. Увы, там я неправильно перевёл дигорское местоимение (уже исправил на сайте), и произносил слова как попало, за что прошу осетин простить меня, но в качестве демонстрации процесса это сгодится.
А ещё записал видео работы с редактором разговорника, где я добавляю дигорский перевод для этой фразы. Увы, там я неправильно перевёл дигорское местоимение (уже исправил на сайте), и произносил слова как попало, за что прошу осетин простить меня, но в качестве демонстрации процесса это сгодится.
Потихоньку и другие языки начнут вливаться, если сайт окажется полезным для них.
Сагърай агъулар.
Сагърай агъулар.
Forwarded from ruxavus | агульский язык
Media is too big
VIEW IN TELEGRAM
Ас саламу алейкум.
На сайте https://avzag.app/#/ можно понаблюдать за изменением грамматики предложения в керенском диалекте агульского языка в сравнении с другими языками Кавказа. Сайт находится на стадии разработки и на данный момент внесена информация лишь по одной фразе, но к началу марта инша Аллагь начнется внесение информации по 100 базовым фразам.
На сайте https://avzag.app/#/ можно понаблюдать за изменением грамматики предложения в керенском диалекте агульского языка в сравнении с другими языками Кавказа. Сайт находится на стадии разработки и на данный момент внесена информация лишь по одной фразе, но к началу марта инша Аллагь начнется внесение информации по 100 базовым фразам.
Хотелось бы поделиться общими направлениями работы на ближайшее полугодие.
Самое главное сейчас - заполнение разговорника. Я вижу 4 этапа:
1. Составление списка статичных фраз - "спасибо тебе";
2. Выделение в каждой фразе переключаемых частей - "спасибо тебе / вам";
3. Добавление этой информации в систему через редактор корпуса;
4. Перевод этого корпуса через основной редактор на наши языки - осетинские, черкесские, лезгинские и т.д.
Параллельно нужно устранять накопившийся технический долг, в самом широком смысле. Это и рефакторинг кода, и исправление ошибок, и переход на новые инструменты. Для пользователя это будет незаметно, для дальнейших разработок - совершенно необходимо.
Особых сложностей с этими задачами не предвидится, нужно лишь плавно распределить работу, время у нас есть. А уже летом, Хуыцауы фандай, серьёзно возьмёмся за разработку словарей.
Самое главное сейчас - заполнение разговорника. Я вижу 4 этапа:
1. Составление списка статичных фраз - "спасибо тебе";
2. Выделение в каждой фразе переключаемых частей - "спасибо тебе / вам";
3. Добавление этой информации в систему через редактор корпуса;
4. Перевод этого корпуса через основной редактор на наши языки - осетинские, черкесские, лезгинские и т.д.
Параллельно нужно устранять накопившийся технический долг, в самом широком смысле. Это и рефакторинг кода, и исправление ошибок, и переход на новые инструменты. Для пользователя это будет незаметно, для дальнейших разработок - совершенно необходимо.
Особых сложностей с этими задачами не предвидится, нужно лишь плавно распределить работу, время у нас есть. А уже летом, Хуыцауы фандай, серьёзно возьмёмся за разработку словарей.
А тем временем, проекту почти год. То, что начиналось как простая игрушка для моего языка, потихоньку перерастает во что-то стоящее. Через неделю-две у нас будет что показать насчёт разговорника. А пока, вот график из нашего репозитория за последний год. Чем выше зелёная область, тем больше работы было сделано за этот период.
За последний месяц было 2 технических обновления. Они были сильно связаны друг с другом и шли с интервалом в 2 недели, поэтому я решил, что рассказать о них будет уместнее по окончании всей работы. Теперь, когда оба эти обновления на сайте, можно начать. Как и было необходимо, большая часть работы была под капотом (я очень доволен результатом), но есть и немало видимых для конечного пользователя улучшений.
Новое хранилище языковых данных
Весь языковой материал был перемещён в отдельную ветку репозитория. Такое разделение данных и логики позволяет тому, кто желает добавить именно языковой материал, не взаимодействовать с кодом вообще, что облегчает процесс. Что самое важное, теперь любые правки по языкам, будь то тексты или озвучка, появляются на сайте в течении пары минут, так как больше нет необходимости перекомпилировать весь проект.
Исправлена работа кэша
Раньше, в особенности после значительных изменений файловой структуры, нужно было вручную чистить кэш (или переустанавливать сайт как приложение), чтобы получить обновление. Теперь, при открытии домашней страницы (карта), кэш автоматически сбрасывается, что заставляет сайт загружать последние данные. При этом, когда вы открываете какие-либо языки, вся их текстовая информация в открытом модуле - алфавит, конвертер, разговорник (который будет готов в ближайшем будущем) - будет доступна и без интернета до тех пор, пока не будет открыта карта вместе с наличием сети.
Векторные карты
Полностью обновил работу с картой, перейдя на новую библиотеку. Теперь она загружается быстрее, масштабируется плавно, а изображение выглядит намного чётче благодаря векторной графике.
Удобства для редакторов
Мне хотелось бы несколько сбавить техническую работу в последующие месяцы, и больше сосредоточиться на заполнении языков. Во-первых, это то, что видно, а во-вторых, сайт теперь стоит на крепком фундаменте. Поэтому я провёл большую работу по доработке редакторов, так что теперь их интерфейс более аккуратный и функциональный.
- Объединил навигацию всех редакторов в одну компактную панель с 4мя глобальными действиями: загрузить из репозитория, скопировать JSON, вставить JSON, сбросить.
- Добавил возможность клонировать и смещать элементы в местах работы с массивами (преобразования конвертера, секции разговорника, и т.д.)
- Добавил небольшое текстовое поле в редактор конвертера, где можно моментально тестировать переходы.
- Объединил requirements с conditions в редакторе блоков разговорника. Об этом подробнее в следующем посте.
- Добавил кнопку для копирования ID фразы в редакторе разговорника. Об этом тоже подробнее в следующем посте.
Разное
- Добавил отображение флагов выбранных языков на каждый модуль, потому что так красиво.
- Добавил кнопку "копировать" для примеров к фонемам (копирует слово и IPA через пробел).
- Теперь при глоссировании фраз, если у блока не занесены ни IPA, ни, собственно, глоссы, будет отображён стандартный текст.
- Подсказки для контекста во фразах больше не отображают названия сущностей. В этом не было нужды.
- Добавлена шкала проигрывания для аудиофайлов фонем и фраз.
Новое хранилище языковых данных
Весь языковой материал был перемещён в отдельную ветку репозитория. Такое разделение данных и логики позволяет тому, кто желает добавить именно языковой материал, не взаимодействовать с кодом вообще, что облегчает процесс. Что самое важное, теперь любые правки по языкам, будь то тексты или озвучка, появляются на сайте в течении пары минут, так как больше нет необходимости перекомпилировать весь проект.
Исправлена работа кэша
Раньше, в особенности после значительных изменений файловой структуры, нужно было вручную чистить кэш (или переустанавливать сайт как приложение), чтобы получить обновление. Теперь, при открытии домашней страницы (карта), кэш автоматически сбрасывается, что заставляет сайт загружать последние данные. При этом, когда вы открываете какие-либо языки, вся их текстовая информация в открытом модуле - алфавит, конвертер, разговорник (который будет готов в ближайшем будущем) - будет доступна и без интернета до тех пор, пока не будет открыта карта вместе с наличием сети.
Векторные карты
Полностью обновил работу с картой, перейдя на новую библиотеку. Теперь она загружается быстрее, масштабируется плавно, а изображение выглядит намного чётче благодаря векторной графике.
Удобства для редакторов
Мне хотелось бы несколько сбавить техническую работу в последующие месяцы, и больше сосредоточиться на заполнении языков. Во-первых, это то, что видно, а во-вторых, сайт теперь стоит на крепком фундаменте. Поэтому я провёл большую работу по доработке редакторов, так что теперь их интерфейс более аккуратный и функциональный.
- Объединил навигацию всех редакторов в одну компактную панель с 4мя глобальными действиями: загрузить из репозитория, скопировать JSON, вставить JSON, сбросить.
- Добавил возможность клонировать и смещать элементы в местах работы с массивами (преобразования конвертера, секции разговорника, и т.д.)
- Добавил небольшое текстовое поле в редактор конвертера, где можно моментально тестировать переходы.
- Объединил requirements с conditions в редакторе блоков разговорника. Об этом подробнее в следующем посте.
- Добавил кнопку для копирования ID фразы в редакторе разговорника. Об этом тоже подробнее в следующем посте.
Разное
- Добавил отображение флагов выбранных языков на каждый модуль, потому что так красиво.
- Добавил кнопку "копировать" для примеров к фонемам (копирует слово и IPA через пробел).
- Теперь при глоссировании фраз, если у блока не занесены ни IPA, ни, собственно, глоссы, будет отображён стандартный текст.
- Подсказки для контекста во фразах больше не отображают названия сущностей. В этом не было нужды.
- Добавлена шкала проигрывания для аудиофайлов фонем и фраз.
GitHub
GitHub - alkaitagi/avzag at store
Languages, sounds, and scripts. Contribute to alkaitagi/avzag development by creating an account on GitHub.
This media is not supported in your browser
VIEW IN TELEGRAM
В следующем посте я постараюсь рассказать о главном улучшении - возможности добавлять озвучку в разговорник, а так же о некотором упрощении логики работы контекста разговорника. А пока, вот небольшая демонстрация.
После ещё некоторого успешного тестирования и оптимизаций, уверенно считаю, что работать с разговорником стало легче, а принципы его работы - более просты. Продолжаем разбор новых функций.
Упрощённая структура блоков
Напомню, что каждая фраза в разговорнике состоит из блоков, каждый из которых является машиной конечных состояний. Эти блоки изменяют глобальный контекст и реагируют на его изменения. Этот контекст является общим для фраз на всех отображаемых языках. Раньше у каждого блока было поле требований, которые, если не удовлетворены, полностью скрывали блок. Ещё у каждого состояния в блоке был свой набор условий, каждое из которых могло вдобавок быть пассивным. Эта система работала, но мне всё не давала покоя её ненужная сложность, и я сильно желал её упростить.
Теперь же функции требований для отключения блока объединены с условиями состояний. Каждый тег в условии состояния может быть в одном из 3х состояний: игнорирован, запрошен, либо предоставлен. Запрошенный тег, если отсутствует в контексте, скрывает данное состояние. Предоставляемый тег, при показе состояния, посылается в глобальный контекст. При изменении соответствующих свойств контекста каждый блок составляет рейтинг из своих состояний на основе их предоставляемых тегов, и показывает первое из них, либо никакое, если ни одно состояние не нашло все запрашиваемые теги. Абстрактно это может звучать несколько сложно, но на примере должно стать понятно.
Простая фраза с двумя блоками: "ду вянда (я иду)" . Первый блок - я - может быть в одном из двух состояний: "ду (ед.)" и "нисса (мн.)". Первое состояние предоставляет в контекст информацию о том, что лицо в единственном числе, а второе - что во множественном. Далее, второй блок - иду - может быть в одном из трёх состояний: "вянда (муж.)", "рянда (жен.)", "дянда (мн.)". Первое состояние, прежде всего, требует, чтобы человек в контексте был в единственном числе, и предоставляет информацию о том, что он - мужчина. Второе состояние выдвигает то же требование, и предоставляет то, что человек - женщина. А третье состояние не предоставляет ничего, лишь требуя, чтобы лицо было во множественном числе, так как эта информация уже предоставлена во втором состоянии первого блока. Изменение отображаемого состояния в любом блоке с предоставляемыми тегами посылает цепную реакцию через контекст во все другие блоки во всех языках. Вот как-то так.
Упрощённая структура блоков
Напомню, что каждая фраза в разговорнике состоит из блоков, каждый из которых является машиной конечных состояний. Эти блоки изменяют глобальный контекст и реагируют на его изменения. Этот контекст является общим для фраз на всех отображаемых языках. Раньше у каждого блока было поле требований, которые, если не удовлетворены, полностью скрывали блок. Ещё у каждого состояния в блоке был свой набор условий, каждое из которых могло вдобавок быть пассивным. Эта система работала, но мне всё не давала покоя её ненужная сложность, и я сильно желал её упростить.
Теперь же функции требований для отключения блока объединены с условиями состояний. Каждый тег в условии состояния может быть в одном из 3х состояний: игнорирован, запрошен, либо предоставлен. Запрошенный тег, если отсутствует в контексте, скрывает данное состояние. Предоставляемый тег, при показе состояния, посылается в глобальный контекст. При изменении соответствующих свойств контекста каждый блок составляет рейтинг из своих состояний на основе их предоставляемых тегов, и показывает первое из них, либо никакое, если ни одно состояние не нашло все запрашиваемые теги. Абстрактно это может звучать несколько сложно, но на примере должно стать понятно.
Простая фраза с двумя блоками: "ду вянда (я иду)" . Первый блок - я - может быть в одном из двух состояний: "ду (ед.)" и "нисса (мн.)". Первое состояние предоставляет в контекст информацию о том, что лицо в единственном числе, а второе - что во множественном. Далее, второй блок - иду - может быть в одном из трёх состояний: "вянда (муж.)", "рянда (жен.)", "дянда (мн.)". Первое состояние, прежде всего, требует, чтобы человек в контексте был в единственном числе, и предоставляет информацию о том, что он - мужчина. Второе состояние выдвигает то же требование, и предоставляет то, что человек - женщина. А третье состояние не предоставляет ничего, лишь требуя, чтобы лицо было во множественном числе, так как эта информация уже предоставлена во втором состоянии первого блока. Изменение отображаемого состояния в любом блоке с предоставляемыми тегами посылает цепную реакцию через контекст во все другие блоки во всех языках. Вот как-то так.