Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Сделать и включить в интерфейс обратный конвертер (текст-брайль) #37

Open
IlyaOvodov opened this issue Jan 26, 2021 · 6 comments
Labels

Comments

@IlyaOvodov
Copy link
Owner

No description provided.

@Futyn-Maker
Copy link

Если будет необходимость, могу помочь с этим, а именно, со специфическими правилами Брайля.
Возможно, стоит воспользоваться уже готовыми решениями типа Liblouis и просто сделать интерфейс между сайтом и транслятором?

@IlyaOvodov
Copy link
Owner Author

Спасибо! Именно LibLouis я и собирался использовать. Мне не удалось заставить его нормально переводить с брайля, но перевод в брайль там, вроде, работает. Так что вопрос чисто технический - подключить его к программе и встроить эту функцию в UI сайта. Если реализуете - будет здорово.

@Futyn-Maker
Copy link

Здравствуйте!
К сожалению, пока не могу разобраться, как добавить это напрямую в ваш код, потому что раньше дело с серьёзными Python-проектами не имел, работая только по WEB-у (фронтенд). Поэтому пока просто опишу код, который, в принципе, можно использовать как функцию для перевода.

import louis
from textwrap import fill

def text2Braille(table, file, format='but', lineLength=0):
    tableList = ["en-us-brf.dis", table]
    out = ""
    lines = file.readlines()
    for line in lines:
        if format == 'brf':
            translation = louis.dotsToChar(tableList, louis.translateString(tableList, line, mode=louis.dotsIO|louis.ucBrl))
        else:
            translation = louis.translateString(tableList, line, mode=louis.dotsIO|louis.ucBrl)
        if lineLength != 0:
            translation = fill(translation, lineLength)
        out += translation
        if line != lines[-1]:
            out += "\n"
    file.close()
    return out

Здесь функция на вход получает файл, брайлевскую таблицу, формат выходного документа и длину брайлевской строки. Текст лучше переводить построчно, потому что иначе некоторые правила Liblouis не срабатывают (например, обработка прямой речи).
По формату: я думаю, что целесообразно предоставлять пользователям выбор. Брайлевский текст может быть представлен в виде брайлевских Unicode символов (but), либо в виде Braille ASCII (файлы .brf). Этот формат поддерживают многие брайлевские дисплеи и принтеры, хотя наибольшее распространение, конечно, он получил в западных странах.
Здесь я ввёл также параметр linelength, который позволяет отформатировать готовый брайлевский текст согласно определенной длине брайлевской строки (например, для маленьких брайлевских дисплеев или для вывода на бумагу). Возможно, стоит ввести какую-то более продвинутую систему и реализовать расстановку переносов, но этим я пока не занимался.

Для литературного (шеститочечного брайля) в последней версии Liblouis существуют две таблицы, они называются "ru-litbrl.ctb" и "ru-litbrl-detailed.utb". Отличие в том, что в "detailed" проставляются все признаки заглавных букв, в другой - только при смене алфавита, примерно как в учебниках. Это так же имеет смысл оставить на выбор пользователя.

Возможно, позже смогу сам добавить в код, но, наверное, у вас получится лучше и быстрее :)

Андрей

@IlyaOvodov
Copy link
Owner Author

IlyaOvodov commented Feb 9, 2021

@Futyn-Maker, да, спасибо. При прямом переводе, действительно, самое сложное - добавить функцию в интерфейс, но и это не сложно. Интерфейс сейчас меняем, так что лучше делать, когда уже будет новый.
Вопрос: можете подсказать, есть ли готовые функции по формированию Braille ASCII ?

@Futyn-Maker
Copy link

Futyn-Maker commented Feb 9, 2021

Вопрос: можете подсказать, есть ли готовые функции по формированию Braille ASCII ?

Я сначало делаю брайлевский Unicode, потом перевожу в Braille ASCII с помощью louis.dotsToChar(["en-us-brf.dis", text)
Таблица "en-us-brf.dis" как раз содержит соответствие символам ASCII точечных шаблонов.

@Futyn-Maker
Copy link

На всякий случай, чуть подробнее о функциях
louis.translateString(tableList, line, mode=MODE) - переводит строку текста в Брайль. tableList - массив с таблицами Брайля, можно указать несколько, если текст, например, мультиязычный. Но я не рекомендую так делать без необходимости. Чтобы на выходе получался брайлевский Unicode, в аргументе mode должно быть louis.dotsIO|louis.ucBrl.
louis.dotsToChar(tableList, line) - переводит точечные символы в любое другое представление Брайля в компьютере. В своё время было изобретено много форматов для разных стран, но самый популярный - Braille ASCII. Чтобы переводить в Braille ASCII, в TableList здесь как раз нужна таблица "en-us-brf.dis"

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

2 participants