Comments 45
Если в одном из языков предложение разобъется на два, то в результате выравнивания оно будет склеено в одно, так что все должно быть хорошо. Более того, можно объединить несколько выравниваний и сделать книжку на трех и более языках. Про это писал тут.
Метки сами по себе нужны только для красивой разметки. Если их количество не будет совпадать, то просто каких-то названий глав или картинок не будет и все. Сама книга выравнивается без участия этих тегов.
А почему бы не использовать уже существующие языки разметки, вроде MarkDown или reStructured Text? В чем необходимость придумывать именно свой уникальный формат?
В тех форматах нет такого: %%%%%
Если серьезно, то для такого «птичьего языка» гораздо проще было реализовать парсинг, чем для того же MarkDown'а и тем более RST.
Никто и не заставляет самостоятельно реализовывать их парсинг - готовых либ и так целая куча. Для того же reST есть docutils, который не только преобразует текст а AST, но и позволяет определять кастомные директивы - например, чтобы ими обернуть какое-нибудь поле с именем автора, которого в самом стандарте нет.
Плюс для этих и других форматов есть куча разных конвертеров, например можно было бы проверить работу инструмента на уже существующих книгах и их переводах. А с собственным форматом придется самостоятельно же заниматься конвертацией.
Вам, наверное, показалось, что эта разметка используется непосредственно при генерации книги. Поясню — все, что нужно от разметки сырого текста, — это изъять из текста все строки, оканчивающиеся на %%%%%[имя метки] и прикопать их. Все. Из того, что осталось, делается параллельный корпус.
Затем уже идет код, который создает html на основе корпуса и координат меток.
Вот тут ваша идея кажется интересной — да, можно на основе корпуса и координат меток вместо html делать MD или reST документ, который уже можно визуализировать сторонними библиотеками. Идея хорошая, спасибо.
Я скорее о том, что можно на вход передавать сразу Markdown или reST файл, чтобы не приходилось придумывать полностью новый стандарт. Из выданного парсером AST легко вытащить текст и творить с ним что угодно, а после перевода и замены автоматом получите текст ровно с тем же оформлением. Ну и да, для их рендера тоже полно готовых инструментов.
Есть только небольшие сомнения в удобстве для пользователя, — я как-то писал документацию в reST и там не то чтобы все было очевидно. Плюс надо за отступами было следить. Надо подумать, но, опять же, спасибо за идею.
И, кстати, что делать в таком случае со стилями? При моем подходе, при рендере html я добавляю всяхих классиков в span'ы, чтобы одинаковые предложения подсвечивались, картинки были одного размера, у абзацев были отступы и разделители и т.д.
Стили на выходе рендера должны определяться настройками самого рендера, так что тут нужно смотреть на конкретную реализацию. Возможно, это легко настраивается, а может и придется костылить на уровне переопределение CSS стилей через !important
. Но в вашей задаче точно не нужно пытаться вынести его в текст.
я как-то писал документацию в reST и там не то чтобы все было очевидно
Возможно он немного непривычен, да. Но ведь не обязательно использовать именно его. Тот же Markdown тоже можно использовать, для него готовых парсеров и рендеров еще больше.
Например, для Python есть библиотека markdown, которая к тому же поддерживает расширение синтаксиса через написание собственных плагинов. Даже вот встроенный плагин metadata есть, сразу с примером указания автора документа и прочих атрибутов. Правда она возвращает не AST, а сразу HTML.
парсится одной регуляркой
О нет, только не парсеры на основе регулярок. Вас ждет тысяча и одна пара граблей на этом пути, оно того не стоит.
У меня есть идея приложения для тренировки навыка письма на иностранном языке. Суть в том, что обучающийся переводит текст с родного языка на иностранный. Похоже на метод Ильи Франка но с обратным переводом и в письменном виде. Так вот, ваше приложение может стать неплохим источником текстов для обратного перевода!
Но тут для устной тренировки, не для письменной
А как проверять правильность ответа? Перевести же можно по разному.
Если брать книги, составленные по методу Ильи Франка, то там перевод близок к дословному. И я планировал брать английский текст и менять все буквы в словах каким-то символом, например #, так что у переводящего будет информацмя о количестве слов в предложении и их длине. Так что предложение "London is the capital of Great Britain" примет вид "###### ## ### ######## ## ##### #######". Знаки препинания можно оставять без изменений. Если переводящий только смог перевести только часть слов так, что они совпали со словами под маской, их можно открывать как в "поле чудес". Можно давать подсказки при ошибочном вводе.
У меня даже прототип был на втором питоне. Надо подучить программирование для вэба и запилить вэб приложение. У меня пока довольно смутные представления как это делается. Надеюсь что яваскрипт не обязательно для этого учить:)
Мне кажется было бы круто все это сделать в виде системы вариантов перевода для разных текстов и статей.
Или даже отдельных страниц )
Но это всего лишь про контент. Проделанная работа интересная :)
Про абзацы — здесь у нас совпадение по абзацем не требуется, один из текстов можно вытянуть в единственную строку и все продолжить работать.
Хуже, если в одном из текстов не будет каких-то кусков (может быть, вы именно это имели в виду?), но такое, по моим наблюдениям, встречается довольно редко. Вот тут я выравниваю Мастера и Маргариту на восьми языках.
Потом по желанию добавить разметку и вперед.
Учитель: Дети, запишите предложение…
Teacher: Children, write down the sentence ...
По-моему, это всё-таки sentence.
Выкладываете куда-нибудь?
Можете выложить?
А кто-нибудь встречал приложения для параллельных песен? Чтобы загрузить два разных варианта (например, оригинал и кавер) - и переключаться между ними в любом месте.
Поэкспериментировал с выравниванием книг для башкирского языка. Причем изначально модели не содержат башкирский язык, но в гугловой модели есть татарский. А наши языки очень похожи. Получили очень хороший результат
Lingtrain Aligner. Написал приложение для создания параллельных книг, которое вас удивит