AngelinaReader
AngelinaReader copied to clipboard
Сделать и включить в интерфейс обратный конвертер (текст-брайль)
Если будет необходимость, могу помочь с этим, а именно, со специфическими правилами Брайля. Возможно, стоит воспользоваться уже готовыми решениями типа Liblouis и просто сделать интерфейс между сайтом и транслятором?
Спасибо! Именно LibLouis я и собирался использовать. Мне не удалось заставить его нормально переводить с брайля, но перевод в брайль там, вроде, работает. Так что вопрос чисто технический - подключить его к программе и встроить эту функцию в UI сайта. Если реализуете - будет здорово.
Здравствуйте! К сожалению, пока не могу разобраться, как добавить это напрямую в ваш код, потому что раньше дело с серьёзными 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" проставляются все признаки заглавных букв, в другой - только при смене алфавита, примерно как в учебниках. Это так же имеет смысл оставить на выбор пользователя.
Возможно, позже смогу сам добавить в код, но, наверное, у вас получится лучше и быстрее :)
Андрей
@Futyn-Maker, да, спасибо. При прямом переводе, действительно, самое сложное - добавить функцию в интерфейс, но и это не сложно. Интерфейс сейчас меняем, так что лучше делать, когда уже будет новый. Вопрос: можете подсказать, есть ли готовые функции по формированию Braille ASCII ?
Вопрос: можете подсказать, есть ли готовые функции по формированию Braille ASCII ?
Я сначало делаю брайлевский Unicode, потом перевожу в Braille ASCII с помощью louis.dotsToChar(["en-us-brf.dis", text)
Таблица "en-us-brf.dis" как раз содержит соответствие символам ASCII точечных шаблонов.
На всякий случай, чуть подробнее о функциях
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"